ci(release): package the extension from scripts/build-release.sh - #269
Merged
Conversation
Same move as SpriteStudio-SDK #361 and SSPlayerForUnity #101. The package job's `cp` and `mv` — what the addon folder contains — lived only in release.yml, so the only way to try a change was to push it and watch six platforms rebuild. release.yml drops from 324 lines to 308, and from 100 lines of inline shell to 53. What is left is the signing keychain and the Apple API key, which handle secrets and are genuinely GitHub's; the package job has 3 lines, the non-tag guard. The check is the reason this was worth doing. misc/spritestudio.gdextension names a file per platform and build target — nineteen paths — plus three icons, and **Godot resolves them at load time**. A name that does not match what actually shipped fails no build and no zip: the extension simply does not load, on that one platform, for whoever downloaded it. Nothing in this pipeline compared the two. Now every path in the descriptor is looked up inside the finished archive; dropping one Android .so from a test build is caught. Aligned with the rest of the family: - upload_release=true from a non-tag ref fails instead of silently skipping the Release, which is what `if: startsWith(github.ref, …)` used to do — a dispatch meant to cut a release should not report success and produce none. - SHA256SUMS is written by the script. - workflow artifacts expire after a week. The Release is what lasts, and a full org storage quota fails the build in a step unrelated to it. Also: no commit hash in the artifact names. They are consumed by the package job in the same run, where the platform already makes them unique, and a name the packaging step has to be told the hash of is a name it cannot resolve on its own — which took pr-mpt/actions-commit-hash out of both jobs. release-gdextension-windows.ps1 now drops its own .exp / .lib link residue, rather than release.yml doing it afterwards, so bin/windows looks the same locally as it does in a release. Verified by extracting the old workflow's packaging shell and running both over the same fixture: 46 zip entries and every file's contents match. The .ps1 twin produces an identical archive too.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The same move as SpriteStudio-SDK #361 and SSPlayerForUnity #101.
release.ymldrops from 324 lines to 308, and from 100 lines of inline shell to 53. What is left is the signing keychain and the Apple API key — they handle secrets and are genuinely GitHub's. The package job has 3 lines, the non-tag guard.The check is why this was worth doing
misc/spritestudio.gdextensionnames a file per platform and build target — nineteen paths — plus three icons, and Godot resolves them at load time.A name that does not match what actually shipped fails no build and no zip. The extension simply does not load, on that one platform, for whoever downloaded it. Nothing in this pipeline compared the two.
Every path in the descriptor is now looked up inside the finished archive. Dropping one Android
.sofrom a test build is caught:It does not build
Six platforms need Linux, Windows and macOS between them, so there is no local equivalent of the matrix. This is the phase after it is settled what is being released — the tag comes from the checkout, the binaries from whatever populated
in=— so it takes no option that re-decides either:Aligned with the family
upload_release=truefrom a non-tag ref fails instead of silently skipping the Release, which is whatif: startsWith(github.ref, …)used to do. A dispatch meant to cut a release should not report success and produce none.SHA256SUMSis written by the script.No commit hash in artifact names
They are consumed by the package job in the same run, where the platform already makes them unique — and a name the packaging step has to be told the hash of is a name it cannot resolve on its own. That took
pr-mpt/actions-commit-hashout of both jobs.release-gdextension-windows.ps1now drops its own.exp/.liblink residue instead ofrelease.ymldoing it afterwards, sobin/windowslooks the same locally as it does in a release.Verification
The old workflow's packaging shell (45 lines) was extracted from git and run over the same fixture as the new script:
The
.ps1twin was run on pwsh 7.6.5 and produces identical extracted contents andSHA256SUMSformatting. (The archive hash itself differs between runs —zipstores per-file mtimes.)Not yet verified in CI
This repository has no release runs at all, so the workflow has never been exercised. After merging, dispatch once with
upload_release=falseand check thessplayer-godot-release-dist-4.7artifact.