Repository navigation
Conversation
Blacksmith costs too much for this repository's CI. From 22 to 28 October 2026, these jobs used 8,841 Blacksmith minutes at 16 vCPUs. That cost $283 for the week. CipherStash keeps CI spending for all its repositories under $1,000 a month. RunsOn starts a machine in our own AWS account for each job. Heavy jobs across CipherStash move to it, with the same machines and labels: - family=c8a+m8a: an AMD c8a machine, or an m8a machine when AWS has no spare c8a spot capacity. - cpu=8: 8 vCPUs. - image: the Ubuntu version the Blacksmith label named (22.04 or 24.04). - volume=80gb: room for a release build of the workspace. - extras=s3-cache: the Actions cache is kept in an S3 bucket in the same AWS account. The runner reaches it faster than GitHub's cache. This commit changes the runner labels only. Job names, steps, and timeouts are unchanged. One exception: the name of the release build for linux/amd64 shows its runner label, so that name changes. The arm64 manifest job keeps its Blacksmith arm runner until we decide where arm64 jobs run.
Contributor
Author
First CI run on RunsOnEvery moved job ran on a RunsOn machine and passed. Each one waited 19 to 22 seconds for its machine. The cache was empty, because this was the first run on RunsOn.
|
"Publish multi-platform image" was the last job on a Blacksmith machine, an arm64 one with 16 vCPUs. It only joins the two per-platform image digests into one manifest list with `docker buildx imagetools create`. That command does not depend on the machine's architecture. The job now uses the same RunsOn x64 label as the other jobs in this repository. No job here runs on Blacksmith any more.
Contributor
Author
Second commit: Docker Hub refused image pulls"Publish multi-platform image" ran on a RunsOn x64 machine and passed. So did the required check "Build (Rust MSRV)". The four "Test (PostgreSQL …)" jobs failed. None of the failures came from the tests themselves. Docker Hub refused anonymous image pulls from the RunsOn machines:
Docker Hub limits anonymous pulls for each IP address. The run on the first commit did not hit the limit. Nor did the Blacksmith run on This needs a decision before this PR merges. The options I see:
|
On RunsOn machines, Docker Hub refused anonymous image pulls with "429 Too Many Requests" and "toomanyrequests". Docker Hub limits anonymous pulls for each IP address. The test jobs failed while pulling postgres:17 and ubuntu:25.10. Every job that pulls from Docker Hub now logs in first. It uses the same credentials and action that release.yml already uses: the DOCKER_HUB_USERNAME and DOCKER_HUB_PASSWORD values from .github/secrets.env.encrypted, and docker/login-action. The login step comes straight after "Decrypt secrets" in these jobs: - Test (PostgreSQL 14 to 17) - Encrypted burn-in (PostgreSQL 17) - Supported pooler compatibility (PostgreSQL 17) - Performance regression check In release.yml, the build job already logged in, but only after `mise run build`. That task builds the Docker image, so it pulled ubuntu:25.10 before the login. The login step moves up to just after "Decrypt secrets". Build (Rust MSRV) and Lint (Rust stable) pull no images, so they do not log in.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR moves every job that runs on Blacksmith to RunsOn.
RunsOn starts a machine in our own AWS account for each job.
After this PR, no job in this repository runs on Blacksmith.
Blacksmith costs too much for this repository's CI.
From 22 to 28 October 2026, these jobs used 8,841 Blacksmith minutes at 16 vCPUs.
That cost $283 for the week.
CipherStash keeps CI spending for all its repositories under $1,000 a month.
The cost model puts this repository at $335 to $567 a month on RunsOn, at October's pace plus 20%.
Changes
Each job below now uses this label in place of its Blacksmith label:
test.ymlblacksmith-16vcpu-ubuntu-2204ubuntu22-full-x64test.ymlblacksmith-16vcpu-ubuntu-2204ubuntu22-full-x64test.ymlblacksmith-16vcpu-ubuntu-2204ubuntu22-full-x64test.ymlblacksmith-16vcpu-ubuntu-2204ubuntu22-full-x64test.ymlblacksmith-16vcpu-ubuntu-2204ubuntu22-full-x64benchmark.ymlblacksmith-16vcpu-ubuntu-2204ubuntu22-full-x64release.ymlblacksmith-16vcpu-ubuntu-2404ubuntu24-full-x64release.ymlblacksmith-16vcpu-ubuntu-2404-armubuntu24-full-x64The labels mean:
family=c8a+m8a: an AMD c8a machine. RunsOn can use an m8a machine when AWS has no spare c8a spot capacity.cpu=8: 8 vCPUs. The Blacksmith machines had 16.image: the same Ubuntu version that the Blacksmith label named.volume=80gb: a larger disk. The default disk can fill during a Rust build.extras=s3-cache: the Actions cache is kept in an S3 bucket in our AWS account. The runner reaches it faster than GitHub's cache."Publish multi-platform image" moves from arm64 to x64.
It only joins the two per-platform image digests into one manifest list.
That does not depend on the machine's architecture.
The arm64 image itself is still built on
linux-arm64-public, a GitHub-hosted runner.Docker Hub login
Docker Hub limits image pulls without a login for each IP address.
On RunsOn machines it refused some of those pulls.
So every job that pulls from Docker Hub now logs in first.
The login uses the same credentials and action as
release.yml:DOCKER_HUB_USERNAMEandDOCKER_HUB_PASSWORDfrom.github/secrets.env.encrypted, anddocker/login-action.release.yml, the build job's existing login step moves up to just after "Decrypt secrets". Before, it ran aftermise run build, and that task pullsubuntu:25.10to build the image.Apart from the runner labels and these login steps, nothing changes.
Job names and timeouts stay the same.
The required check "Build (Rust MSRV)" keeps its name.
Verification
mainand on this branch.main: 11 findings. Seven of them are "unknown label" findings for the Blacksmith labels this PR replaces.release.yml, and a missingdescriptionin the local Slack action, reported at two call sites.Related
docs/ci-cost-decisionsbranch of cipherstash/stack.Review notes
fail-on-alert: true. The first run raised none. Results can also vary between c8a and m8a machines.release.ymlruns on this PR, because the PR changes that file. As on any such PR, it pushes both images by digest to Docker Hub, and the publish step runs with--dry-run.