sshkeeper/docs/release.md

2.1 KiB

Release Packaging

This document describes the manual release flow for sshkeeper.

Create a Tag

Use a semantic version tag:

git status --short
git tag -a v0.2.0 -m "sshkeeper v0.2.0"
git push origin v0.2.0

The release script uses git describe --tags --always --dirty by default. You can also pass the version explicitly:

./release.sh v0.2.0

or:

VERSION=v0.2.0 ./release.sh

For reproducible archives, the script uses SOURCE_DATE_EPOCH. By default it uses the timestamp of the latest git commit. To force a specific timestamp:

SOURCE_DATE_EPOCH=1760000000 ./release.sh v0.2.0

Run Release Checks

Before packaging, run:

make release-check

This runs:

  • go test ./...
  • go vet ./...
  • native go build
  • linux/amd64 cross-build with CGO_ENABLED=0
  • linux/arm64 cross-build with CGO_ENABLED=0
  • darwin/amd64 cross-build with CGO_ENABLED=0
  • darwin/arm64 cross-build with CGO_ENABLED=0
  • windows/amd64 cross-build with CGO_ENABLED=0

Build Artifacts

Run:

./release.sh v0.2.0

Expected files in dist/:

sshkeeper_v0.2.0_linux_amd64.tar.gz
sshkeeper_v0.2.0_linux_arm64.tar.gz
sshkeeper_v0.2.0_darwin_amd64.tar.gz
sshkeeper_v0.2.0_darwin_arm64.tar.gz
sshkeeper_v0.2.0_windows_amd64.zip
checksums.txt

Each archive contains:

  • sshkeeper or sshkeeper.exe
  • README.md
  • LICENSE
  • docs/guide.md

Verify Checksums

From the dist/ directory:

sha256sum -c checksums.txt

Expected result: every archive reports OK.

Publish in GitHub Release

Upload these files to the release:

  • all five platform archives
  • checksums.txt

Release notes should mention platform status:

  • Linux and macOS are primary release targets.
  • macOS builds are available as tar.gz for amd64 and arm64 and require the system ssh client.
  • Windows build is experimental and requires OpenSSH Client available as ssh.exe in PATH.

Packaging TODO

Prepare these package channels after the first archive-based release:

  • deb package
  • Arch PKGBUILD / AUR
  • rpm later
  • Homebrew tap
  • Scoop manifest
  • Winget later