Build CI Cost Notes
This note summarizes a direct smoke-test comparison of the current Blacksmith GitHub Actions usage against Buddy, CircleCI, and Buildkite.
Current GitHub Actions Usage
The repository currently uses blacksmith-4vcpu-ubuntu-2404 across most Linux jobs in .github/workflows.
Measured from GitHub Actions job data for 2026-04-01..2026-04-30:
| Runner group | Jobs | Actual job minutes | Rounded job minutes |
|---|---|---|---|
| Blacksmith | 300 | 139.85 | 308 |
| GitHub macOS | 6 | 5.38 | 7 |
| GitHub ubuntu-latest | 31 | 11.68 | 31 |
Blacksmith minutes by workflow:
| Workflow | Jobs | Actual minutes | Rounded job minutes |
|---|---|---|---|
monitor-openapi-updates | 224 | 109.17 | 224 |
build-test | 18 | 21.02 | 30 |
stale-issues | 30 | 3.35 | 30 |
Auto Publish Pets on Merge | 10 | 2.40 | 10 |
validate | 12 | 1.93 | 8 |
build-source-registry | 1 | 0.90 | 1 |
publish-single-pet | 2 | 0.57 | 2 |
review-new-pet-scaffold | 1 | 0.30 | 1 |
suggest-new-pet-scaffold-template | 1 | 0.12 | 1 |
pr-standards | 1 | 0.10 | 1 |
Blacksmith's displayed Linux x64 base price is $0.004/min; the current 4-vCPU runner is approximately $0.008/min if priced proportionally.
Estimated April Blacksmith cost:
| Basis | Estimate |
|---|---|
Actual seconds: 139.85 * $0.008 | $1.12 |
Rounded per job: 308 * $0.008 | $2.46 |
This usage appears likely to remain inside Blacksmith's included free minutes for this repository's current volume.
Buddy
The Buddy CLI was installed and authenticated:
brew tap buddy/bdy
brew install bdy
bdy versionInstalled CLI version: 1.22.23.
Two disposable Buddy pipelines were created in raggle/openpets, executed, and then deleted.
Smoke Run
Pipeline: codex-buddy-cost-smoke
Command:
bdy pipeline run codex-buddy-cost-smoke \
--workspace raggle \
--project openpets \
--branch main \
--wait 10 \
--clear-cacheResult:
| Metric | Value |
|---|---|
| Status | successful |
| End-to-end time | 8.067s |
| Build action time | 6.065s |
| Resource setting | NANO |
| Revision | 51f3863 |
Execution URL:
https://app.buddy.works/raggle/openpets/pipelines/pipeline/559863/execution/69f3920dd9e9ce60919c87e2Resource Probe
Pipeline: codex-buddy-resource-probe
Result:
| Metric | Value |
|---|---|
| Status | successful |
| End-to-end time | 4.811s |
| Build action time | 3.104s |
| Resource setting | NANO |
The probe logged host-level CPU and memory values, not a useful cgroup billing limit, so cost estimates should use Buddy's published GB-minute pricing rather than container introspection.
Buddy pricing used for estimation:
| Plan/pricing item | Value |
|---|---|
| Free included usage | 300 pipeline GB-minutes |
| Pro | EUR 29/month |
| Pro included usage | 3000 pipeline GB-minutes |
| Overage | from $0.0015 / GB-minute |
Estimated Buddy overage value for the April Blacksmith workload if runtime is similar:
| Assumed allocation | April GB-minutes | Overage-rate value |
|---|---|---|
| 1 GB | 139.85 | $0.21 |
| 4 GB | 559.40 | $0.84 |
| 8 GB | 1118.80 | $1.68 |
| 16 GB | 2237.60 | $3.36 |
Buddy overage reaches the estimated Blacksmith $0.008/min at about 5.33 GB of allocation. Below that, Buddy overage is cheaper per minute; above that, Blacksmith is cheaper per raw minute. On Buddy Pro, even a 16 GB equivalent of April's observed workload fits within the included 3000 GB-minutes.
CircleCI
The CircleCI CLI was already installed via Homebrew:
circleci versionInstalled CLI version: 0.1.36202+50a6f56.
The CLI was authenticated with a personal API token. Do not commit or document the token itself.
CircleCI project details:
| Field | Value |
|---|---|
| Project slug | gh/raggle-ai/openpets |
| Project ID | ab87c092-24b1-4a02-bb75-49815bcbf0f6 |
| Organization | raggle-ai |
| Organization ID | f88ea760-6314-4ffb-b361-2f7f8eb76e2a |
| Pipeline definition ID | ba6696d7-0989-5c4c-9e99-8e2c45669819 |
The existing CircleCI project points at .circleci/config.yml. Since that file was not present on main, an API-triggered pipeline on main errored immediately:
No configuration was found in your project.To run a real test, a temporary branch was created and pushed:
| Field | Value |
|---|---|
| Branch | codex/circleci-cost-smoke |
| Commit | e6722b4 |
| Config | .circleci/config.yml |
The config used Docker small:
version: 2.1
jobs:
smoke:
docker:
- image: cimg/node:20.20
resource_class: small
steps:
- checkout
- run:
name: Probe runtime
command: |
node --version
npm --version
nproc
grep MemTotal /proc/meminfo
git rev-parse --short HEAD
workflows:
smoke:
jobs:
- smokeThe config validated locally:
circleci config validate .circleci/config.ymlCircleCI Runs
| Pipeline | Trigger | Status | Job runtime |
|---|---|---|---|
| #8 | branch push webhook | success | 9s |
| #9 | manual API trigger | success | 21s |
CircleCI pricing used for estimation:
| Resource | CPU | RAM | Credits/min |
|---|---|---|---|
| Docker small | 1 | 2 GB | 5 |
| Docker medium | 2 | 4 GB | 10 |
| Docker large | 4 | 8 GB | 20 |
| Linux VM large | 4 | 15 GB | 20 |
CircleCI plan pricing:
| Plan item | Value |
|---|---|
| Free included usage | 30,000 credits/month |
| Free small Docker equivalent | up to 6000 build minutes |
| Performance | starts at $15/month |
| Additional credits | $15 / 25,000 credits |
Estimated CircleCI cost for the April Blacksmith workload:
| CircleCI equivalent | Credits | Paid-credit value |
|---|---|---|
Docker small, 139.85 * 5 | 699.25 | $0.42 |
Docker large / Linux large, 139.85 * 20 | 2797.00 | $1.68 |
Both estimates fit inside CircleCI's 30,000 monthly free credits.
Buildkite
The Buildkite CLI was installed from Buildkite's Homebrew tap:
brew install buildkite/buildkite/bk@3
bk versionInstalled CLI version: 3.40.0.
The CLI was authenticated with a Buildkite API token. Do not commit or document the token itself.
Buildkite token/account details:
| Field | Value |
|---|---|
| Buildkite organization | anduimagui |
| User | anduimagui |
| User email | reandrew@fastmail.com |
| Token description | pets |
The token could only see the anduimagui Buildkite organization, not a raggle/raggle-ai Buildkite organization. An existing anduimagui/openpets pipeline was present, but it pointed at Buildkite's starter repository:
git@github.com:buildkite/starter-pipeline-example.gitThat starter pipeline had already run successfully:
| Pipeline | Build | Status | End-to-end time |
|---|---|---|---|
anduimagui/openpets | #1 | passed | 21.590s |
To run a repo-specific test, a disposable pipeline was created:
| Field | Value |
|---|---|
| Pipeline | anduimagui/openpets-cost-smoke |
| Repository | https://github.com/raggle-ai/openpets.git |
| Branch | codex/circleci-cost-smoke |
| Commit | 2055b69 |
| URL | https://buildkite.com/anduimagui/openpets-cost-smoke/builds/1 |
Temporary pipeline YAML:
steps:
- label: ":buildkite: OpenPets cost smoke"
command: |
echo "Buildkite cost smoke"
uname -a
nproc
grep MemTotal /proc/meminfo
git rev-parse --short HEADThe config validated locally:
bk pipeline validate --file .buildkite/codex-cost-smoke.ymlThe build was triggered with:
bk build create \
--pipeline openpets-cost-smoke \
--branch codex/circleci-cost-smoke \
--commit HEAD \
--message "Codex Buildkite cost smoke"Result:
| Metric | Value |
|---|---|
| Status | passed |
| End-to-end time | 8.957s |
| Job runtime | 3.607s |
| Queue | default |
| Agent version | buildkite-agent/3.123.1 |
| CPU visible to job | 2 |
| Memory visible to job | 4,073,716 kB |
The disposable openpets-cost-smoke pipeline was deleted after the run.
Buildkite pricing used for estimation:
| Plan/pricing item | Value |
|---|---|
| Personal included hosted-agent usage | 500 minutes/month |
| Personal Linux shape | Small only |
| Personal Linux vCPU concurrency | Up to 6 vCPU |
| Pro | $30 / active user / month |
| Pro included hosted-agent usage | 2000 minutes/month |
| Hosted-agent overage | $0.013 / minute |
Estimated Buildkite cost for the April Blacksmith workload:
| Basis | Estimate |
|---|---|
Actual seconds: 139.85 * $0.013 | $1.82 |
Rounded per job: 308 * $0.013 | $4.00 |
Both estimates fit inside Buildkite Personal's 500 included hosted-agent minutes. Buildkite is closer to CircleCI/Buddy operationally than Blacksmith: it requires Buildkite pipeline configuration and hosted/self-hosted queues; it is not a direct GitHub Actions runs-on replacement.
Comparison
| Provider | Direct test result | April equivalent estimate | Notes |
|---|---|---|---|
| Blacksmith | Existing GitHub Actions data | $1.12 actual / $2.46 rounded | Drop-in runs-on replacement already in use |
| Buddy | Real CLI-triggered smoke run succeeded in 8.067s | $0.21-$3.36 depending on GB allocation | Requires recreating CI as Buddy pipelines |
| CircleCI | Real branch push/API runs succeeded in 9s and 21s | $0.42-$1.68 depending on resource class | Requires porting workflows to .circleci/config.yml |
| Buildkite | Real CLI/API-triggered hosted-agent run succeeded in 8.957s | $1.82 actual / $4.00 rounded | Requires Buildkite pipeline config and hosted/self-hosted queues |
Recommendation
From a pure compute-cost perspective, all four options are effectively negligible for this repository's current usage, and Buddy/CircleCI/Buildkite all appear to fit within included free or bundled usage.
The main decision is migration cost:
- Keep Blacksmith if the goal is the least operational change. It is already a drop-in GitHub Actions runner label.
- Consider Buddy if the team wants Buddy's pipeline UX and is comfortable rebuilding workflows there. Cost should remain low unless large GB allocations are required.
- Consider CircleCI if the team is willing to port GitHub Actions workflows into CircleCI config. The current project exists and runs successfully once a config is present, but it is not a direct
runs-onreplacement. - Consider Buildkite if the team wants a mature hosted-control-plane CI with a hosted-agent option or eventual self-hosted agents. For current usage, the hosted-agent minutes fit inside the Personal allowance, but workflows still need to be ported to Buildkite pipeline YAML.
Sources
- Blacksmith pricing: https://www.blacksmith.sh/pricing
- Blacksmith runner overview: https://docs.blacksmith.sh/blacksmith-runners/overview
- Buddy CLI docs: https://buddy.works/docs/cli/getting-started
- Buddy pricing: https://buddy.works/pricing
- CircleCI pricing: https://circleci.com/pricing/
- CircleCI price list: https://circleci.com/pricing/price-list/
- Buildkite CLI docs: https://buildkite.com/docs/platform/cli
- Buildkite CLI installation: https://buildkite.com/docs/platform/cli/installation
- Buildkite pricing: https://buildkite.com/pricing