~bigbes/ci-cacher

ref: 519ce411ce7e77bc46ba4eb12c4619c838b3f059 ci-cacher/CHANGELOG.md -rw-r--r-- 3.5 KiB
519ce411 — Eugene Blikh Bump VERSION to 0.1.1 for tag a day ago

#Changelog

All notable changes to this project will be documented in this file. The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

#Unreleased

#0.1.1 — 2026-05-26

#Added

  • cacher docker download --pull — on cache miss, falls back to docker pull <image:tag> and seeds the S3 cache. Mirrors the --url fallback on file download; collapses the if/else cache-or-pull bash dance in CI manifests to a single command.

#Changed

  • Runtime errors (cache miss, key not found) no longer dump the cobra Usage block; the short error line is enough for scripted callers. Argument-validation errors still show usage.

#0.1.0 — 2026-05-26

First public release. Replaces the s3_cache_or_curl / s3_cache_docker_image shell helpers in tarantool-protobuf/.builds/lib/ci-lib.sh with a single static Go binary.

#Added

  • cacher init / cacher doctor — persist config to ~/.config/cacher/config.toml and smoke-test S3 credentials (HEAD bucket
    • 1-byte canary write/read/delete).
  • cacher download / upload / exists / list / delete for single files. Download falls back to --url on cache miss and back-fills the cache. Optional --sha256 verifies the fetched content.
  • cacher docker {exists,download,upload} — streamed docker save | zstd → S3 multipart upload (and inverse). Pure-Go zstd via klauspost/compress, no external zstd binary on the host.
  • cacher dir {download,upload} — tar+zstd of a directory tree keyed by content hash. Closes the gap left by the shell version, which only cached single files.
  • cacher key — resolve a key template (substituting {hash}) for shell scripting.
  • --hash-from <path> (repeatable; files or directories) on every command. For a single file path the digest exactly matches sha256sum file | cut -c1-N, so existing keys migrate without recomputation.
  • --arch-suffix opt-in to suffix every key with -<goos>-<goarch>.
  • list --recursive for flat listing; list --root to ignore the configured prefix and list at bucket root. Default output style mirrors aws s3 ls (delimited by /).
  • Garage-compatible defaults: path-style addressing, signature v4, request/response checksum calculation set to when_required (Garage doesn't implement boto3 1.36+ trailing CRC32 checksums).
  • End-to-end test suite (go test -tags=e2e) against a real Garage container via testcontainers-go using dxflrs/garage:v2.3.0's --single-node --default-bucket mode.
  • builds.sr.ht CI: unit.yml (every push), e2e.yml (every push, with Docker), publish.yml (tags only, ships cross-platform binaries via goreleaser to pages.sr.ht and as build artifacts).
  • Static landing page at bigbes.pages.srht.bigb.es/ci-cacher/.

#Fixed

  • doctor uses ListObjectsV2 (1-key) instead of HeadBucket — Garage rejects HeadBucket with 403 even for valid credentials.
  • Config path is ~/.config/cacher/config.toml on every platform (previously fell into ~/Library/Application Support/cacher on macOS via os.UserConfigDir). cacher is a CI tool; dev-macs and Linux runners must look in the same place.