Skip to content

feat(release): register the Java services for tagging - #560

Merged
balajinvda merged 1 commit into
mainfrom
feat/java-release-registry
Jul 30, 2026
Merged

feat(release): register the Java services for tagging#560
balajinvda merged 1 commit into
mainfrom
feat/java-release-registry

Conversation

@balajinvda

@balajinvda balajinvda commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Why

cloud-tasks, notary and api-keys build multi-arch images in CI and now have
publish destinations wired in nvcf-internal, but nothing ever cut a tag for
them. They were absent from tools/ci/github-release-subprojects.json, so no
tag was created, no GitHub Release existed, nothing dispatched, and the publish
config could not fire.

The registry is normally generated by tools/generate-subproject-ci from
tools/ci/subproject-validations.yaml. Neither that generator nor its config
exists in this repository -- both live in the GitLab umbrella, whose default
branch is now protected against push and merge by everyone. The generated file
is therefore edited directly here, as with other mirror-only files.

Version continuity

This is the part that needed care rather than three new rows.

Each service has an established version line in its own upstream project:

service upstream project latest
cloud-tasks nvcf/nvct/nvct-service v1.62.2
notary nvcf/nvcf-notary/notary-service 1.12.0
api-keys nvcf/nvcf-api-keys/api-keys-service 1.6.0

None of those tags is in this repository. synthesize_initial_version_anchor
creates an anchor at INITIAL_RELEASE_FLOOR_VERSION (0.0.0) for a registered
service with no tags, so registering these alone would have made the first
release 0.1.0 and moved versions backwards for anyone pinning the upstream
line. That is a silent failure: the release succeeds and the number is simply
wrong.

Anchor tags at the current upstream versions were pushed ahead of this change:

src/control-plane-services/cloud-tasks/v1.62.2
src/control-plane-services/notary/v1.12.0
src/control-plane-services/api-keys/v1.6.0

The ordering is deliberate and load-bearing. release-tags.yml triggers on
**/v*, so those pushes did run the tag workflow -- but while a service is
unregistered parse_release_tag cannot match its tags, and the code takes the
is not a supported release tag; skipping path. The anchors landed as plain
tags with no GitHub Release and no build, which I verified against the releases
API afterwards. Registering first and anchoring second would have created a
Release for a version that was never built.

legacy_tag_prefix is intentionally unset. It selects older tags within this
repository; these services have none, and their history is carried by the
anchors.

What changed

Three entries in tools/ci/github-release-subprojects.json. id matches the
service_id in the nvcf-internal release config so the dispatch resolves, and
path yields the tag prefix via default_tag_format.

Testing

python3 tools/ci/test-github-release.py passes (7 tests). Those tests only
constrain services with dev_prerelease, which these are not, so they do not
cover the new rows directly.

Verified by loading github-release and resolving each new entry against the
pushed anchors:

cloud-tasks   prefix=src/control-plane-services/cloud-tasks/v   -> 1.62.2
notary        prefix=src/control-plane-services/notary/v        -> 1.12.0
api-keys      prefix=src/control-plane-services/api-keys/v      -> 1.6.0

Each resolves to its real upstream version rather than falling through to the
0.0.0 floor, which is the specific regression this guards against.

Usage

After merge, the next conventional commit touching each subtree cuts
v1.62.3 / 1.12.1 / 1.6.1, creates a Release, dispatches to nvcf-internal, and
publishes to ncp-dev and kaze.

Notes

The first release for each service is also the first exercise of subtree: "."
in the nvcf-internal release backend, since these build from the root module.
Worth watching rather than assuming.

api-keys is the one to reconsider before its first tag: it has an existing
api-keys-colocated chart and is widely referenced in nvcf-internal, so it may
already publish an image through another route.

References

None

Related Merge Requests/Pull Requests

Paired with the nvcf-internal MR adding the publish destinations.

Dependencies

None.

Summary by CodeRabbit

  • Chores
    • Added Cloud Tasks, Notary, and API Keys to the automated release configuration.
    • These subprojects can now be included in GitHub release workflows.

cloud-tasks, notary and api-keys build multi-arch images and now have publish
destinations in nvcf-internal, but nothing cut a tag for them: they were absent
from the release registry, so no tag, no GitHub Release, and no dispatch. The
publish wiring could never fire.

Version continuity is the reason this is not just three new rows. Each service
has a long-established line in its own upstream project -- nvct-service at
v1.62.2, notary-service at 1.12.0, api-keys-service at 1.6.0 -- none of which
lives in this repo. github-release synthesizes an anchor at
INITIAL_RELEASE_FLOOR_VERSION when a registered service has no tag, so
registering them alone would have started each at 0.1.0 and moved versions
backwards for anyone pinning the upstream line.

Anchor tags at the current upstream versions were pushed first, deliberately
before this change. While a service is unregistered, parse_release_tag cannot
match its tags, so the tag workflow skips them and no GitHub Release is created
-- the anchors land as plain tags with no release or build. With them present,
latest_service_tag resolves to the real version and the next conventional commit
continues the line rather than restarting it.

legacy_tag_prefix is intentionally unset: it selects older tags within this
repository, and these services have none. Their history lives in separate
projects and is carried by the anchors instead.

Co-authored-by: Balaji Ganesan <bganesan@nvidia.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@balajinvda
balajinvda requested a review from a team as a code owner July 30, 2026 03:20
@balajinvda
balajinvda requested a review from Max-NV July 30, 2026 03:20
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The GitHub release configuration adds cloud-tasks, notary, and api-keys to the services list, including each subproject’s identifier, path, and service name.

Changes

Release configuration

Layer / File(s) Summary
Add release service entries
tools/ci/github-release-subprojects.json
Adds configuration entries for cloud-tasks, notary, and api-keys to the release services list.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested reviewers: max-nv

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title is descriptive, but this tools/ci release-config change is CI infrastructure, not a customer-facing feat. Use a ci(scope): subject title, e.g. ci(release): register Java services for tagging.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/java-release-registry

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tools/ci/github-release-subprojects.json`:
- Around line 245-259: Add focused tests for the new cloud-tasks, notary, and
api-keys registrations, asserting each ID, path, service_name, and version/tag
resolution; if tests cannot be added, document the omission and rationale in the
pull request description.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 9c1b3fed-9793-4c73-87b8-d726b6c327dc

📥 Commits

Reviewing files that changed from the base of the PR and between 077af5c and 86fa01c.

📒 Files selected for processing (1)
  • tools/ci/github-release-subprojects.json

Comment thread tools/ci/github-release-subprojects.json
@balajinvda
balajinvda enabled auto-merge July 30, 2026 03:31

@sanjay-saxena sanjay-saxena left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@balajinvda
balajinvda added this pull request to the merge queue Jul 30, 2026
Merged via the queue into main with commit f08d54e Jul 30, 2026
15 checks passed
@balajinvda
balajinvda deleted the feat/java-release-registry branch July 30, 2026 05:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants