RC tag builds increment and republish the next RC with old code #20
Open
opened 2026-10-12 21:03:30 +00:00 by KofTwentyTwo
·
0 comments
No Branch/Tag Specified
develop
migration/shared-source-configuration-20261105
ci-qrun-npm-export-6281c98f7a28
fix/printing-postgres-consumer-20261102
cutover/remove-completed-release-recovery-20261102
cutover/encrypted-release-recovery-20261102
archive/qrun-github-cutover-20261101/53e9dfd7fce7/main
main
release/cli-core-publish
archive/qrun-github-cutover-20261101/06c86a93f7b0/develop
feat/cli-core-publish-platform-lanes
ci/ruby-codeql-verified-20261030
fix/no-sonar-verified-20261030
fix/codeql-ruby-selection-20261029
feature/oss-quality-without-sonar-20261029
fix/package-fetch-retries-1307
fix/version-preflight-1312
test/node-artifact-github-auth
release/voyage-live-gitops
fix/voyage-live-gitops
release/voyage-digest-validation
fix/voyage-digest-and-release-validation
release/voyage-config-parsing
fix/voyage-config-parsing
release/voyage-release-targets
fix/voyage-release-targets
release/verified-publisher-fixes
fix/node-snapshot-source-head
fix/publish-boolean-environment
release/verified-publication-analysis
perf/verified-publication-analysis
release/core-dependency-assembly-cost
perf/core-dependency-assembly
release/repository-wide-cancellation-policy
fix/repository-wide-cancellation-policy
release/gh-capability-probes
fix/gh-capability-probes
release/central-circle-cost-settings
feat/central-circle-cost-settings
release/native-enrollment-enforcement
feat/native-enrollment-enforcement
release/template-renderer-working-directory
fix/template-renderer-working-directory
release/shared-template-acceptance
feat/shared-template-acceptance
release/shared-homebrew-validation
feat/shared-homebrew-validation
release/shared-policy-shell-validation
feat/shared-policy-shell-validation
fix/catalog-standard-audit
release/gitops-native-enrollment
feat/gitops-native-enrollment
release/marketing-central-validation
feat/marketing-central-validation
release/voyage-shared-gate
feat/voyage-shared-gate
release/marketing-branches-node-images
fix/marketing-branch-and-node-image
release/marketing-honest-coverage
fix/marketing-honest-coverage
release/node-artifact-native-gates
feat/shared-node-artifact
feat/native-next-enforcement
release/shared-profile-enforcement
feat/shared-profile-enforcement
release/qbit-filter-support
feat/qbit-hotfix-integration-filter
release/reconcile-cli
fix/reconcile-gh-version
release/central-reconciliation
feat/central-enrollment-runner
fix/check-order-readback
feat/github-signed-enrollment
release/central-enrollment
feat/preserve-restricted-branch-access
feat/verify-existing-rulesets
feat/finish-consumer-enrollment
feat/discover-enrollment-targets
feat/remote-consumer-enrollment
feat/batch-consumer-enrollment
release/analysis-exit-status
fix/static-analysis-exit-status
ci/shared-orb-enforcement
release/frontend-ci-maintenance
fix/frontend-ci-maintenance
release/core-snapshot-gate
fix/core-snapshot-publication-gate
fix/discover-live-estate
release/maintenance-branch-verification
fix/maintenance-branch-verification
release/frontend-build-reuse
fix/onboarding-managed-track
perf/reuse-frontend-build
release/scoped-browser-bootstrap
fix/scoped-browser-bootstrap
release/managed-patch-track
feat/managed-patch-track
release/ubuntu-only-bootstrap
fix/ubuntu-only-bootstrap
release/scoped-temurin-refresh
fix/scoped-temurin-refresh
release/qbit-feature-schema
fix/effective-publication-version
fix/schema-workflow-maintenance
feature/qbit-feature-publication
fix/audit-release-enforcement
release/ci-maintenance
fix/rc-caller-maintenance
fix/ci-maintenance-publication
release/policy-profile-and-retries
fix/placeholder-branch-policy
fix/apt-download-retries
release/branch-policies-and-scanning
fix/qbit-branch-codeql
fix/audit-selected-branch
fix/qbit-hotfix-profile
release/stable-verification-gate
feature/stable-verification-gate
fix/audit-rc-worker-policy
fix/rc-missing-reference
fix/recover-published-rc-timeout
fix/native-worker-alignment
feat/central-version-rollout
fix/business-required-database-gate
release/android-continuation-fix
fix/android-continuation-heredoc
feat/gitops-validation
release/android-package-auth
fix/android-package-token
rollout/all-consumer-support
fix/all-public-circle-evidence
fix/android-shared-publication
fix/marketing-build-order
fix/voyage-artifact-security
fix/policy-continuation-heredoc
fix/all-circle-release-evidence
fix/mcp-single-validation
fix/integration-test-results
diagnostic/central-status
fix/confirmed-central-publication
fix/resolved-publication-poms
fix/release-failure-reporting
feature/central-ci
feature/snapshot-dependency-refresh
feature/GH-20-refuse-rc-tag-builds
feature/GH-915-oidc-boolean
feature/GH-912-npm-trusted-publishing
feature/GH-12-safe-maven-deploy
v0.8.33
v0.8.32
v0.8.31
v0.8.30
v0.8.29
v0.8.28
v0.8.27
v0.8.26
v0.8.25
v0.8.24
v0.8.23
v0.8.22
v0.8.21
v0.8.20
v0.8.19
v0.8.18
v0.8.17
v0.8.16
v0.8.15
v0.8.14
v0.8.13
v0.8.12
v0.8.11
v0.8.10
v0.8.9
v0.8.8
v0.8.7
v0.8.6
v0.8.5
v0.8.4
v0.8.3
v0.8.2
v0.8.1
v0.8.0
v0.7.18
v0.7.17
v0.7.16
v0.7.15
v0.7.14
v0.7.13
v0.7.12
v0.7.11
v0.7.10
v0.7.9
v0.7.8
v0.7.7
v0.7.6
v0.7.5
v0.7.4
v0.7.3
v0.7.2
v0.7.1
v0.7.0
v0.6.9
v0.6.8
v0.6.7
v0.6.6
v0.6.5
v0.6.4
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.3
v0.5.2
v0.5.1
v0.5.0
v0.4.0
v0.3.13
v0.3.12
v0.3.11
v0.3.10
v0.3.9
v0.3.8
v0.3.7
v0.3.6
v0.3.5
v0.3.4
v0.3.3
v0.3.2
v0.3.1
v0.3.0
v0.2.0
Labels
Clear labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Good for newcomers
Extra attention is needed
This doesn't seem right
Further information is requested
This will not be worked on
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
No due date set.
Dependencies
No dependencies set.
Reference: QRun-IO/qqq-orb#20
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
A build triggered by a release-candidate tag (
vX.Y.Z-RC.N) does not publishX.Y.Z-RC.N.calculate_version.shtreats the tag as arelease/X.Ybranch build,handle_release_branchincrements the RC already in the pom, andmvn_publishdeploys the next RC number with the old tag's code. That burns a version on Maven Central and publishes a duplicate artifact under a misleading number.Where it happens
src/scripts/calculate_version.sh:^v([0-9]+\.[0-9]+\.[0-9]+)-RC\.[0-9]+$is mapped to a release branch:release/release/1.0.0, notrelease/1.0. It still "works" only because the regex inhandle_release_branchis unanchored and matches the innerrelease/1.0.)handle_release_branch(lines 266-294): if the pom already holdsX.Y.Z-RC.N, it setsNEW_VERSION=X.Y.0-RC.(N+1).The tag commit is the commit the release-branch build already published as
RC.N(the pom on that commit already saysRC.N), so the tag build always producesRC.(N+1)with the same code.Evidence (2026-10-12)
Both qbit repos had a
publish_releaseworkflow (qqq-orb/mvn_publish,branch_type: release) filtered on tags/v.*/:com.kingsrook.qbits:qbit-sql-workbench:1.0.0-RC.3v1.0.0-RC.2at0d8af84com.kingsrook.qbits:qbit-assistant:0.1.0-RC.2v0.1.0-RC.1at7263ac6Both versions are now burned. The next real candidates are 1.0.0-RC.4 and 0.1.0-RC.3.
The consumer-side mitigation is in flight: the qbit repos are changing the
publish_releasetag filter to GA tags only (/^v\d+\.\d+\.\d+$/, branchfeature/ga-only-release-tags). That stops the trigger, but any other repo that filters on/v.*/(or adds one later) still hits this in the orb.Proposed fix
For a
vX.Y.Z-RC.Ntag build, the orb should never increment. Either:X.Y.Z-RC.N, and exit non-zero if that version already exists on Central (it normally will, because the release-branch build published it); orrelease/*branch builds.Refusing is the smaller, safer change and matches how the release flow actually works (RC tags are created after the release-branch build already published). A follow-up PR implements that, with a test in
tests/test_calculate_version.sh.