Ephemeral Forgejo Actions runner autoscaler for cloud VMs. Only pay for the hours you actually use.
6.2K
On-demand, ephemeral Forgejo Actionsโ runners on cloud VMs โ warm only for the billing hour you've already paid for.
Like a bellows stoking a forge: fj-bellows breathes compute into your CI when there's work, and lets it die down when there isn't. It watches your Forgejo job
queue, spins up a cloud VM on demand, runs ephemeral one-job runners on it, keeps the VM warm for the rest of the hour you've already been billed for, and
tears it down at the :55 mark if it's idle โ so you never pay for an idle hour, and jobs after the first start instantly.
register {ephemeral:true} โ one-job) โ credentials are invalidated by Forgejo after each job.docker run -d --name fj-bellows \
-v /etc/fj-bellows/config.yaml:/etc/fj-bellows/config.yaml:ro \
-v /etc/fj-bellows/id_ed25519:/etc/fj-bellows/id_ed25519:ro \
henrystern/fj-bellows:latest
# config.yaml (holds secrets inline โ keep it chmod 600)
forgejo:
url: https://git.example.com
token: <forgejo-admin-token> # admin token; mints runner registrations
scope: orgs/example # or repos/owner/name
labels: [ubuntu-latest]
scale:
max: 1
provider: linode
provider_config: # opaque to the core; decoded by the linode provider
region: us-ord
type: g6-nanode-1
image: linode/debian12
token: <linode-api-token>
ssh:
private_key_file: /etc/fj-bellows/id_ed25519 # public half injected into each worker
one-job).Status: early โ interfaces may change. Issues and provider contributions welcome.
Content type
Image
Digest
sha256:8dd9ae2e9โฆ
Size
8.3 MB
Last updated
4 months ago
docker pull henrystern/fj-bellows