NVIDIA-NeMo / NVIDIA-NeMo/DataDesignerPlugins
Harden release validation for tap metadata and source refs
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 7
- Forks
- 6
- PR merge metrics
- No merged PRs in 30d
Description
Parent epic: #15
Depends on: #17, #18, #21
Why
A plugin release should not publish a package that cannot be represented accurately in the tap. Release validation currently checks version equality and basic PyPI metadata only. It must also validate that the generated schema v2 catalog entry is fresh, installable, and consistent with the release tag.
Concrete release contract
For a release tag data-designer-example/v0.1.0, release validation should verify:
- The plugin directory is
plugins/data-designer-example. [project].name == "data-designer-example".[project].version == "0.1.0"and is valid PEP 440.- The tag name equals
[tool.ddp.tap].release-ref-template.format(package=project.name, version=project.version). - Required PyPI metadata exists:
description,license,readme,authors. [project].requires-pythonis present and valid.- Exactly one direct versioned
data-designerdependency exists. - The current generated catalog contains at least one schema v2 entry with
package.name == project.nameandpackage.version == project.version. - All catalog entries for the package have valid
entry_point,compatibility,source, anddocsfields matching #16 and #18. - For
pypisource entries,source.package == project.name. - For
gitsource entries,source.refequals the release ref andsource.subdirectory == package.path. - Release validation fails if the package's catalog source is
path. docs.urlequals{docs-base-url.rstrip('/')}/plugins/{docs_slug}/.
CODEOWNERS release authorization contract
Use GitHub identities for release authorization:
- Per-plugin
CODEOWNERSmay contain GitHub users, GitHub teams, or emails for review ownership. - A releasable plugin must include at least one GitHub user (
@user) or team (@org/team) owner. - Email-only ownership should fail
ddp check-releasewith a message asking for a GitHub owner because publish CI cannot reliably authorize tag pushers by email alone. - Local
make releaseand publish CI should use the same owner parsing helper.
Implementation
- Extend
devtools/ddp/src/ddp/validate_release.pywith the checks above. - Add reusable helpers for release tag parsing, catalog entry lookup, and CODEOWNERS owner parsing.
- Update publish CI to call the strengthened validation before build/publish.
- Add tests for valid single-entry packages, valid multi-entry packages, stale catalog entries, missing docs/source, mismatched ref, path source on release, and email-only CODEOWNERS.
Acceptance criteria
make validate-release PLUGIN=data-designer-examplefails if catalog v2 output is stale or incomplete for that package.- Release validation catches mismatched package version, tag/ref, source metadata, and docs URL metadata.
- Multi-plugin packages validate every entry point for the releasing package.
- Email-only CODEOWNERS cannot pass release validation.
- Local release checks and publish CI share the same validation behavior.
- Tests cover the failure modes listed above.
Dependencies
- Depends on: #17, #18, #21.
- Blocks: reliable PyPI/Git tap consumption and #25 release workflow docs.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in devtools/ddp/src/ddp/validate_release.py and trace the existing release checks and publish CI invocation. Add reusable tag, catalog, and CODEOWNERS parsing helpers, then add coverage for the listed valid and failure cases; done means local and CI validation enforce the full release contract.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, python
- Domain
- ci-cd, release, testing-qa
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100