|
1 | | -# Deployment Checklist |
| 1 | +# Deployment |
2 | 2 |
|
3 | | -## 1. Pre-Release — Feature Readiness |
| 3 | +## Matrix Build vs Goreleaser |
| 4 | + |
| 5 | +**Matrix build** (used by notion-sync): You write explicit `go build` commands in a GitHub Actions matrix — one job per OS/arch combo. Simple but verbose. Outputs standalone binaries. |
| 6 | + |
| 7 | +**Goreleaser** (used by zenodo-cli): A declarative tool that reads `.goreleaser.yaml` and handles building, packaging, checksums, and changelogs in one step. Less CI code, supports multi-binary projects natively. By default produces archives (tar.gz/zip), but can output raw binaries with `format: binary`. |
| 8 | + |
| 9 | +zenodo-cli uses goreleaser with `format: binary` so we get the simplicity of goreleaser config with the same standalone-binary UX as notion-sync. |
| 10 | + |
| 11 | +## Feature Comparison |
| 12 | + |
| 13 | +| Feature | notion-sync (matrix) | zenodo-cli (goreleaser) | ELI5 | |
| 14 | +|---|---|---|---| |
| 15 | +| Build system | Manual `go build` in CI matrix | Goreleaser (declarative yaml) | How the binaries get compiled in CI | |
| 16 | +| Release artifacts | Standalone binaries (`name-os-arch`) | Standalone binaries (via `format: binary`) | What users actually download | |
| 17 | +| macOS/Linux install | `curl \| bash` install script | `curl \| bash` install script | One-liner to install on Mac/Linux | |
| 18 | +| Windows install | Scoop (points at `.exe`) | Scoop (points at `.exe`) | One-liner to install on Windows | |
| 19 | +| Checksums | `sha256sum` in CI step | Goreleaser generates `checksums.txt` | Verifies download wasn't corrupted | |
| 20 | +| Version injection | `-X main.version=` in CI | `-X internal/cli.version=` via ldflags | Embeds version number into the binary at build time | |
| 21 | +| Scoop manifest update | CI step with `jq` | CI step with `jq` | Auto-updates the Scoop package after release | |
| 22 | +| Multi-binary support | Separate build line per binary | Multiple `builds:` entries in yaml | How we ship both `zenodo` and `zenodo-mcp` | |
| 23 | +| Changelog | GitHub auto-generated | Goreleaser with commit filters | Release notes on the GitHub release page | |
| 24 | + |
| 25 | +## Checklist |
| 26 | + |
| 27 | +### 1. Pre-Release — Feature Readiness |
4 | 28 |
|
5 | 29 | - [ ] All features intended for this release are merged to `main` |
6 | | -- [ ] Any commands not ready are commented out (e.g. deposit write, access links in v0.1) |
7 | 30 | - [ ] `go build ./...` and `go test ./...` pass on `main` |
8 | | -- [ ] Rebuild binary (`go build -o zenodo.exe ./cmd/zenodo`) and smoke-test key commands |
| 31 | +- [ ] Rebuild binaries and smoke-test key commands |
9 | 32 |
|
10 | | -## 2. Pre-Release — CI/CD Readiness |
| 33 | +### 2. Pre-Release — CI/CD Readiness |
11 | 34 |
|
12 | 35 | - [ ] `.github/workflows/release.yml` exists and triggers on `v*` tags |
13 | | -- [ ] `.goreleaser.yaml` is configured (platforms, ldflags, archives, checksums) |
14 | | -- [ ] `bucket/zenodo.json` Scoop manifest exists |
| 36 | +- [ ] `.goreleaser.yaml` is configured (platforms, ldflags, format: binary) |
| 37 | +- [ ] `bucket/zenodo-cli.json` Scoop manifest exists |
15 | 38 | - [ ] Release workflow includes Scoop manifest auto-update step |
| 39 | +- [ ] `scripts/install.sh` exists for macOS/Linux |
16 | 40 | - [ ] Version injection works (`internal/cli/version.go` has ldflags vars) |
17 | 41 |
|
18 | | -## 3. Tag & Release |
| 42 | +### 3. Tag & Release |
19 | 43 |
|
20 | 44 | - [ ] Ensure you're on `main` with a clean working tree |
21 | 45 | - [ ] Tag: `git tag v<VERSION>` (e.g. `git tag v0.1.0`) |
22 | 46 | - [ ] Push tag: `git push origin v<VERSION>` |
23 | 47 | - [ ] Monitor the GitHub Actions release workflow for success |
24 | 48 |
|
25 | | -## 4. Post-Release Verification |
| 49 | +### 4. Post-Release Verification |
26 | 50 |
|
27 | 51 | - [ ] GitHub release page has binaries for all platforms (linux/darwin/windows × amd64/arm64) |
28 | 52 | - [ ] `checksums.txt` is included in the release assets |
29 | | -- [ ] `bucket/zenodo.json` was auto-updated with new version and hash (check the commit on `main`) |
30 | | -- [ ] Scoop install works: `scoop bucket add zenodo https://github.com/ran-codes/zenodo-cli && scoop install zenodo` |
| 53 | +- [ ] `bucket/zenodo-cli.json` was auto-updated with new version and hash |
| 54 | +- [ ] Scoop install works: `scoop bucket add zenodo-cli https://github.com/ran-codes/zenodo-cli && scoop install zenodo-cli` |
| 55 | +- [ ] macOS install works: `curl -fsSL ... | bash` |
31 | 56 | - [ ] `zenodo version` shows correct version, commit, and date |
0 commit comments