Skip to content

ci: run private repos on RunsOn instead of hbr1 - #37

Merged
hbrombeer merged 3 commits into
mainfrom
runs-on-magic-cache
Oct 17, 2026
Merged

hbrombeer merged 3 commits into
mainfrom
runs-on-magic-cache

Conversation

@hbrombeer

@hbrombeer hbrombeer commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Private repositories default to RunsOn spot instances (eu-central-1) instead of the grounds-runners ARC pool on hbr1. Public repos stay on GitHub-hosted runners.

Jobs Size
gradle-ci, gradle-publish, docker-gradle-build-push, preview build cpu=4/ram=16, Magic Cache
release-please, label-sync, preview slashcmd / mint / evict cpu=2/ram=8

All labels use family=m8a+m7a+m8i/spot=capacity-optimized: only these three families at the fixed size, spot pools picked by capacity so jobs don't fall back to on-demand.

On RunsOn the Magic Cache (runs-on/action@v2) is enabled and the Actions cache turned back on: setup-java, setup-gradle, Buildx type=gha. Detection is by runner name, so callers that pass their own RunsOn label as runner get it too.

Measured on the five busiest repos (PR runs, median): builds 54–84 % faster than hbr1, about $0.003–0.01 per job on spot.

Repos with their own runner labels are moved in separate PRs (ci/runs-on branches).

When the runner input is a RunsOn label (runs-on=...), enable the
Magic Cache via runs-on/action and turn the Actions cache back on:
setup-java and setup-gradle caching, and the Buildx type=gha layer
cache. hbr1 ARC and GitHub-hosted runners are unchanged.
@hbrombeer
hbrombeer marked this pull request as ready for review October 17, 2026 16:35
Private repositories now default to RunsOn spot instances in our AWS
account instead of the grounds-runners ARC pool on hbr1:

- builds (gradle-ci, gradle-publish, docker-gradle-build-push, preview
  build): m8a.xlarge, 4 vCPU / 16 GB, with Magic Cache
- API-only jobs (release-please, label-sync, preview slashcmd, mint,
  evict): m8a.large, 2 vCPU / 8 GB

The Magic Cache is now detected from the runner name, so it also
applies to callers that pass their own RunsOn label. Public repos stay
on GitHub-hosted runners.
@hbrombeer hbrombeer changed the title ci: use RunsOn Magic Cache on runs-on runners ci: run private repos on RunsOn instead of hbr1 Oct 17, 2026
Allow m7a and m8i next to m8a at the same size and pick spot pools by
capacity, so jobs stay on spot instead of falling back to on-demand
when one pool runs dry.
@hbrombeer
hbrombeer merged commit 3fcc61f into main Oct 17, 2026
1 of 2 checks passed
@hbrombeer
hbrombeer deleted the runs-on-magic-cache branch October 17, 2026 17:15
hbrombeer added a commit that referenced this pull request Oct 19, 2026
Private repositories pay for artifact storage out of the org's Actions
budget. Once it is spent, every upload fails: game-survivalgames run
39265980480 pushed its image and then went red in "Generate SBOM", whose
anchore/sbom-action uploads the SPDX file as an artifact by default.

- docker-gradle-build-push: drop the anchore SBOM scan and the sbom-*
  upload. The push build now attaches an SPDX SBOM attestation to the
  image in GHCR (`sbom: true`), next to the provenance attestation it
  already had. Nothing downloaded the sbom-* artifacts.
- docker-gradle-build-push, platform-test-preview: set
  DOCKER_BUILD_RECORD_UPLOAD=false so build-push-action no longer uploads
  the .dockerbuild record. The build summary stays.
- Contract tests: assert no artifact uploads, and bring the runner
  assertions up to date with the RunsOn routing from #37, which left the
  contract job failing on main.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant