# Unit tests + smoke build first, then end-to-end tests against a real # Garage container via testcontainers-go. Merged into one job so the Go # install is shared and a unit-test failure short-circuits before paying # the ~150 MB Garage image pull. # # Order: install_cacher → cacher_init → install_go → test → build → # docker_start → cache_garage_image → test_e2e. # # Dogfoods cacher to cache both the Go tarball (via --url fallback) and # the Garage docker image tarball (via explicit upload on miss). First # run seeds the cache from upstream; subsequent runs pull from # s3.bigb.es and skip the upstream round-trip. image: ubuntu/noble packages: - curl - ca-certificates - docker.io secrets: - 7dde4219-0783-4581-a67d-c94749de3600 # ~/.s3-cache-key-id - 0e5b3530-6f19-4f30-9b73-9339dd382e46 # ~/.s3-cache-key-secret sources: - https://git.srht.bigb.es/~bigbes/ci-cacher environment: GO_VERSION: "1.26.3" PATH: /home/build/.local/go/bin:/home/build/.local/bin:/usr/local/bin:/usr/bin:/bin PAGES_DOMAIN: bigbes.pages.srht.bigb.es PAGES_SUBPATH: /ci-cacher # Keep in sync with internal/testutil/garage/container.go const Image. GARAGE_IMAGE: "dxflrs/garage:v2.3.0" # No Ryuk reaper — the VM is torn down at job end, so the reaper # container only adds startup logs we don't need. TESTCONTAINERS_RYUK_DISABLED: "true" submitter: git.sr.ht: enabled: true allow-refs: - refs/heads/master - "refs/tags/*" tasks: - install_cacher: | mkdir -p ~/.local/bin curl -sSL "https://${PAGES_DOMAIN}${PAGES_SUBPATH}/cacher-linux-amd64" \ -o ~/.local/bin/cacher chmod +x ~/.local/bin/cacher cacher version - cacher_init: | cacher init \ --endpoint https://s3.bigb.es \ --region garage \ --bucket docker-cache \ --prefix ci-cacher/deps \ --key-file ~/.s3-cache-key-id \ --secret-file ~/.s3-cache-key-secret - install_go: | GO_TARBALL="go${GO_VERSION}.linux-amd64.tar.gz" mkdir -p ~/.local cacher download "golang/${GO_TARBALL}" "/tmp/${GO_TARBALL}" \ --url "https://go.dev/dl/${GO_TARBALL}" tar -xz -C ~/.local -f "/tmp/${GO_TARBALL}" rm "/tmp/${GO_TARBALL}" go version - test: | cd ci-cacher go test ./... - build: | cd ci-cacher go build -ldflags "-X go.bigb.es/cacher/internal/version.version=$(cat VERSION)" -o cacher . ./cacher version - docker_start: | sudo systemctl start docker sudo usermod -aG docker build sudo chmod 666 /var/run/docker.sock docker version - cache_garage_image: | # Key derived from the image ref so a version bump invalidates # the cache automatically: dxflrs/garage:v2.3.0 → dxflrs-garage-v2.3.0 KEY="garage/$(echo "$GARAGE_IMAGE" | tr '/:' '-').tar" if cacher download "$KEY" /tmp/garage.tar; then docker load -i /tmp/garage.tar else docker pull "$GARAGE_IMAGE" docker save "$GARAGE_IMAGE" -o /tmp/garage.tar cacher upload "$KEY" /tmp/garage.tar fi rm -f /tmp/garage.tar docker images "$GARAGE_IMAGE" - test_e2e: | cd ci-cacher go test -tags=e2e -timeout=10m ./...