fix: build the runner with a schema that accepts Gitea 28's matrix jobs #16

Merged
markus merged 1 commits from claude/fix/gitea28-strategy-fields into master 2026-11-08 10:33:30 +00:00
Member

Requested by Markus · project thread

Before: since Gitea 28.3.0, every matrix job on these runners dies before its first step: Unknown Property job-index … job-total … the workflow file is not usable. That stopped zegit's v0.1.52 image build (image-gitea.yml run 23992).

After: the image carries a runner that accepts those two fields and ignores them. Everything else in the image is unchanged.

How. Gitea 28 adds job-index and job-total under strategy in the single-job workflow it sends the runner. No forgejo-runner release accepts them (schema checked in 12.11.1, 12.13.2, 13.2.1). A new build stage takes upstream v12.11.1 at commit 8e01d43c, applies patches/0001-*.patch, runs the patch's two tests, builds a static binary and copies it over the stock /bin/forgejo-runner. The patch touches act/schema/workflow_schema.json only (10 lines), plus tests and a test fixture (the real rejected payload from job 52616). The Go builder and the runner base are now pinned by digest.

Assumptions & Decisions

  • The final image still starts FROM the stock runner 12.11.1 so the toolchain layers are the same as ci9; only the binary is replaced.
  • The binary still reports v12.11.1, so Gitea sees the same version as before.
  • Markus chose the patched runner over removing the matrix, and no local proof: the ci10 rollout is the live test. A fallback that removes the matrix stays on a local zegit branch.
  • Base digests are the index digests of data.forgejo.org/oci/golang:1.25-alpine3.23 and code.forgejo.org/forgejo/runner:12.11.1 as of 2026-11-08.

How it was tested

  • TestGenerateWorkflow_Gitea28MatrixJob feeds the real 591-line payload through generateWorkflow: red without the patch with the exact production error, green with it. Its matrix expands to image: z-gateway-server.
  • go test -short on act/schema, act/model, act/jobparser and internal/... passes on the patched tree.
  • docker buildx build --platform linux/amd64 of this Dockerfile succeeds; the binary reports forgejo-runner version v12.11.1.
  • Not tested: the arm64 build (the workflow builds both), and a real matrix job against Gitea 28, which is the rollout.

After merge (operator)

  1. Run build image (gitea) (build-image-gitea.yml) on master with tag=12.11.1-ci10, sign_only=false.
  2. Bump zegit-forgejo-runner to 12.11.1-ci10@<digest> in flux-config, on deployment-zegit-runner.yaml lines 104 and 150, and deployment-forgejo-runner.yaml lines 49 and 91 (it uses the same image).

🤖 Generated with Claude Code

<!-- claude-projects-attribution: {"github_login":"AtomicBackspace"} --> _Requested by **Markus** · [project thread](https://claude.ai/code/project/chan_01VZVzJf1ggm8Ck9zzkXBenz?thread=cmsg_01VZVzJf1ggm8Ck9zzkXBenzTss2Yj7N5tPHMif39Zt6dR)_ Before: since Gitea 28.3.0, every matrix job on these runners dies before its first step: `Unknown Property job-index … job-total … the workflow file is not usable`. That stopped zegit's v0.1.52 image build (image-gitea.yml run 23992). After: the image carries a runner that accepts those two fields and ignores them. Everything else in the image is unchanged. **How.** Gitea 28 adds `job-index` and `job-total` under `strategy` in the single-job workflow it sends the runner. No forgejo-runner release accepts them (schema checked in 12.11.1, 12.13.2, 13.2.1). A new build stage takes upstream v12.11.1 at commit 8e01d43c, applies `patches/0001-*.patch`, runs the patch's two tests, builds a static binary and copies it over the stock `/bin/forgejo-runner`. The patch touches `act/schema/workflow_schema.json` only (10 lines), plus tests and a test fixture (the real rejected payload from job 52616). The Go builder and the runner base are now pinned by digest. ## Assumptions & Decisions - The final image still starts `FROM` the stock runner 12.11.1 so the toolchain layers are the same as ci9; only the binary is replaced. - The binary still reports `v12.11.1`, so Gitea sees the same version as before. - Markus chose the patched runner over removing the matrix, and no local proof: the ci10 rollout is the live test. A fallback that removes the matrix stays on a local zegit branch. - Base digests are the index digests of `data.forgejo.org/oci/golang:1.25-alpine3.23` and `code.forgejo.org/forgejo/runner:12.11.1` as of 2026-11-08. ## How it was tested - `TestGenerateWorkflow_Gitea28MatrixJob` feeds the real 591-line payload through `generateWorkflow`: red without the patch with the exact production error, green with it. Its matrix expands to `image: z-gateway-server`. - `go test -short` on `act/schema`, `act/model`, `act/jobparser` and `internal/...` passes on the patched tree. - `docker buildx build --platform linux/amd64` of this Dockerfile succeeds; the binary reports `forgejo-runner version v12.11.1`. - **Not tested:** the arm64 build (the workflow builds both), and a real matrix job against Gitea 28, which is the rollout. ## After merge (operator) 1. Run **build image (gitea)** (`build-image-gitea.yml`) on master with `tag=12.11.1-ci10`, `sign_only=false`. 2. Bump `zegit-forgejo-runner` to `12.11.1-ci10@<digest>` in flux-config, on `deployment-zegit-runner.yaml` lines 104 and 150, and `deployment-forgejo-runner.yaml` lines 49 and 91 (it uses the same image). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
agent added 1 commit 2026-11-08 10:31:24 +00:00
Gitea 28 adds job-index and job-total under strategy in the workflow it
sends for a matrix job, and forgejo-runner's schema refuses them, so
every matrix job dies before its first step (zegit image-gitea.yml run
23992, the v0.1.52 tag build). No forgejo-runner release accepts them
(checked through 13.2.1). Build the runner from v12.11.1 at its commit
with a one-file schema patch and two tests, one of them the real payload
of that failed job; the build runs them. Bases are pinned by digest.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_018wWyCiV27KmNSauYTdLyp7
markus marked the pull request as ready for review 2026-11-08 10:33:26 +00:00
markus merged commit 3718556e29 into master 2026-11-08 10:33:30 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: zegit-zoo/zegit-forgejo-runner#16