.github/workflows/package-release.yaml calls rainix-tag-release with an input that rainlanguage/rainix#302 removes, and with a value that #302's new contract forbids. Both halves have to change, and the change must land after #302.
What breaks
The caller today:
uses: rainlanguage/rainix/.github/workflows/rainix-tag-release.yaml@main
with:
soldeer-package: rain-deploy
snapshot-generate-cmd: forge script ./script/Build.sol --sig "cutRelease()" && forge fmt
#302 deletes snapshot-generate-cmd, replacing it with pointers-generate-cmd (required: false, default: ''). A caller passing an input the reusable no longer declares fails at workflow_call startup — "Input is required, but not provided" in the other direction — so the first sol-v* tag after #302 lands fails immediately. Nothing is generated, published or committed, since it is an input-validation error raised before any step runs.
The value is wrong too, not just the key
cutRelease() is a freeze: src/abstract/BuildScript.sol:53 calls LibRainDeploySnapshot.freeze(vm, recordRoot(), regenerateSnapshots, snapshotContractNames()) and then regenerates the libs. #302's input is deliberately generate-only — it runs strictly before the freeze, and rainix-static cut-release refuses when the generation command creates the numbered release directory itself, which is exactly what freeze does.
The replacement is the run() entrypoint at BuildScript.sol:46, which regenerates and freezes nothing:
with:
soldeer-package: rain-deploy
pointers-generate-cmd: forge script ./script/Build.sol
&& forge fmt is dropped deliberately: the format step moved inside cut-release, which owns the regenerate → format → freeze order rather than taking it as a shell string. That reordering is the whole point of rainlanguage/rainix#301.
Note this repo cannot use the input's default (forge script ./script/BuildPointers.sol) — its script is script/Build.sol. Raised separately on #302, since every repo adopting BuildScript will hit it.
Ordering
Merge after #302. Between the two merges either order of tagging fails at startup, so the only real precaution is to push no sol-v* tag until both have landed. rainlanguage/rain.factory.deploy#9 is the sibling change for that repo and documents the same constraint.
Follow-on, not part of this change
Once rainix owns the freeze, cutRelease() is a second implementation of it living here, with its own ordering and its own idea of what a frozen record is — the divergence #301 was raised about, relocated rather than removed. It should either be retired, or documented in place as the local-only path that CI never calls.
Precondition already met
Unlike rain.factory.deploy, this repo is already on the rolling-candidate model — src/generated/candidate/ exists — so cut-release's precondition holds today.
.github/workflows/package-release.yamlcallsrainix-tag-releasewith an input that rainlanguage/rainix#302 removes, and with a value that #302's new contract forbids. Both halves have to change, and the change must land after #302.What breaks
The caller today:
#302 deletes
snapshot-generate-cmd, replacing it withpointers-generate-cmd(required: false,default: ''). A caller passing an input the reusable no longer declares fails atworkflow_callstartup — "Input is required, but not provided" in the other direction — so the firstsol-v*tag after #302 lands fails immediately. Nothing is generated, published or committed, since it is an input-validation error raised before any step runs.The value is wrong too, not just the key
cutRelease()is a freeze:src/abstract/BuildScript.sol:53callsLibRainDeploySnapshot.freeze(vm, recordRoot(), regenerateSnapshots, snapshotContractNames())and then regenerates the libs. #302's input is deliberately generate-only — it runs strictly before the freeze, andrainix-static cut-releaserefuses when the generation command creates the numbered release directory itself, which is exactly whatfreezedoes.The replacement is the
run()entrypoint atBuildScript.sol:46, which regenerates and freezes nothing:&& forge fmtis dropped deliberately: the format step moved insidecut-release, which owns the regenerate → format → freeze order rather than taking it as a shell string. That reordering is the whole point of rainlanguage/rainix#301.Note this repo cannot use the input's default (
forge script ./script/BuildPointers.sol) — its script isscript/Build.sol. Raised separately on #302, since every repo adoptingBuildScriptwill hit it.Ordering
Merge after #302. Between the two merges either order of tagging fails at startup, so the only real precaution is to push no
sol-v*tag until both have landed. rainlanguage/rain.factory.deploy#9 is the sibling change for that repo and documents the same constraint.Follow-on, not part of this change
Once rainix owns the freeze,
cutRelease()is a second implementation of it living here, with its own ordering and its own idea of what a frozen record is — the divergence #301 was raised about, relocated rather than removed. It should either be retired, or documented in place as the local-only path that CI never calls.Precondition already met
Unlike
rain.factory.deploy, this repo is already on the rolling-candidate model —src/generated/candidate/exists — socut-release's precondition holds today.