CI for your GitHub repositories
on servers we run ourselves.
Every push and pull request runs your tests in a sandbox on Enzonic hardware that is already running when the job arrives, with live logs and a check on GitHub. Write a short .enzonic/ci.yml, or keep the GitHub Actions workflows you already have.
3,000 minutes a month free. No card.
- CI minutes a month
- jobs at a time
- per job
- of dependency cache
Everything a pipeline needs, nothing to babysit
Runners, services, caches and logs are part of the product. You write the steps.
Sandboxes that are already running
Each job gets its own sandbox on hardware Enzonic operates, booted ahead of time and thawed when the job arrives.
Matrix jobs and needs
Test on Node 20 and 22 at once, then deploy only when every cell passed. Jobs wait for the jobs they need.
Postgres and Valkey services
Start a real database next to your tests with one line, health-checked before the first step.
Caches
Keep node_modules, pip wheels or build output between runs with a key built from your lockfile.
Artifacts
Keep coverage reports, builds and screenshots, pass them to later jobs and download them for days.
Live logs
Watch every step as it runs, with colours, grouped by step, failing steps opened for you.
Checks on GitHub
Every job reports a check with annotations on the pull request, ready for branch protection.
Your workflows, unchanged
A large subset of GitHub Actions runs as it is: matrix, services, containers and the common setup actions.
Schedules
Nightly tests or weekly dependency checks with a cron line, in UTC.
Enzica fixes failed runs
One click on a failed job: Enzica finds the cause, pushes a fix branch and runs the pipeline on it.
The waiting is gone, so the run is your steps
Most CI time goes to starting a machine, cloning and downloading dependencies. Enzonic CI does that work before your job arrives.
- 01
Sandboxes are thawed, not booted
A pool of sandboxes is booted ahead of time. When a job arrives, one is thawed and handed to it, so there is no machine to start.
- 02
Checkouts from a local mirror
Each runner keeps a mirror of your repository and fetches only what changed, instead of cloning from GitHub for every job.
- 03
Caches linked from local disk
Dependency caches stay on the runner and are linked into the job, not downloaded and unpacked first.
Every job shows where its time went: queue, sandbox, checkout, dependencies, services, cache and steps.
One file in your repository
Commit .enzonic/ci.yml and push. The jobs run in the order their needs set, matrix cells in parallel, each with its own services, cache and artifacts.
- lint runs first; both test cells start when it passes
- each test cell gets its own Postgres on localhost and as postgres:5432
- npm downloads come from the cache keyed on package-lock.json
- coverage is kept even when the tests fail
- deploy runs on main only, with a secret the logs never show
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
lint:
image: node:22
steps:
- run: npm ci
- run: npm run lint
test:
needs: lint
image: node:${{ matrix.node }}
matrix:
node: [20, 22]
services:
postgres:
image: postgres:17-alpine
env: { POSTGRES_PASSWORD: postgres }
env:
DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres
cache:
key: npm-${{ hashFiles('package-lock.json') }}
paths: [~/.npm]
steps:
- run: npm ci
- run: npm test
artifacts:
- name: coverage-node${{ matrix.node }}
paths: [coverage/]
when: always
deploy:
needs: test
if: github.ref == 'refs/heads/main'
steps:
- run: npx enzonic deploy --prod
env:
ENZONIC_TOKEN: ${{ secrets.DEPLOY_TOKEN }}Already on GitHub Actions?
Connect the repository and your .github/workflows run here without edits, as long as they use what is listed below. Anything else is refused with a clear message, never skipped quietly.
Runs as it is
actions/checkoutThe commit of the run is always checked outactions/setup-node, setup-python, setup-go, setup-javaPick the job image; cache: adds the package manager cacheoven-sh/setup-bun, pnpm/action-setupBun image, pnpm installedactions/cache (and /restore, /save)A job cache, restored first and saved at the endactions/upload-artifact, download-artifactArtifacts kept with the run and passed between jobsstrategy.matrix, needs, if, services, containerIncluding include / exclude and fail-fast
Not supported
- Other uses: actions, Docker actions, composite actions and reusable workflows
- Step and job outputs (steps.*.outputs, needs.*.outputs)
- Windows and macOS runners
- pull_request_target
Pricing
CI comes with your Enzonic Cloud plan, the same plan that covers Deploy and Databases. Start on Free; upgrade when you need more minutes or bigger runners. Linux runners only.
| Every Cloud plan includes CI | Free $0 | Starter $5 / month $4.17 a month billed yearly | Recommended Pro $10 / month $8.33 a month billed yearly | Growth $19 / month $15.83 a month billed yearly | Business $29 / month $24.17 a month billed yearly |
|---|---|---|---|---|---|
| CI minutes a month | 3,000 | 5,000 | 6,000 | 15,000 | 60,000 |
| Jobs at once | 2 | 4 | 6 | 10 | 20 |
| Longest job | 360 min | 360 min | 360 min | 480 min | 720 min |
| Dependency cache | 2 GB | 5 GB | 10 GB | 20 GB | 50 GB |
| Artifacts kept | 90 days | 90 days | 90 days | 180 days | 400 days |
| Logs kept | 14 days | 30 days | 30 days | 60 days | 90 days |
Grants for builders
Building open source, studying, teaching or running a non-profit? Apply for free Pro or Business time and Cloud credit for Deploy and Databases.
- Pro or Business plan for up to a year, for Deploy and Databases together
- Cloud credit added to your balance
- For your personal account or your whole team
- Read by a person, usually answered within a few days
- Open source
- Students
- Non-profits
- Startups
- Educators
- Hackathons
Questions
What counts as a CI minute?
Where do the jobs run?
Why do jobs start so quickly?
Which operating systems can jobs use?
Can I keep my GitHub Actions workflows?
What happens with secrets and pull requests from forks?
How do results get to GitHub?
What if a run fails?
Do I need to host my app on Enzonic?
Which images can a job use?
Your next push can run here.
Ship the result too: Enzonic Deploy hosts web apps for free.