Skip to content

Release & verification

Tales releases are cut from semver-style git tags. Pushing a tag matching v* triggers the release workflow, which runs the test suite and then uses GoReleaser to cross-compile the tales binary, upload archives to the GitHub Release, and write a checksums.txt file.

  1. Make sure master is green (build, test, and lint all pass in the dev CI workflow).

  2. Tag and push from master:

    Terminal window
    git tag v0.1.0
    git push origin v0.1.0

    Tag format: vMAJOR.MINOR.PATCH. Pre-release suffixes such as v0.1.0-rc.1 or v0.1.0-beta.2 are accepted and are flagged as GitHub pre-releases automatically (release.prerelease: auto in .goreleaser.yml).

  3. Watch the Release workflow in the GitHub Actions tab. On success the GitHub Release is created with the artifacts listed below.

OSArchitectures
Linuxamd64, arm64
macOSamd64, arm64

For a tag v0.1.0 the workflow publishes:

  • tales_0.1.0_linux_x86_64.tar.gz
  • tales_0.1.0_linux_arm64.tar.gz
  • tales_0.1.0_darwin_x86_64.tar.gz
  • tales_0.1.0_darwin_arm64.tar.gz
  • checksums.txt (SHA-256, one line per archive)

Each archive contains the tales binary, LICENSE.md, and README.md.

The leading v from the git tag is stripped from artifact names, so a tag v0.1.0 produces tales_0.1.0_*.tar.gz.

After download, validate the checksum and confirm the embedded build metadata:

Terminal window
# Verify checksum
shasum -a 256 -c checksums.txt --ignore-missing
# Extract and inspect
tar -xzf tales_0.1.0_linux_x86_64.tar.gz
./tales --version

tales --version should report the released tag and full commit SHA:

tales version: 0.1.0 (build: 2026-05-17T10:00:00Z)
commit: a1b2c3d4e5f6...
Go runtime version: go1.26.x
Platform: linux/amd64

If version is dev or commit is none, the binary was not built through the release pipeline.

To smoke-test a release without pushing a tag, use the wrapper targets in the Makefile:

Terminal window
make release-check # validates .goreleaser.yml
make release-snapshot # full snapshot: archives + checksums in dist/
make release-build # binaries only, no archives

These require goreleaser on $PATH (installation instructions).

The snapshot output lives under dist/ (gitignored). The version template is <next-patch>-next, so a working tree at v0.1.0 produces tales_0.1.1-next_*.tar.gz archives.

The following are intentionally out of scope for V1 and will be considered later:

  • Windows builds, not provided. The DSL and runtime are cross-platform, but no windows GOOS targets are configured.
  • Docker images, no container build is published.
  • scoop / nfpm packaging are not provided. Install via the Homebrew tap, the release archives, or go install github.com/tales-testing/tales/cmd/tales@latest.
  • macOS code signing and notarization, released binaries are not signed. On a fresh macOS install you may need to run xattr -d com.apple.quarantine tales after extraction.
  • iOS / XCUITest e2e, the embedded Apple driver source ships in every macOS binary, but the release workflow runs on Ubuntu and does not execute make e2e-ios / make e2e-ios-failure. iOS e2e must be validated manually on a macOS + Xcode host before tagging.
  • Artifact signatures (cosign / SBOM), not generated.