|
| 1 | +# Release v0.1.0-beta.2: End-to-End Process Validation |
| 2 | + |
| 3 | +**Issue**: #459 |
| 4 | +**Parent Epic**: N/A |
| 5 | +**Related**: [#450](https://github.com/torrust/torrust-tracker-deployer/issues/450) (beta.1 release validation), |
| 6 | +[#448](https://github.com/torrust/torrust-tracker-deployer/issues/448) (release process definition), |
| 7 | +[#452](https://github.com/torrust/torrust-tracker-deployer/pull/452) (crate rename to tracker-deployer namespace) |
| 8 | + |
| 9 | +## Overview |
| 10 | + |
| 11 | +Execute the second pre-release of the Torrust Tracker Deployer, validating the |
| 12 | +full release workflow after the fixes and improvements made during and after the |
| 13 | +beta.1 cycle. Version `0.1.0-beta.2` serves as a second validation gate before |
| 14 | +cutting the final `v0.1.0` release. |
| 15 | + |
| 16 | +Unlike beta.1 (#450), the pipeline setup (crate token scopes, DockerHub environment, |
| 17 | +crate namespace after #452) is already known to work. This release focuses on |
| 18 | +confirming that the entire workflow runs cleanly end-to-end without friction and |
| 19 | +that no regressions were introduced by the post-beta.1 changes (Prometheus, Grafana, |
| 20 | +Caddy upgrades, crate renames, CVE documentation). |
| 21 | + |
| 22 | +## Goals |
| 23 | + |
| 24 | +- [ ] Version `0.1.0-beta.2` is reflected in all four `Cargo.toml` files on `main` |
| 25 | +- [ ] Signed tag `v0.1.0-beta.2` and release branch `releases/v0.1.0-beta.2` exist |
| 26 | +- [ ] Docker image `torrust/tracker-deployer:0.1.0-beta.2` is published to Docker Hub |
| 27 | +- [ ] All four crates are published to crates.io at version `0.1.0-beta.2` |
| 28 | +- [ ] GitHub release `v0.1.0-beta.2` is published (not draft) |
| 29 | +- [ ] Any new friction points discovered are documented and filed as follow-ups |
| 30 | + |
| 31 | +## Specifications |
| 32 | + |
| 33 | +### Version Bump Scope |
| 34 | + |
| 35 | +Update `version` field to `0.1.0-beta.2` in all four manifests: |
| 36 | + |
| 37 | +| File | Crate | |
| 38 | +| ------------------------------------------ | ----------------------------------------------- | |
| 39 | +| `Cargo.toml` (workspace root) | `torrust-tracker-deployer` | |
| 40 | +| `packages/deployer-types/Cargo.toml` | `torrust-tracker-deployer-types` | |
| 41 | +| `packages/dependency-installer/Cargo.toml` | `torrust-tracker-deployer-dependency-installer` | |
| 42 | +| `packages/sdk/Cargo.toml` | `torrust-tracker-deployer-sdk` | |
| 43 | + |
| 44 | +Also update every internal path dependency `version` constraint to `0.1.0-beta.2`. |
| 45 | + |
| 46 | +### Publish Order (crates.io dependency order) |
| 47 | + |
| 48 | +1. `torrust-tracker-deployer-types` |
| 49 | +2. `torrust-tracker-deployer-dependency-installer` |
| 50 | +3. `torrust-tracker-deployer` |
| 51 | +4. `torrust-tracker-deployer-sdk` |
| 52 | + |
| 53 | +Each crate's dry-run step in CI runs only after its prerequisites are indexed on |
| 54 | +crates.io — do not attempt to publish out of order. |
| 55 | + |
| 56 | +## Implementation Plan |
| 57 | + |
| 58 | +### Phase 1: Pre-Flight and Setup |
| 59 | + |
| 60 | +- [ ] Task 1.1: Verify local workspace is clean and on `torrust/main` up-to-date |
| 61 | + with `origin/main` (`git status`, `git pull --ff-only`) |
| 62 | +- [ ] Task 1.2: Confirm GitHub environments `dockerhub-torrust` and `crates-io` are |
| 63 | + still configured (token permissions, environment secrets unchanged since beta.1) |
| 64 | +- [ ] Task 1.3: Confirm releaser has push access to `main`, tags, and release branches |
| 65 | +- [ ] Task 1.4: Document any pre-flight issues found |
| 66 | + |
| 67 | +### Phase 2: Execute the Release |
| 68 | + |
| 69 | +- [ ] Task 2.1: Update `version` to `0.1.0-beta.2` in all four `Cargo.toml` files |
| 70 | + and in every internal path dependency constraint |
| 71 | +- [ ] Task 2.2: Run `cargo build && cargo test` and verify they pass |
| 72 | +- [ ] Task 2.3: Run `./scripts/pre-commit.sh` and verify all checks pass |
| 73 | +- [ ] Task 2.4: Create and push the signed release commit to `main` |
| 74 | + (`git commit -S -m "release: version v0.1.0-beta.2"`) |
| 75 | +- [ ] Task 2.5: Create and push annotated signed tag `v0.1.0-beta.2` |
| 76 | +- [ ] Task 2.6: Create and push release branch `releases/v0.1.0-beta.2` |
| 77 | +- [ ] Task 2.7: Monitor Container and Publish Crate workflows to completion |
| 78 | + |
| 79 | +### Phase 3: Artifact Verification |
| 80 | + |
| 81 | +- [ ] Task 3.1: Pull and inspect Docker image `torrust/tracker-deployer:0.1.0-beta.2` |
| 82 | +- [ ] Task 3.2: Verify all four crates at `0.1.0-beta.2` are visible on crates.io |
| 83 | +- [ ] Task 3.3: Verify docs.rs build for the published crate versions |
| 84 | +- [ ] Task 3.4: Create GitHub release from tag `v0.1.0-beta.2` |
| 85 | + |
| 86 | +### Phase 4: Process Review and Fixes |
| 87 | + |
| 88 | +- [ ] Task 4.1: Collect every friction point, error, or unexpected step encountered |
| 89 | + during the release — no matter how small |
| 90 | +- [ ] Task 4.2: For each issue found, fix the root cause immediately in the relevant |
| 91 | + artifact: |
| 92 | + - `docs/release-process.md` — if a step was wrong, missing, or misleading |
| 93 | + - `.github/skills/dev/git-workflow/release-new-version/skill.md` — if the skill |
| 94 | + diverged from reality |
| 95 | + - `scripts/` — if a helper script failed or was absent |
| 96 | + - CI workflow files (`.github/workflows/`) — if a workflow behaved unexpectedly |
| 97 | + - Any other documentation, template, or configuration that contributed to the |
| 98 | + friction |
| 99 | +- [ ] Task 4.3: File follow-up issues for any non-trivial problems that cannot be |
| 100 | + fixed inline (e.g., upstream blockers, larger refactors) |
| 101 | +- [ ] Task 4.4: Re-run `./scripts/pre-commit.sh` after any fixes to confirm nothing |
| 102 | + was broken |
| 103 | +- [ ] Task 4.5: Confirm all finalization gates below are met |
| 104 | + |
| 105 | +## Acceptance Criteria |
| 106 | + |
| 107 | +**Quality Checks**: |
| 108 | + |
| 109 | +- [ ] Pre-commit checks pass: `./scripts/pre-commit.sh` |
| 110 | + |
| 111 | +**Release Execution**: |
| 112 | + |
| 113 | +- [ ] Version `0.1.0-beta.2` is committed and present in all four `Cargo.toml` files |
| 114 | + on `main` |
| 115 | +- [ ] Tag `v0.1.0-beta.2` exists and is signed |
| 116 | +- [ ] Branch `releases/v0.1.0-beta.2` exists |
| 117 | +- [ ] Container workflow completed successfully |
| 118 | +- [ ] Publish Crate workflow completed successfully |
| 119 | +- [ ] GitHub release `v0.1.0-beta.2` is published (not draft) |
| 120 | + |
| 121 | +**Artifact Verification**: |
| 122 | + |
| 123 | +- [ ] Docker image `torrust/tracker-deployer:0.1.0-beta.2` can be pulled and run |
| 124 | +- [ ] All four crates at `0.1.0-beta.2` are visible on crates.io: |
| 125 | + - [ ] `torrust-tracker-deployer-types@0.1.0-beta.2` |
| 126 | + - [ ] `torrust-tracker-deployer-dependency-installer@0.1.0-beta.2` |
| 127 | + - [ ] `torrust-tracker-deployer@0.1.0-beta.2` |
| 128 | + - [ ] `torrust-tracker-deployer-sdk@0.1.0-beta.2` |
| 129 | +- [ ] docs.rs build page loads for the published versions |
| 130 | + |
| 131 | +**Process Quality**: |
| 132 | + |
| 133 | +- [ ] Every friction point or error encountered is documented (inline comment or |
| 134 | + filed follow-up issue) |
| 135 | +- [ ] Every fixable problem is fixed in the relevant artifact — documentation, |
| 136 | + skill, script, or workflow — not just noted |
| 137 | +- [ ] No step was silently skipped or improvised without documentation |
| 138 | +- [ ] `docs/release-process.md` and the release skill accurately reflect how the |
| 139 | + release was actually executed |
| 140 | + |
| 141 | +## Related Documentation |
| 142 | + |
| 143 | +- [Release Process](../release-process.md) |
| 144 | +- [Release Skill](.github/skills/dev/git-workflow/release-new-version/skill.md) |
| 145 | +- [beta.1 release issue #450](https://github.com/torrust/torrust-tracker-deployer/issues/450) |
| 146 | + |
| 147 | +## Notes |
| 148 | + |
| 149 | +This is a pre-release, not a stable release. Pre-release versions on crates.io |
| 150 | +(`0.1.0-beta.2`) are not selected by default by `cargo add` — users must opt in |
| 151 | +explicitly. The goal is to validate the full pipeline before committing to a stable |
| 152 | +`v0.1.0`. |
0 commit comments