Releasing a Studio build
Releases are built by GitHub Actions in the noxsware-clothing repository (Release Studio, .github/workflows/release.yml). It tests, publishes the single-file exe as NoxswareStudio.exe, and uploads it to the noxsware-releases R2 bucket, where the client portal’s download and the app’s update check look for it.
Release to everyone (prod)
Section titled “Release to everyone (prod)”-
Bump
<Version>inapp/Noxsware.App.csproj(e.g.1.1.0) and commit it tomaster. -
Tag that commit with the same version. The tag message becomes the notes in the app’s update bar:
Terminal window git tag -a v1.1.0 -m "Faster texture optimizer and the new Map conflicts page."git push origin v1.1.0 -
Watch the Release Studio run. It fails on purpose if the tag doesn’t match
<Version>, if the tests fail, or ifbuild/ngkeys.datis missing from the bucket.
When it’s green, NoxswareStudio.exe and latest.json are in studio/prod/, and a GitHub release with the exe and its SHA-256 exists.
Try it on staging or dev first
Section titled “Try it on staging or dev first”Actions → Release Studio → Run workflow, pick the commit, the channel (staging, dev or prod) and optional notes. The same build is uploaded to studio/<channel>/ only, with no GitHub release. staging.noxsware.com and dev.noxsware.com serve those.
What ends up in the bucket
Section titled “What ends up in the bucket”| Object | What |
|---|---|
studio/<channel>/NoxswareStudio.exe |
What the portal’s Download serves |
studio/<channel>/latest.json |
{"version","published","notes"}, read by /api/studio/latest and the app’s update check |
studio/<channel>/v<version>/NoxswareStudio.exe |
A copy kept per version |
The exe is uploaded before latest.json, so the app is never told about a version that can’t be downloaded yet.
- The portal’s download card shows the new version within 5 minutes (the version is cached that long).
https://noxsware.com/api/studio/latestreturns the new version.- An older studio shows Noxsware Studio 1.1.0 is available. at its next start.
Roll back
Section titled “Roll back”Copy the previous version’s exe from studio/prod/v<old>/ over studio/prod/NoxswareStudio.exe, and put back a latest.json naming that version. The bucket is in the EU jurisdiction, so wrangler needs --jurisdiction eu:
npx wrangler r2 object get noxsware-releases/studio/prod/v1.0.0/NoxswareStudio.exe --file NoxswareStudio.exe --jurisdiction eu --remotenpx wrangler r2 object put noxsware-releases/studio/prod/NoxswareStudio.exe --file NoxswareStudio.exe --jurisdiction eu --remotenpx wrangler r2 object put noxsware-releases/studio/prod/latest.json --file latest.json --jurisdiction eu --remoteApps that already updated keep the newer version; the update bar only appears for versions newer than the running one.