You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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).
Per-plugin CODEOWNERS may 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-release with a message asking for a GitHub owner because publish CI cannot reliably authorize tag pushers by email alone.
Local make release and publish CI should use the same owner parsing helper.
Implementation
Extend devtools/ddp/src/ddp/validate_release.py with 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-example fails if catalog v2 output is stale or incomplete for that package.
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:plugins/data-designer-example.[project].name == "data-designer-example".[project].version == "0.1.0"and is valid PEP 440.[tool.ddp.tap].release-ref-template.format(package=project.name, version=project.version).description,license,readme,authors.[project].requires-pythonis present and valid.data-designerdependency exists.package.name == project.nameandpackage.version == project.version.entry_point,compatibility,source, anddocsfields matching Define the schema v2 tap catalog contract #16 and Generate explicit install source metadata for PyPI and Git installs #18.pypisource entries,source.package == project.name.gitsource entries,source.refequals the release ref andsource.subdirectory == package.path.path.docs.urlequals{docs-base-url.rstrip('/')}/plugins/{docs_slug}/.CODEOWNERS release authorization contract
Use GitHub identities for release authorization:
CODEOWNERSmay contain GitHub users, GitHub teams, or emails for review ownership.@user) or team (@org/team) owner.ddp check-releasewith a message asking for a GitHub owner because publish CI cannot reliably authorize tag pushers by email alone.make releaseand publish CI should use the same owner parsing helper.Implementation
devtools/ddp/src/ddp/validate_release.pywith the checks above.Acceptance criteria
make validate-release PLUGIN=data-designer-examplefails if catalog v2 output is stale or incomplete for that package.Dependencies