Files
james.maesandClaude Fable 5.1 e267f4f84a
QRun-IO/ci-policy: ci / fork-guard (pull_request) Skipped
QRun-IO/ci-policy: ci / fork-guard (push) Skipped
QRun-IO/ci-policy: native / fork-deny (pull_request) Skipped
QRun-IO/ci-policy: native / dotnet-0 (pull_request) Skipped
QRun-IO/ci-policy: native / fork-deny (push) Skipped
QRun-IO/ci-policy: native / dotnet-0 (push) Skipped
QRun-IO/ci-policy: ci / Scoped workflow [workflow 1e25bb5a243dfdcd95d4b9a4f780200ff8c8778a] (pull_request) Successful in 10s
QRun-IO/ci-policy: ci / Scoped workflow [workflow 1e25bb5a243dfdcd95d4b9a4f780200ff8c8778a] (push) Successful in 9s
QRun-IO/ci-policy: ci / head-profile (pull_request) Skipped
QRun-IO/ci-policy: native / native-result (pull_request) Successful in 6s
QRun-IO/ci-policy: ci / repository-policy (pull_request) Skipped
QRun-IO/ci-policy: ci / application-template-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / gradle-1 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (pull_request) Skipped
QRun-IO/ci-policy: ci / head-profile (push) Skipped
QRun-IO/ci-policy: native / native-result (push) Successful in 7s
QRun-IO/ci-policy: ci / java-maven-6-head (pull_request) Skipped
QRun-IO/ci-policy: ci / repository-policy (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (pull_request) Skipped
QRun-IO/ci-policy: ci / application-template-0 (push) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (pull_request) Skipped
QRun-IO/ci-policy: ci / gradle-1 (push) Skipped
QRun-IO/ci-policy: ci / node-8 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-core-2-head (push) Skipped
QRun-IO/ci-policy: ci / node-9 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3 (push) Skipped
QRun-IO/ci-policy: ci / node-10 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-3-head (push) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (pull_request) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-docker-4 (push) Skipped
QRun-IO/ci-policy: ci / java-frontend-browser-5 (push) Skipped
QRun-IO/ci-policy: ci / source-config-13 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6 (push) Skipped
QRun-IO/ci-policy: ci / source-config-14 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-6-head (push) Skipped
QRun-IO/ci-policy: ci / android-0 (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7 (push) Skipped
QRun-IO/ci-policy: ci / original-business (pull_request) Skipped
QRun-IO/ci-policy: ci / java-maven-7-head (push) Skipped
QRun-IO/ci-policy: ci / node-8 (push) Skipped
QRun-IO/ci-policy: ci / original-mcp (pull_request) Skipped
QRun-IO/ci-policy: ci / node-9 (push) Skipped
QRun-IO/ci-policy: ci / original-voyage (pull_request) Skipped
QRun-IO/ci-policy: ci / node-10 (push) Skipped
QRun-IO/ci-policy: ci / original-cli (pull_request) Skipped
QRun-IO/ci-policy: ci / node-playwright-11 (push) Skipped
QRun-IO/ci-policy: ci / repository-policy-12 (push) Skipped
QRun-IO/ci-policy: ci / not-enrolled (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-13 (push) Skipped
QRun-IO/ci-policy: ci / shared-pipeline (pull_request) Skipped
QRun-IO/ci-policy: ci / source-config-14 (push) Skipped
QRun-IO/ci-policy: ci / android-0 (push) Skipped
QRun-IO/ci-policy: ci / original-business (push) Skipped
QRun-IO/ci-policy: ci / original-mcp (push) Skipped
QRun-IO/ci-policy: ci / original-voyage (push) Skipped
QRun-IO/ci-policy: ci / ci-result (pull_request) Successful in 8s
QRun-IO/ci-policy: ci / original-cli (push) Skipped
QRun-IO/ci-policy: ci / not-enrolled (push) Skipped
QRun-IO/ci-policy: ci / shared-pipeline (push) Skipped
QRun-IO/ci-policy: ci / ci-result (push) Successful in 8s
maven / build (push) Failing after 9s
build / maven (push) Failing after 9s
docs(release): prepare the 0.1.0 release on the 0.1 train
Add CHANGELOG.md for the first published release and docs/RELEASES.md
describing the shared ci-workflows versioning (develop SNAPSHOT,
release/0.1 RC.N, tag vX.Y.Z stable), registry consumption and the
maintainer path. README now states the 0.1 train (0.1.0-RC.1 published,
0.1.0 cut by tag) instead of the coordinated snapshot; SNAPSHOT-RELEASE.md
is marked historical. The POM revision stays 0.1.0-SNAPSHOT on develop
because the workflow owns version computation.

Verified locally: ./mvnw.cmd verify, 33 tests, 0 failures/errors/skips,
JaCoCo gates met.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: James Maes <james@kof22.com>
2026-11-06 08:45:34 -06:00

70 lines
3.8 KiB
Markdown

# Release operations
The current release train is `0.1`. Its candidate `0.1.0-RC.1` is published to
the Gitea Maven registry from `release/0.1` (tag `v0.1.0-RC.1`, source
`6b0814d83e18f70e3ea315a99e5aece1a562a213`). The stable `0.1.0` is cut by
tagging `v0.1.0` on that train as described below. Changes are listed in
[CHANGELOG.md](../CHANGELOG.md). Gitea (`git.kof22.com/QRun-IO/qbit-redis`) is
primary for source, pull requests, CI, packages and releases; GitHub is a
shadow/archive and its workflows are historical.
## Use the Maven registry
Configure the consuming application's Maven repository setup with repository ID
`qrun-io` and URL `https://git.kof22.com/api/packages/QRun-IO/maven` (releases
enabled). The registry requires authentication for reads as well as writes:
match the ID to a `<server>` entry in your private `settings.xml` that references
your managed username/token through environment variables or encrypted Maven
credentials. Never commit a token or put it on a command line. Then depend on
`com.kingsrook.qbits:qbit-redis:<version>`; QQQ `4.1.0-RC.21` and Jedis resolve
from Maven Central. Verify the downloaded JAR/POM against the hashes recorded
for the release before adopting it.
## Versioning
The POM version is the `revision` property. On `develop` it stays
`0.1.0-SNAPSHOT` and is never hand-set: the shared
`KofTwentyTwo/ci-workflows` Maven workflow (called by
`.gitea/workflows/build.yaml` on every push) computes and commits versions.
| Ref | Build | Published version |
| --- | --- | --- |
| feature branches, pull requests, `main` | `mvn verify` only | none |
| `develop` | `mvn deploy` | current `X.Y.0-SNAPSHOT` (bumped to the next minor after a release merges back) |
| `release/X.Y` | `mvn deploy`, bump commit, tag `vX.Y.0-RC.N` | `X.Y.0-RC.N` |
| tag `vX.Y.Z` | `mvn deploy`, bump commit pushed to `main` | `X.Y.Z` |
| `hotfix/*` | `mvn deploy`, bump commit, tag | `X.Y.(Z+1)` |
The workflow runs the tests once inside `mvn deploy` on the `container-build`
runner, which provides the Docker daemon the Redis Testcontainers suites need.
## Maintainer release path
1. Merge reviewed changes into `develop` through a normal pull request; the
`develop` run publishes the SNAPSHOT.
2. Merge `develop` into `release/0.1` (pull request or fast-forward). The push
publishes the next `0.1.0-RC.N`, commits `Bump version to 0.1.0-RC.N [skip ci]`
and tags `v0.1.0-RC.N` on that bump commit. Consumers qualify the RC.
3. Bring `main` to the release-train head before tagging: the tag run pushes its
`Bump version to 0.1.0` commit with `git push origin HEAD:main`, which must be
a fast-forward. `main` currently carries CI-only commits with different SHAs
from the equivalent `develop` commits, so it must be reset or merged to the
`release/0.1` head first.
4. Tag the qualified source: `git tag -s v0.1.0 <release/0.1 head>` and push the
tag to origin only. The tag run sets `revision` to `0.1.0`, deploys
`com.kingsrook.qbits:qbit-redis:0.1.0` to the registry and pushes the bump
commit to `main`. A passing run alone does not prove publication: resolve the
exact version's JAR/POM from the registry with an authenticated client and
record their SHA-256 values here.
5. Create a Gitea release for `v0.1.0` (the shared workflow does not), attach the
same `qbit-redis-0.1.0.jar`, `qbit-redis-0.1.0.pom` and a flat `SHA256SUMS`,
read them back with the approved forge identity, then publish. Never replace
different bytes under a released version.
6. Merge `release/0.1` back into `develop`; the next `develop` run moves it to
`0.2.0-SNAPSHOT`.
Publication is separate from host adoption. The optional scenarios in
[TODO.md](TODO.md) (QQQ #1300/#1301/#1302) are not declared supported by a
release; [TOPOLOGY-QUALIFICATION.md](TOPOLOGY-QUALIFICATION.md) records what the
fixtures demonstrate.