103 lines
2.7 KiB
Markdown
103 lines
2.7 KiB
Markdown
# Releasing
|
|
|
|
This repository uses semantic versioning and Gitea tag-based releases.
|
|
|
|
## Repository Description
|
|
|
|
Use this short description in Gitea:
|
|
|
|
> Rust TUI sleep timer for Linux desktop actions.
|
|
|
|
Optional longer description:
|
|
|
|
> A single-binary Linux sleep timer with YAML config, command preview, progress display, and post-countdown desktop actions for niri, Hyprland, KDE, media, brightness, audio, lock, power, process kill, and custom shell commands.
|
|
|
|
## Upstream
|
|
|
|
```bash
|
|
git remote add origin ssh://git@gitssh.forust.xyz:2221/forust/gosleep.git
|
|
git remote set-url --push origin ssh://git@gitssh.forust.xyz:2221/forust/gosleep.git
|
|
```
|
|
|
|
HTTPS remote URL:
|
|
|
|
```text
|
|
https://gitea.forust.xyz/forust/gosleep.git
|
|
```
|
|
|
|
## Gitea Actions Setup
|
|
|
|
1. Enable Actions for `forust/gosleep`.
|
|
2. Register or select a Linux runner with labels used by the workflows:
|
|
`self-hosted`, `linux`, `arch`, `homelab`.
|
|
3. Ensure the runner has:
|
|
- Rust stable toolchain
|
|
- `rustfmt`
|
|
- `clippy`
|
|
- `curl`
|
|
- `jq`
|
|
- `tar`
|
|
- `sha256sum`
|
|
- Docker, if using the YAML lint job as written
|
|
4. Confirm Actions job token permissions allow `contents: write`.
|
|
The release workflow uses Gitea Actions' built-in `GITEA_TOKEN`, exposed in the workflow as `${{ secrets.GITEA_TOKEN }}`; no extra repository secret is required.
|
|
|
|
## Version Bump Checklist
|
|
|
|
For a patch bump, for example `1.1.1` to `1.1.2`:
|
|
|
|
```bash
|
|
version=1.1.2
|
|
```
|
|
|
|
Update:
|
|
|
|
- `Cargo.toml`: `package.version`
|
|
- `Cargo.lock`: package version, regenerated by Cargo
|
|
- `VERSION`
|
|
- `CHANGELOG.md`
|
|
|
|
Then verify:
|
|
|
|
```bash
|
|
cargo fmt --check
|
|
cargo test --locked
|
|
cargo clippy --locked -- -D warnings
|
|
cargo build --release --locked
|
|
```
|
|
|
|
## Create Release
|
|
|
|
```bash
|
|
git status --short
|
|
git commit -am "chore: release v1.1.2"
|
|
git tag -a v1.1.2 -m "gosleep-timer v1.1.2"
|
|
git push origin main
|
|
git push origin v1.1.2
|
|
```
|
|
|
|
The `.gitea/workflows/release.yaml` workflow will:
|
|
|
|
1. Re-run release gates: `cargo fmt --check`, `cargo test --locked`, `cargo clippy --locked -- -D warnings`, and YAML lint.
|
|
2. Build `target/release/gosleep-timer`.
|
|
3. Copy binary as `gosleep-timer-<version>-linux-amd64`.
|
|
4. Generate a SHA-256 checksum.
|
|
5. Create a Gitea release.
|
|
6. Upload the binary and checksum as release assets.
|
|
|
|
The workflow is idempotent: if the release already exists, it reuses it and replaces assets with matching names.
|
|
If any lint or test step fails, the build and release job will not run.
|
|
|
|
## Manual Asset Build
|
|
|
|
If Actions are unavailable:
|
|
|
|
```bash
|
|
version="$(cat VERSION)"
|
|
cargo build --release --locked
|
|
mkdir -p dist
|
|
binary="gosleep-timer-${version}-linux-amd64"
|
|
cp target/release/gosleep-timer "dist/${binary}"
|
|
sha256sum "dist/${binary}" > "dist/${binary}.sha256"
|
|
```
|