notcrawl/docs/distribution.md
Vincent Koc e061bf481e
Some checks failed
CI / release-check (push) Has been cancelled
CodeQL / analyze (push) Has been cancelled
CI / deps (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
docs: document ci coverage
2026-05-05 19:29:38 -07:00

86 lines
2.0 KiB
Markdown

# Distribution
`notcrawl` ships through GitHub Releases, Homebrew tap updates, and optional
Cloudsmith APT/RPM repositories.
## Local Checks
```bash
go test ./...
go build ./cmd/notcrawl
```
Also smoke the crawlkit control and non-interactive TUI surfaces before a tag:
```bash
notcrawl metadata --json
notcrawl status --json
notcrawl doctor --json
notcrawl tui --json --limit 10
```
The CI workflow runs the same control-surface smoke checks, plus dependency
verification, `gofmt`, `go vet`, tests, a GoReleaser snapshot build, and
CodeQL.
If GoReleaser is installed:
```bash
make release-snapshot
```
That creates local snapshot archives, checksums, `.deb`, and `.rpm` packages
under `dist/` without publishing.
## Release Notes
GitHub uses Release Drafter to auto-label PRs and generate release notes from
merged pull requests. The release workflow publishes the Release Drafter output
for the pushed tag, then uploads the GoReleaser artifacts to that release.
## Tagged Release
Create and push a semver tag:
```bash
git tag v0.1.0
git push origin v0.1.0
```
The release workflow:
1. runs tests
2. builds GoReleaser artifacts
3. publishes Release Drafter notes for the tag
4. uploads GitHub release assets
5. optionally publishes APT/RPM packages to Cloudsmith
6. updates the Homebrew tap
## Required Secrets
- `HOMEBREW_TAP_GITHUB_TOKEN`: token that can push to the tap repository
- `CLOUDSMITH_API_KEY`: optional; enables package publishing
## Optional Variables
- `HOMEBREW_TAP_REPO`: defaults to `vincentkoc/tap`
- `CLOUDSMITH_APT_TARGETS`: comma-separated targets like `ubuntu/jammy,debian/trixie`
- `CLOUDSMITH_DISTRIBUTION` and `CLOUDSMITH_RELEASE`: legacy single APT target
- `CLOUDSMITH_RPM_DISTRIBUTION`: defaults to `el`
- `CLOUDSMITH_RPM_RELEASE`: defaults to `9`
## Manual Reruns
If Cloudsmith publish fails after GitHub release assets exist:
```bash
gh workflow run publish-apt.yml -f tag_name=v0.1.0
gh workflow run publish-rpm.yml -f tag_name=v0.1.0
```
If the Homebrew tap update fails:
```bash
gh workflow run homebrew-tap.yml -f tag_name=v0.1.0
```