Skip to content

Files and variables ​

File map ​

bootstrap.sh installs only the runtime files into the install directory. test/, docs/, codeops/, and the other development material exist only in a development checkout.

PathRole
bootstrap.shFresh-host installer (also the update entry point)
orgs.confOrganization registry (source of truth); optional deploy_ssh= per organization
fleet.shAdmin CLI
docker-compose.ymlStatic base: the private registry
docker-compose.generated.ymlGenerated runner services (gitignored)
.runner-versionPinned Actions runner version (gitignored)
.build-server-versionInstalled revision recorded by bootstrap.sh
.build-server-manifestFiles installed by bootstrap.sh, used to clean up renames
.fleet-build/Temporary build staging (gitignored)
DockerfileRunner image
entrypoint.shInner daemon startup and runner supervision; stages the deploy SSH folder
start.shRunner registration and lifecycle
deploy-ssh-check.shDeploy SSH connectivity check; installed as /usr/local/bin/deploy-ssh-check in the image and into the install directory
.envHost secrets: ACCESS_TOKEN, REGISTRY_HTTP_SECRET
.npmrc, .yarnrc, .bunfig.toml, config.jsonHost credentials baked into the image
ssh/Staged by fleet.sh build from ~/.ssh
deploy-ssh/Host folder with deploy SSH material (config, known_hosts, keys/) mounted read-only into declaring runners; the CLI seeds a starter config and an empty known_hosts (gitignored) — see Deploy over SSH
exchange/Host folder per organization (exchange/<org>) mounted read-write at /srv/exchange for jobs and nested containers; created with mode 0777 by commands that start runners (gitignored) — see Organizations
examples/Offline playground with stub docker/curl (development only)
test/Specification and implementation tests, smoke-workflow.yml, verify.sh (development only)
docs/This VitePress site (development only)

Environment variables ​

VariableUsed byMeaning
ACCESS_TOKENbootstrap, start.sh, update-runnersGitHub token with runner admin for the configured organizations — see GitHub token
REGISTRY_USER / REGISTRY_PASSbootstrap, htpasswdRegistry credentials
REGISTRY_HTTP_SECRETregistry serviceRegistry signing secret
REGISTRY_PORTregistry serviceHost port for the registry (default 5000); runners use registry:5000 inside the fleet
REGISTRY_ADDRgenerated runner servicesRegistry address inside the fleet (default registry:5000) — see Publishing images
REGISTRY_USER, REGISTRY_PASSgenerated runner servicesRegistry credentials injected for job pushes (from .env)
COMPOSE_PROJECT_NAMEfleet.sh, docker composeContainer name prefix for this installation (default: install user)
INSECURE_REGISTRIESinner Docker daemonPlain-HTTP registries (default registry:5000; empty disables)
DOCKERD_STORAGE_DRIVERinner Docker daemonOptional storage-driver override (e.g. vfs); empty means detect and fall back automatically
RUNNER_EMAIL_DOMAINstart.shDomain for the runner's git identity email (default users.noreply.github.com)
INSTALL_DIR, REPO_URL, BRANCHbootstrapInstall location and fetch source
GIT_AUTH, SSH_KEY, REPO_SSH_URLbootstrapFetch auth mode (token/ssh), key path, and explicit SSH URL — see Getting started
ORGSbootstrapSpace- or comma-separated organizations; validated before orgs.conf is written
ORGANIZATION, GITHUB_URL, GITHUB_API_URLstart.shPer-runner registration scope (set by the generator)

Generated service environment ​

Each generated runner service receives:

  • ORGANIZATION — the organization name
  • ACCESS_TOKEN — from .env
  • GITHUB_URL — the web URL used by config.sh
  • GITHUB_API_URL — the API base used for the registration token

Exit codes ​

fleet.sh and bootstrap.sh exit non-zero on validation failures, API failures, and failed builds. fleet.sh status and generate exit zero on success.

Released under the MIT License.