Software Factory

Your workspace's CI box

What the machine that runs your repos' CI comes with, how to request it in a workflow and when to use the large one (8g).

Updated 2026-10-07

Ask your coding agent

Read https://www.ghosty.studio/en/docs/factory/ci-box.md and move this repo's jobs to the workspace CI box where it makes sense.

Paste it in Claude Code, Cursor or Codex with the ghosty-agent skill installed.

Your workspace has its own machines for its repos' CI. Every job runs on a fresh box that is deleted when it finishes: nothing carries over from the previous job and your secrets don't stay on it.

How to request it

In the workflow, replace ubuntu-latest with your workspace label:

yaml
jobs:  test:    runs-on: [self-hosted, ws-<your-workspace>]

"Prepare repo" already writes the CI with that label. Jobs left on ubuntu-latest keep running on GitHub, using your GitHub minutes.

What it comes with

It's built so a workflow written for ubuntu-latest runs unchanged:

  • Ubuntu 24.04 with passwordless sudo: sudo apt-get install … works.
  • Docker with Buildx and Compose: services: (Postgres, Redis, MySQL…), container:, docker build and docker compose up.
  • Node 22 with pnpm and yarn (corepack), Python 3, a C/C++ compiler and mise for other versions. actions/setup-node, setup-python and friends work as on GitHub.
  • Playwright with its system dependencies and Chromium.
  • Postgres, Redis, MySQL and SQLite installed and stopped: sudo systemctl start postgresql if you'd rather not use services:.
  • 4 vCPUs, 4 GB of RAM and 24 GB of disk.

Cache and downloads

With no setup:

  • actions/cache, the cache: option of setup-node and setup-python, and Buildx cache-to: type=gha store into a cache next to the box, not on GitHub. Each repo and branch only sees its own entries, with the same rules as GitHub's cache.
  • Docker Hub images (postgres:16, node:22…) are pulled from a local mirror.

The large box: 8g

When a job combines Docker, a database and browsers, 4 GB may not be enough. Add 8g:

yaml
    runs-on: [self-hosted, ws-<your-workspace>, 8g]

It has 8 vCPUs and 8 GB, and takes two CI slots of your plan (if your plan has one, it takes all of it while it runs).

How many jobs at once

As many as your plan's CI slots (F1: 1, F2: 2, F3: 3). The rest wait in GitHub's queue and start on their own when a slot frees up.