115 lines
2.1 KiB
Markdown
115 lines
2.1 KiB
Markdown
# Release Packaging
|
|
|
|
This document describes the manual release flow for sshkeeper.
|
|
|
|
## Create a Tag
|
|
|
|
Use a semantic version tag:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
./release.sh v0.2.0
|
|
```
|
|
|
|
or:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
SOURCE_DATE_EPOCH=1760000000 ./release.sh v0.2.0
|
|
```
|
|
|
|
## Run Release Checks
|
|
|
|
Before packaging, run:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
./release.sh v0.2.0
|
|
```
|
|
|
|
Expected files in `dist/`:
|
|
|
|
```text
|
|
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:
|
|
|
|
```bash
|
|
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 is the primary target.
|
|
- 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
|