Files
lazysecrets/docs/development.md
T
keb e750073afd
CI / Checks (pull_request) Successful in 36s
PR title / Conventional title (pull_request) Successful in 1s
chore: release.sh takes patch, minor or major
scripts/release.sh minor bumps the latest release (pre-releases left
out) and says which it bumped; a tag is still taken as it is. Tags are
fetched before the version is worked out.
2026-10-15 16:12:20 +02:00

3.0 KiB

Development

go run ./cmd/lazysecrets
go run ./cmd/lazysecrets --demo                     # built-in sample data, no Azure needed
go test ./...
go test ./internal/ui/app -run TestGolden -update   # after intentional UI changes

In --demo, sharing env files works end to end: S → f on a demo repo, pick kv-shared-prod / env-share (the second account's) as the key, then paste the link back. The demo repos aren't on disk, so opening asks where to save, as for a repo you haven't cloned.

A stripped binary is a third smaller:

go build -trimpath -ldflags "-s -w" -o lazysecrets ./cmd/lazysecrets

Development builds show dev-<commit> as their version (-dirty with uncommitted changes); go install …@v0.2.0 shows the tag, releases the version they were built for.

How changes land

Pull requests into main are squash-merged, so each is one commit titled like the PR. The title is a conventional commit subject, checked by pr-title.yml:

Type For In the changelog
feat a new feature Added
perf faster or smaller, same behaviour Changed
fix a bug fix Fixed
refactor, docs, test, ci, chore, build, style, revert everything users don't need to hear about no

feat!: marks a breaking change, feat(scope): names a part. [skip changelog] in the description leaves a pull request out.

CI (ci.yml) runs gofmt, vet, staticcheck, the tests and a build for each platform on pull requests into main. main is protected: a pull request merges only when it's up to date with main (Gitea's "Update branch" button, or a rebase, then CI again), so what lands on main is exactly what its pull request tested, and CI doesn't run again there.

Releasing

Merge as many pull requests as you like, then release main:

scripts/release.sh --dry-run minor    # the tag and notes the release would have
scripts/release.sh minor              # CHANGELOG.md, commit, tag, push

patch, minor and major bump the latest release (v0.2.1 → v0.2.2, v0.3.0, v1.0.0; pre-releases don't count); a tag (v0.3.0, v0.3.0-rc.1) is taken as it is.

It refuses unless you're on a clean main that matches origin/main. git-cliff (cliff.toml) writes CHANGELOG.md from the pull request titles. The tag runs the release workflow (.gitea/workflows/release.yml): it tests, then GoReleaser (.goreleaser.yaml) builds the archives and publishes a Gitea release with them and the release's changelog section. Then scripts/github-release.mjs copies that release, notes and files, to the GitHub mirror, with the GH_RELEASE_TOKEN secret (a fine-grained token that can write the mirror's contents); without the secret it skips that. goreleaser release --snapshot --clean builds the same archives locally, into dist/, without publishing.

A suffix (v0.2.0-rc.1) makes a pre-release, which leaves CHANGELOG.md alone.