A local cache and package mirrors

Codemany keeps tool downloads, packages and Docker images on your own machine, not in GitHub Actions storage. Each job reuses what earlier jobs fetched, so installs start warm.

What stays on the machine

A fresh runner per job could mean a cold start every time. Codemany avoids that. It keeps shared caches next to the runners:

  • Tool cache for actions/setup-* downloads, on Mac and Linux.
  • Go and npm mirrors on Linux.
  • A Docker Hub mirror on Linux machines with Docker.
  • A git mirror that speeds up checkout of public repos.

Your workflow's actions/cache steps still work as before. Those still go to GitHub, with GitHub's limits. For how they work, read the GitHub Actions cache.

Package mirrors for Go and npm

A Linux machine runs a small local mirror. It is read-only, so jobs can't publish to it.

  • Go. Every job gets a GOPROXY that points at the mirror. If the mirror is down, Go falls back to proxy.golang.org, then direct.
  • npm. Jobs from public repos get the npm mirror too. Private repos keep their own registry setup.

The mirror fetches public packages only, without any login. Private packages are never cached. Your go.sum and lockfile checks still run. If your workflow sets these variables itself, yours win.

Docker Hub pull mirror

With Docker on a Linux machine, setup adds a local Docker Hub pull-through cache. Docker pulls go through it. So do each job's buildx builders and the job VMs.

It holds public Docker Hub images only. It refuses pushes, and private images are never cached. If it is down, Docker pulls from Docker Hub directly. This is not a layer cache for your own builds. For that, see Docker layer caching.

A git mirror for checkout

For public repos, Codemany keeps a mirror of the default branch and tags. Before a job, it seeds the work folder from it. Then actions/checkout only fetches what is new.

The mirror never fails a job. If it is missing or broken, checkout fetches as usual.

Tool cache for setup-* actions

Downloads from actions/setup-go, setup-node, setup-python and other setup-* steps stay in ~/.codemany/toolcache. The next job finds them there. Pre-warm fills it with the versions your workflows ask for:

codemany integrations prewarm

Details are in Tools and caching.

Cleaned up for you

Caches can fill a disk. Codemany caps each one and cleans up by itself:

  • The tool cache is pruned past 20 GB.
  • The Docker Hub mirror is emptied when it passes 20 GB, or when free disk drops under 20 GB.
  • Old Docker build cache and unused images are pruned.
  • Each job's runner folder is wiped after the job.

Still short on space? See self-hosted runner disk full.

Want numbers? Codemany's nightly benchmarks show jobs on private code run 1.5× to 4.3× faster than on GitHub's 2-core runners.

Questions

Does this replace actions/cache?

No. actions/cache still works. The local mirrors make cold steps faster too.

Does the cache fill my disk?

No. Codemany caps and cleans its caches and job files itself.

Is anything uploaded?

No. The mirrors and the tool cache live on your machine. Your own actions/cache steps still save to GitHub, as before.

Read next: the GitHub Actions cache, Docker layer caching, self-hosted runner disk full, the benchmarks and Tools and caching.

Codemany is $20 a month for 2 machines. Try it free for 14 days, with no card.

Start a 14-day trial