Installation¶
Most people never install touchmark by hand: they create a hub from
the template, and the
hub's CI runs it. Install it on your machine to try a pack on a checkout, to run
setup once, or to plan from a laptop.
| Where | How |
|---|---|
| GitHub Actions | uses: bedrock-python/touchmark@<commit> # vX.Y.Z, see Run it in CI |
| GitLab CI | the image ghcr.io/bedrock-python/touchmark:X.Y.Z@sha256:<digest>, see Run it in CI |
| Gitea and Forgejo Actions | the image as the job's container:, pinned by digest |
| Your machine | an archive from Releases, or go install |
Every release has archives for Linux, macOS and Windows on amd64 and arm64, and the image
for linux/amd64 and linux/arm64. All of them carry the same binary, and the version is
the same everywhere: the tag vX.Y.Z, the image tags X.Y.Z, X.Y and latest, and
touchmark version.
Pin a version, and let Dependabot (the Action) or Renovate (the image) propose the next one in a pull request you review.
From an archive¶
v=X.Y.Z
base=https://github.com/bedrock-python/touchmark/releases/download/v$v
curl -fsSLO "$base/touchmark_${v}_linux_amd64.tar.gz"
curl -fsSLO "$base/checksums.txt"
sha256sum --check --ignore-missing checksums.txt
gh attestation verify "touchmark_${v}_linux_amd64.tar.gz" --repo bedrock-python/touchmark
tar -xzf "touchmark_${v}_linux_amd64.tar.gz" touchmark
./touchmark version
gh attestation verify checks the archive's build provenance: that GitHub Actions built
it in bedrock-python/touchmark. Releases has
the stricter checks, down to the workflow that signed.
On Windows, take touchmark_X.Y.Z_windows_amd64.zip and put touchmark.exe on your
PATH. On macOS, darwin_arm64 or darwin_amd64.
With Go¶
Go 1.26 or newer. A binary built this way reports the module version in
touchmark version.
The image¶
ghcr.io/bedrock-python/touchmark holds touchmark and git (2.45 or newer, no git-lfs)
on Alpine, and runs as the non-root user touchmark (uid 65532). Its entrypoint is
touchmark. It has a shell because the CIs that run it need one (GitLab's Docker
executor runs the job script with sh), but touchmark never starts a shell: it runs git
with an argument list. Its system git config trusts every directory (safe.directory),
so a hub checkout that belongs to another user, as in most CI jobs, can be read.
On your machine, in a checkout of a target, with the hub next to it; --user lets
apply write files you own:
docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/work" -v "$HOME/src/engineering-assets:/hub:ro" -w /work \
ghcr.io/bedrock-python/touchmark:X.Y.Z status --hub /hub --repo acme/billing
Requirements¶
- git 2.31 or newer for
check,status,applyandmanifest; git 2.45 or newer forplananddistribute, which read every target into a repository of their own with lazy fetches off,check-attr --sourceand--attr-source. An offlineplan(a hub pull request without read credentials) reads no target and runs on 2.31. The image brings its own git. - A full clone of the hub. touchmark reads the hub's whole history and refuses a shallow or partial clone.
- Network access to the platforms in
hub.yml, forplan,distribute,doctor,setupandmigrate.check,status,applyandmanifestwork offline.
Next: create a hub on GitHub, on GitLab or on Gitea or Forgejo.