Merge chore: release 0.2.1 (#23) into develop first. This pull request
tracks the develop branch, so it will pick the version bump up automatically.
Merging it before #23 would put VERSION=0.2.0 on main, and the tag guard in build-image.yml refuses a v0.2.1 tag that disagrees with VERSION.
What lands on main:
reporting kept off the job critical path — the change measured as the 0.2.1
RC column in docs/benchmarks.md;
the job base image served from syncode.sh, same index digest as the mirrored
upstream, so the pin did not move;
crate::protocol renamed to crate::gitea_protocol;
registry build cache for release builds, so a run no longer rebuilds both
architectures from scratch after the per-run builder is destroyed;
documentation-only pushes and pull requests no longer build images;
superseded pull request builds are cancelled, and pull request builds export
nothing to the shared host;
the compatibility suite runs nightly instead of on a click;
the license names the SynCode authors, and the bundled hash-files.js has
recorded provenance.
Two of these only take effect once they are on main: the scheduled
compatibility run, because the forge detects schedules on the default branch
only, and the production job image base.
After this merges, the main build publishes main, latest and the commit sha.
Tagging v0.2.1 on that commit then runs the promote path, which copies those
manifests to runner:0.2.1 and runner-job:ubuntu-24.04-0.2.1 — no rebuild, so
the released images are byte-identical to the ones the main build verified.
The infra pins in meta follow once those tags exist.
Release of 0.2.1 to the production line.
**Merge `chore: release 0.2.1` (#23) into `develop` first.** This pull request
tracks the `develop` branch, so it will pick the version bump up automatically.
Merging it before #23 would put `VERSION=0.2.0` on `main`, and the tag guard in
`build-image.yml` refuses a `v0.2.1` tag that disagrees with `VERSION`.
What lands on `main`:
- reporting kept off the job critical path — the change measured as the `0.2.1`
RC column in `docs/benchmarks.md`;
- the job base image served from syncode.sh, same index digest as the mirrored
upstream, so the pin did not move;
- `crate::protocol` renamed to `crate::gitea_protocol`;
- registry build cache for release builds, so a run no longer rebuilds both
architectures from scratch after the per-run builder is destroyed;
- documentation-only pushes and pull requests no longer build images;
- superseded pull request builds are cancelled, and pull request builds export
nothing to the shared host;
- the compatibility suite runs nightly instead of on a click;
- the license names the SynCode authors, and the bundled `hash-files.js` has
recorded provenance.
Two of these only take effect once they are on `main`: the scheduled
compatibility run, because the forge detects schedules on the default branch
only, and the production job image base.
After this merges, the main build publishes `main`, `latest` and the commit sha.
Tagging `v0.2.1` on that commit then runs the promote path, which copies those
manifests to `runner:0.2.1` and `runner-job:ubuntu-24.04-0.2.1` — no rebuild, so
the released images are byte-identical to the ones the main build verified.
The infra pins in `meta` follow once those tags exist.
The reporter drove the worker future from its own select loop and awaited
a control plane round trip on every StepStarted and StepCompleted event.
Both futures belong to one task, so each delivery suspended step
execution. A 20-step job spent 44 UpdateTask calls, and most of its wall
clock, waiting for the forge.
Report job state on a periodic tick instead of per step transition, and
drive the worker future while a delivery is in flight.
Documentation never reaches the images, yet a README edit invalidated the
source layer and rebuilt the whole workspace. Filter documentation-only
pull requests, exclude it from the main build scope and drop it from the
build context.
Pull request builds now export nothing: the images they produced stayed on
the shared host, and a cancelled build never reached the cleanup step.
Superseded builds are cancelled, because the host runs one job at a time.
The config was inherited from the upstream runner and extends
`local>gitea/renovate-config`, which does not exist on this forge. Nothing
runs Renovate here either, so the file only claimed automation we do not
have.
Every release build created a fresh buildx builder and destroyed it on exit,
so the Cargo cache mounts and every layer were rebuilt from scratch for both
platforms. Keep the cache in the registry, which outlives the builder.
Verified against the SynCode registry on the runner host: a build with a
freshly created builder imports the cache and reuses the layers.
The suite only ran when someone clicked it, and covered two features. It now
runs nightly, on pull requests that touch the workflow or cache adapters, and
still on demand.
New coverage: cache round-trip through the runner's cache API, matrix
expansion, job outputs consumed across jobs, expression functions including
hashFiles, and the vendor contexts a SynCode control plane exposes.
The license file still carried the upstream runner's copyright, although no
Go source survived the Rust rewrite. What remains from Gitea is the vendored
protocol definition, which keeps its own license and pin next to it.
hash-files.js had no recorded provenance. It is an ncc bundle of the Actions
glob toolkit, identified by its module set and bundler signature.
`crate::protocol` promised a neutrality the module does not have: it is the
Gitea Connect family, and the CLI maps only SynCode, Gitea and Forgejo onto it
while rejecting GitHub and GitLab. Every other re-export in lib.rs names what it
is.
Renaming now is a rename. After a second control-plane adapter it would also be
a migration of whatever grew on the ambiguous name.
The release carries the reporting fix that kept the control plane off the job
critical path, the job base image served from syncode.sh, and the named Gitea
protocol re-export.
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.
Release of 0.2.1 to the production line.
Merge
chore: release 0.2.1(#23) intodevelopfirst. This pull requesttracks the
developbranch, so it will pick the version bump up automatically.Merging it before #23 would put
VERSION=0.2.0onmain, and the tag guard inbuild-image.ymlrefuses av0.2.1tag that disagrees withVERSION.What lands on
main:0.2.1RC column in
docs/benchmarks.md;upstream, so the pin did not move;
crate::protocolrenamed tocrate::gitea_protocol;architectures from scratch after the per-run builder is destroyed;
nothing to the shared host;
hash-files.jshasrecorded provenance.
Two of these only take effect once they are on
main: the scheduledcompatibility run, because the forge detects schedules on the default branch
only, and the production job image base.
After this merges, the main build publishes
main,latestand the commit sha.Tagging
v0.2.1on that commit then runs the promote path, which copies thosemanifests to
runner:0.2.1andrunner-job:ubuntu-24.04-0.2.1— no rebuild, sothe released images are byte-identical to the ones the main build verified.
The infra pins in
metafollow once those tags exist.