Skip to content

About

Fast, memory-efficient self-hosted GitHub Actions cache server written in Rust. Drop-in replacement for the official cache, works with actions/cache unchanged. Supports S3, GCS, Azure Blob or filesystem storage with SQLite, Postgres or MySQL.

Topics

Resources

Stars

460 stars

Watchers

8 watching

Forks

Latest commit

ย 

History

317 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ GitHub Actions Cache Server

A self-hosted, drop-in replacement for GitHub's cache service, written in Rust. Point your self-hosted runners at it and every actions/cache step, setup-* cache and docker buildx type=gha cache stays on your own hardware. No workflow changes.

GitHub Actions Cache Server
Image size 29 MB
Startup to healthy 0.5 s
Idle memory 3 MiB
Upload (8 ร— 128 MiB, parallel) 2.3 GiB/s
First download 7.9 GiB/s
Lookups (64 concurrent) 34,000/s, p99 7 ms
Small save + restore (256 KiB) 1,143/s

SQLite + filesystem on a Ryzen 9 5950X with NVMe. Reproduce with cargo run --release --example benchmark.

Features

  • ๐Ÿ”ฅ Works with everything that uses the cache: actions/cache, actions/setup-node & friends, BuildKit type=gha, any tool built on @actions/cache
  • ๐Ÿ—„๏ธ Your storage: filesystem, S3 (RustFS, MinIO, R2, ...), Google Cloud Storage or Azure Blob Storage
  • ๐Ÿ˜ Your database: SQLite, PostgreSQL or MySQL
  • ๐Ÿ”’ Secure by default: verifies the runner's OIDC token, scopes every cache to its repository, signs each upload URL
  • โšก Direct downloads: optionally hand runners a signed storage URL so restores skip the server
  • ๐Ÿงน Runs itself: age- and size-based eviction, orphan cleanup, self-healing when storage drifts
  • ๐Ÿ“Š Observable: Prometheus /metrics, /health, management API with OpenAPI docs
  • โ˜ธ๏ธ Deploy anywhere: multi-arch image (amd64/arm64), Docker Compose or Helm, GitHub Enterprise Server

Quick start

1. Run the server

services:
  cache-server:
    image: ghcr.io/falcondev-oss/github-actions-cache-server
    ports:
      - '3000:3000'
    environment:
      API_BASE_URL: http://localhost:3000
    volumes:
      - cache-data:/app/.data

volumes:
  cache-data:

2. Point your runners at it

Swap the runner image for our fork and set one variable:

image: ghcr.io/falcondev-oss/actions-runner:latest
env:
  CUSTOM_ACTIONS_RESULTS_URL: http://cache-server:3000/

3. There is no step 3. Your workflows already use it.

Documentation

๐Ÿ‘‰ https://gha-cache-server.falcondev.io/getting-started ๐Ÿ‘ˆ

The docs live in website/.

About

Fast, memory-efficient self-hosted GitHub Actions cache server written in Rust. Drop-in replacement for the official cache, works with actions/cache unchanged. Supports S3, GCS, Azure Blob or filesystem storage with SQLite, Postgres or MySQL.

Topics

Resources

Stars

460 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages