|
| 1 | +# DeepSQL release process |
| 2 | + |
| 3 | +How we cut an official GitHub release with builds, source archives, checksums, and SBOMs. |
| 4 | + |
| 5 | +## Versioning |
| 6 | + |
| 7 | +| Surface | Where | Current | |
| 8 | +|---------|-------|---------| |
| 9 | +| Product / Git tag | `vMAJOR.MINOR.PATCH` | `v1.0.0` | |
| 10 | +| Backend JAR | `backend/pom.xml` `<version>` | `1.0.0` | |
| 11 | +| Frontend package | root `package.json` | `0.1.0` (internal) | |
| 12 | +| MCP / CLI npm | `mcp/package.json` | `0.27.0` | |
| 13 | + |
| 14 | +Tag the **product** version (`v1.0.0`). Keep backend `pom.xml` in lockstep with the tag for the JAR filename. MCP may continue its own semver when publishing `@deepsql/mcp` to npm. |
| 15 | + |
| 16 | +## Pre-flight (release manager) |
| 17 | + |
| 18 | +1. `main` is green on CI (`frontend`, `backend`, `mcp`, `compose-build`). |
| 19 | +2. Smoke matrix from `docs/oss-ux/E2E_FIX_PROPOSAL.md` W7 passes on a redeployed stack: |
| 20 | + - login / auth cookie |
| 21 | + - Brain init `COMPLETED` |
| 22 | + - Agent Q&A (`scripts/self-host/e2e-agent-check.py`) → `AGENT_OK` + `DASH_OK` |
| 23 | + - `/onboarding` renders |
| 24 | + - security smoke: anonymous Prometheus `401`, malicious kill pid `400` |
| 25 | +3. `CHANGELOG.md` and `docs/releases/RELEASE_NOTES-vX.Y.Z.md` updated. |
| 26 | + |
| 27 | +## Local artifact build |
| 28 | + |
| 29 | +```bash |
| 30 | +./scripts/release/build-artifacts.sh v1.0.0 |
| 31 | +# → release-artifacts/v1.0.0/ |
| 32 | +``` |
| 33 | + |
| 34 | +Skip expensive rebuilds when iterating: |
| 35 | + |
| 36 | +```bash |
| 37 | +SKIP_BACKEND=1 SKIP_FRONTEND=1 ./scripts/release/build-artifacts.sh v1.0.0 |
| 38 | +``` |
| 39 | + |
| 40 | +Verify checksums: |
| 41 | + |
| 42 | +```bash |
| 43 | +cd release-artifacts/v1.0.0 |
| 44 | +sha256sum -c SHA256SUMS |
| 45 | +``` |
| 46 | + |
| 47 | +## Publish on GitHub |
| 48 | + |
| 49 | +Preferred path (CI): |
| 50 | + |
| 51 | +```bash |
| 52 | +git checkout main && git pull |
| 53 | +git tag -a v1.0.0 -m "DeepSQL v1.0.0" |
| 54 | +git push origin v1.0.0 |
| 55 | +``` |
| 56 | + |
| 57 | +Pushing the tag runs `.github/workflows/release.yml`, which: |
| 58 | + |
| 59 | +1. Builds source archives, backend JAR, frontend tarball, MCP pack |
| 60 | +2. Generates CycloneDX SBOMs (best-effort) |
| 61 | +3. Writes `SHA256SUMS` / `SHA512SUMS` + `manifest.json` |
| 62 | +4. Creates a GitHub Release (non-draft) attaching every file under `release-artifacts/v1.0.0/` |
| 63 | + |
| 64 | +Manual fallback (if Actions cannot publish): |
| 65 | + |
| 66 | +```bash |
| 67 | +./scripts/release/build-artifacts.sh v1.0.0 |
| 68 | +gh release create v1.0.0 \ |
| 69 | + --title "DeepSQL v1.0.0" \ |
| 70 | + --notes-file docs/releases/RELEASE_NOTES-v1.0.0.md \ |
| 71 | + release-artifacts/v1.0.0/* |
| 72 | +``` |
| 73 | + |
| 74 | +## Artifact set (what “industry standard” means here) |
| 75 | + |
| 76 | +| Artifact | Purpose | |
| 77 | +|----------|---------| |
| 78 | +| `*-source.tar.gz` / `.zip` | Bit-for-bit source corresponding to the tag (`git archive`) | |
| 79 | +| `dba-agent-backend-*.jar` | Runnable Spring Boot binary | |
| 80 | +| `deepsql-frontend-*.tar.gz` | Static SPA to serve behind nginx | |
| 81 | +| `deepsql-mcp-*.tgz` | CLI / MCP installable package | |
| 82 | +| `sbom-*.cdx.json` | CycloneDX software bill of materials | |
| 83 | +| `SHA256SUMS` / `SHA512SUMS` | Integrity verification | |
| 84 | +| `manifest.json` | Machine-readable inventory (commit, sizes, hashes) | |
| 85 | +| `RELEASE_NOTES.md` | Human-facing release notes | |
| 86 | + |
| 87 | +Docker Compose remains the primary install path (`docker compose up --build`); the JAR + frontend tarball support air-gapped / non-Compose operators. |
| 88 | + |
| 89 | +## Post-release |
| 90 | + |
| 91 | +- Confirm the Release page lists every file and checksums verify. |
| 92 | +- Announce with the tag URL + one-line upgrade note. |
| 93 | +- Bump versions on `main` for the next cycle only after the tag is cut (avoid tagging a commit whose pom still says the previous version). |
0 commit comments