It is the only job here that runs in a container:, and a container job is handed sh -e {0} rather than the bash the runner gives its own jobs. Dash has no pipefail, and no 10# either, so the arithmetic on the next line would have failed the same way. The job now asks for bash, which node:22 carries.
That fix alone would only have moved the failure along: the last step pushes straight to main, which had never run once and needs the token to be allowed past whatever protects the branch — the reason VERSION_BUMP_TOKEN was standing by. unsupervised-scheduler has been bumping its version on every release for a while by pushing a branch and opening a pull request with the ordinary task token, so this adopts that.
The bump is committed to release/bump-<next> and opened as a pull request against main.
VERSION_BUMP_TOKEN is gone; secrets.GITHUB_TOKEN is what scheduler uses and it is enough to push a branch.
[skip ci] is gone with it — main is never pushed, so there is no rebuild of the just-published image to suppress. The pull request instead puts the changed package.json through a build before it lands.
fetch-depth: 0, matching scheduler: a shallow clone cannot reliably push a branch back.
The request body is built by node, not jq — scheduler can use jq because its CI image carries it, and node:22 does not.
An HTTP 409 (a pull request for that branch already open, on a release re-run) is success; anything but 201 prints the response and fails.
The second commit sets the tree to 1.2.2 by hand. 1.2.1 has shipped and is immutable, and the job only fires on a tag, so no re-run will do that retroactively.
Verified locally: the YAML parses and the job's four steps resolve, all three run blocks pass bash -n, and the node -e payload builder run with NEXT=1.2.2 RELEASED=1.2.1 emits valid JSON with head: "release/bump-1.2.2". The branch push and the pull-request call can only really be exercised by the next release tag — they are what scheduler does on every release, just from inside a container this time.
The `bump` job has never worked. On the 1.2.1 release ([run 649](https://git.unsupervised.ca/Unsupervised/antisocial/actions/runs/649/jobs/2647)) its first step died in two seconds:
```
shell: sh -e {0}
/var/run/act/workflow/next.sh: 2: set: Illegal option -o pipefail
```
It is the only job here that runs in a `container:`, and a container job is handed `sh -e {0}` rather than the bash the runner gives its own jobs. Dash has no `pipefail`, and no `10#` either, so the arithmetic on the next line would have failed the same way. The job now asks for bash, which `node:22` carries.
That fix alone would only have moved the failure along: the last step pushes straight to main, which had never run once and needs the token to be allowed past whatever protects the branch — the reason `VERSION_BUMP_TOKEN` was standing by. `unsupervised-scheduler` has been bumping its version on every release for a while by pushing a branch and opening a pull request with the ordinary task token, so this adopts that.
- The bump is committed to `release/bump-<next>` and opened as a pull request against main.
- `VERSION_BUMP_TOKEN` is gone; `secrets.GITHUB_TOKEN` is what scheduler uses and it is enough to push a branch.
- `[skip ci]` is gone with it — main is never pushed, so there is no rebuild of the just-published image to suppress. The pull request instead puts the changed `package.json` through a build before it lands.
- `fetch-depth: 0`, matching scheduler: a shallow clone cannot reliably push a branch back.
- The request body is built by `node`, not `jq` — scheduler can use jq because its CI image carries it, and `node:22` does not.
- An HTTP 409 (a pull request for that branch already open, on a release re-run) is success; anything but 201 prints the response and fails.
The second commit sets the tree to 1.2.2 by hand. 1.2.1 has shipped and is immutable, and the job only fires on a tag, so no re-run will do that retroactively.
Verified locally: the YAML parses and the job's four steps resolve, all three `run` blocks pass `bash -n`, and the `node -e` payload builder run with `NEXT=1.2.2 RELEASED=1.2.1` emits valid JSON with `head: "release/bump-1.2.2"`. The branch push and the pull-request call can only really be exercised by the next release tag — they are what scheduler does on every release, just from inside a container this time.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01XBT25ZDzm453A8XViSRqRB
The bump job has never once worked. Its first step died in two seconds on
`set: Illegal option -o pipefail` -- it is the only job here that runs in a
container, and a container job is handed `sh -e {0}` rather than the bash the
runner gives its own jobs. Dash has no `pipefail`, and no `10#` either, so the
arithmetic on the line after would have gone the same way. It now asks for
bash, which node:22 carries.
That would have got the job as far as its last step, which pushed straight to
main. Nothing had ever exercised that, and it needs the token to be allowed
past whatever protects the branch -- hence the second token, VERSION_BUMP_TOKEN,
standing by for where it is not. unsupervised-scheduler has been bumping its
version on every release for a while by pushing a branch and opening a pull
request with the ordinary task token, so that is what this does now. The second
token is no longer needed, and neither is `[skip ci]`: main is never pushed, so
there is no build of the just-published image to suppress. The pull request
puts the changed package.json through a build before it lands.
scheduler builds the request body with jq because its CI image carries jq. This
one is node:22, where node is the thing that certainly is there.
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XBT25ZDzm453A8XViSRqRB
1.2.1 shipped, so the tree was left on a version that is published and
immutable, which is the thing the bump job exists to prevent. It failed before
it got that far. Done by hand here, once: the job only fires on a tag, so no
re-run of it will do this retroactively.
Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01XBT25ZDzm453A8XViSRqRB
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The
bumpjob has never worked. On the 1.2.1 release (run 649) its first step died in two seconds:It is the only job here that runs in a
container:, and a container job is handedsh -e {0}rather than the bash the runner gives its own jobs. Dash has nopipefail, and no10#either, so the arithmetic on the next line would have failed the same way. The job now asks for bash, whichnode:22carries.That fix alone would only have moved the failure along: the last step pushes straight to main, which had never run once and needs the token to be allowed past whatever protects the branch — the reason
VERSION_BUMP_TOKENwas standing by.unsupervised-schedulerhas been bumping its version on every release for a while by pushing a branch and opening a pull request with the ordinary task token, so this adopts that.release/bump-<next>and opened as a pull request against main.VERSION_BUMP_TOKENis gone;secrets.GITHUB_TOKENis what scheduler uses and it is enough to push a branch.[skip ci]is gone with it — main is never pushed, so there is no rebuild of the just-published image to suppress. The pull request instead puts the changedpackage.jsonthrough a build before it lands.fetch-depth: 0, matching scheduler: a shallow clone cannot reliably push a branch back.node, notjq— scheduler can use jq because its CI image carries it, andnode:22does not.The second commit sets the tree to 1.2.2 by hand. 1.2.1 has shipped and is immutable, and the job only fires on a tag, so no re-run will do that retroactively.
Verified locally: the YAML parses and the job's four steps resolve, all three
runblocks passbash -n, and thenode -epayload builder run withNEXT=1.2.2 RELEASED=1.2.1emits valid JSON withhead: "release/bump-1.2.2". The branch push and the pull-request call can only really be exercised by the next release tag — they are what scheduler does on every release, just from inside a container this time.🤖 Generated with Claude Code
https://claude.ai/code/session_01XBT25ZDzm453A8XViSRqRB
The bump job has never once worked. Its first step died in two seconds on `set: Illegal option -o pipefail` -- it is the only job here that runs in a container, and a container job is handed `sh -e {0}` rather than the bash the runner gives its own jobs. Dash has no `pipefail`, and no `10#` either, so the arithmetic on the line after would have gone the same way. It now asks for bash, which node:22 carries. That would have got the job as far as its last step, which pushed straight to main. Nothing had ever exercised that, and it needs the token to be allowed past whatever protects the branch -- hence the second token, VERSION_BUMP_TOKEN, standing by for where it is not. unsupervised-scheduler has been bumping its version on every release for a while by pushing a branch and opening a pull request with the ordinary task token, so that is what this does now. The second token is no longer needed, and neither is `[skip ci]`: main is never pushed, so there is no build of the just-published image to suppress. The pull request puts the changed package.json through a build before it lands. scheduler builds the request body with jq because its CI image carries jq. This one is node:22, where node is the thing that certainly is there. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01XBT25ZDzm453A8XViSRqRB