Releases & CI¶
CI (ci.yml)¶
Triggers on every push to main and every pull request. Runs
go vet, go build ./..., and go test -race ./... on
ubuntu-latest, macos-latest, and windows-latest.
Release (release.yml)¶
Triggered by pushing a vX.Y.Z git tag. The workflow:
- Cross-compiles
cmd/gospeedtestfor six targets:linux/{amd64,arm64},darwin/{amd64,arm64},windows/{amd64,arm64}. Each binary is built with-trimpath,-ldflags "-s -w -X main.versionTag=<tag>", andCGO_ENABLED=0. - Packages each binary alongside
README.mdandLICENSEinto atar.gz(Unix) or.zip(Windows). - Computes SHA-256 checksums for all archives.
- Publishes a GitHub Release with the archives, the
checksums.txt, and auto-generated release notes.
To cut a release:
…then watch the workflow at the Actions tab.
Docs (docs.yml)¶
Triggered on every push to main. Builds the MkDocs site (this site)
and publishes it to GitHub Pages.
If the workflow fails on the very first run, it's almost always because GitHub Pages isn't yet enabled for the repo. Go to Settings → Pages, set the source to GitHub Actions, and re-run the workflow.
Docker (docker.yml)¶
Triggered on pushes to main, on every vX.Y.Z tag, and on pull
requests (build-only — no push for PRs). Builds a multi-arch image
(linux/amd64 + linux/arm64) using docker buildx + QEMU and
publishes to GitHub Container Registry at
ghcr.io/pcamminadi/gospeedtest.
Tags follow the same scheme described in
Getting started: :latest, :X.Y.Z,
:X.Y, :edge, :sha-<short>.
The build is cached via type=gha so subsequent runs are fast — the
arm64 stage only re-emulates layers that actually changed.
Image visibility on first push
GitHub Container Registry creates packages as private by
default. After the first successful push, go to
Repo → Packages → gospeedtest → Package settings → Change
visibility → Public if you want anyone to be able to
docker pull it without auth.