scripts/build-release.ps1 packages the desktop installers; scripts/publish.ps1
pushes the container image to git.azuze.fr and attaches the installers to the
Gitea release for the same tag. The split keeps a local build free of any
credential, and lets a failed upload be retried with -BinariesOnly
-NoBinaryBuild without paying for the build again.
Two details the plain `npm run dist:*` path gets wrong for a release:
- package.json's global artifactName resolves NSIS and portable to the same
file name, so one silently overwrites the other. The build script passes
distinct -c.nsis.artifactName / -c.portable.artifactName.
- Artifact names now carry the tag, so publish.ps1 can glob exactly one tag's
files and never ship a stale one. electron-builder's update metadata
(.blockmap, latest*.yml, the NSIS .7z payload) is swept out of dist/ so it
cannot match that glob and end up attached to the release.
The tag defaults to v<package.json version> rather than git describe, because
electron-builder stamps package.json into the app: a SHA-based tag would name
an installer whose About box disagrees with it.
Also brings scripts/server.cjs, vendor.mjs and make-icon.cjs under version
control, which the release scripts and the Docker build both call.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Fix download filename handling in converter and export functions
- Make updateRecordCanvas return Promise to handle async loadFromJSON correctly
- Add setCoords() call in setObjectValue to fix object selection after updates
- Update recorder initialization and animation frame handling
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>