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
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>
70 lines
3.8 KiB
Markdown
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.
|