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
{{ message }}
Repository navigation
Align extension release workflows with presets - #45
Align extension releases with the preset and Spec Kit architecture: a manual trigger validates inputs and pushes <directory>-vX.Y.Z; a separate tag-triggered job validates metadata, builds the ZIP inline, and publishes the release.
Use secrets.RELEASE_PAT in both trigger checkout steps, following Spec Kit's core release-trigger idiom. Keep checkout-persisted credentials for the tag push.
Address the first review's five findings: safe notes files in both publishers, scoped preset/extension tag filters, final--v version parsing, corrected grammar, and an actual extension directory example.
Address the follow-up version/URL concerns: both triggers reject manifest/catalog version mismatches before tagging, and both triggers and publishers require download_url to match the release repository, tag, and ZIP asset.
Restore package identity and containment safeguards in both package types: manifest IDs must match selected directories, package IDs must follow their existing namespace/slug conventions, and symlinked roots or package contents are rejected before reading manifests or creating archives. Direct tag pushes receive the same publisher checks.
Preserve the upstream extension-canvas-design identity and package-test removal. Keep maintainer/release documentation aligned with this behavior. The branch is rebased onto upstream main's Actions dependency updates.
Reference comparison
Spec Kit core and mnriem/spec-kit-extensions both use manual dispatch → PAT-authenticated tag push → separate publisher. The extension reference injects its PAT via the remote URL at the push step; this PR keeps Spec Kit core's checkout-token idiom. The reference's broad tag filter, first-delimiter parsing, and direct changelog interpolation are not copied: this repository hosts both package types and needs disjoint filters and safe notes handling.
Validation
actionlint v1.7.12 passes for all four release workflows.
The first two rounds' temporary checks covered real package ZIPs/publication arguments, tag routing, literal challenging changelog content, final-delimiter parsing, optional version prefixes, invalid versions/missing metadata, catalog URL components, and local-only tag pushes/duplicate rejection.
Thirteen current regression checks pass against the actual workflow scripts: valid real packages and ZIP byte contents, manifest ID mismatches/missing IDs, identity-before-version ordering, invalid/path-traversing directory IDs, symlinked roots, links to a temporary checkout's Git config, hidden/dangling/manifest/nested directory links, prior version/URL safeguards, valid IDs containing multiple -v delimiters, and structural/PAT alignment. Invalid preflights produce no tag output, archive, or publication call.
No real release workflow was dispatched and no release tag or GitHub release was created. Git-config link cases use only temporary test repositories; no real credentials are read. The removed package test suite was not restored.
Release setup
Maintainers must configure the repository Actions secret RELEASE_PAT with a token authorized to push tags before using the manual triggers. Default GITHUB_TOKEN tag pushes do not start the separate publisher. Publishers use GITHUB_TOKEN to create their release.
Preset tags are copilot-*-vX.Y.Z; extension tags are extension-*-vX.Y.Z. Update both the catalog version and its download URL before tagging. Both publishers retain one job with inline shell ZIP packaging; there are no reusable-workflow calls, artifact handoffs, or unrelated publisher failures.
The trigger creates the tag without checking that the requested version matches extension.yml and the catalog. A typo such as 0.2.0 while both files still say 0.1.0 therefore leaves a pushed tag that the publisher deterministically rejects; rerunning this trigger then fails because the tag already exists. Validate both versions before tagging, and mirror the safeguard in the preset trigger to preserve the required structural alignment.
Validate download_url matches the new release before publishing
.github/workflows/release-extension.yml:59
This now validates only the catalog version, so a version bump can publish successfully while download_url still points to the previous tag or asset. That leaves the catalog serving the wrong package and violates the alignment requirement in AGENTS.md:122-126; the previous workflow explicitly checked the expected release URL. Restore that check before publishing.
Both manual triggers now check the requested version against the manifest and catalog before creating or pushing a tag.
Both triggers and publishers require the catalog download URL to match the actual release repository, exact tag, and package ZIP filename. A stale URL is rejected before tagging as well as before packaging/publication.
The preset and extension workflows remain structurally aligned, with the same PAT-authenticated trigger and separate single-job publisher architecture. All four workflows pass actionlint; nine additional local regression checks cover valid packages, version mismatches, missing metadata, incorrect URL components, and local-only tag pushes/duplicate rejection. No real release was dispatched.
These two concerns appear in the review summary rather than new inline threads, so there are no new threads to resolve.
Use the same tag-triggered release structure and RELEASE_PAT checkout credentials for both package types. Preserve the upstream extension-canvas-design rename and package cleanup, and document the shared tag-filter behavior.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Preserve the Spec Kit manual-trigger and separate publisher architecture while scoping package tags, parsing the final version delimiter, and passing release notes through a file. Correct extension help text and document the package-specific differences.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Check requested versions against manifests and catalogs in both manual triggers. Require catalog URLs to match the release repository, tag, and ZIP asset in triggers and publishers, preserving preset and extension workflow alignment.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Restore manifest ID checks before version validation in both triggers and publishers. Reject symlinked package roots and contents before parsing manifests or archiving, and enforce existing package ID namespaces to keep package paths contained.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Acknowledged review 5419076590: there are no new code findings, and the three previous findings are resolved. Credentialed end-to-end release validation remains pending; the local regression checks do not prove the GitHub PAT-to-tag-push handoff or live publication.
Read-only secret-name metadata currently lists no repository or inherited organization RELEASE_PAT available to this repository. No secret values were accessed, and no real release was dispatched.
Maintainer validation for the first authorized releases after these workflows reach main:
Configure RELEASE_PAT with permission to push release tags, and choose unreleased package versions whose manifest IDs/versions and catalog URLs match the intended repository, tag, and asset.
Run the extension and preset manual triggers for their intended releases. Confirm each creates its exact tag and automatically starts only the matching publisher, without manually dispatching the publisher.
Confirm publication succeeds, download each ZIP, and verify the manifest is at the archive root, packaged ID/version and contents are correct, release notes match the changelog, and the catalog URL downloads that exact asset. Record both trigger and publisher run URLs as end-to-end evidence.
This is an outstanding operational acceptance check, not an additional workflow change. No live tag push or publication is claimed as validated.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
<directory>-vX.Y.Z; a separate tag-triggered job validates metadata, builds the ZIP inline, and publishes the release.secrets.RELEASE_PATin both trigger checkout steps, following Spec Kit's core release-trigger idiom. Keep checkout-persisted credentials for the tag push.-vversion parsing, corrected grammar, and an actual extension directory example.download_urlto match the release repository, tag, and ZIP asset.extension-canvas-designidentity and package-test removal. Keep maintainer/release documentation aligned with this behavior. The branch is rebased onto upstream main's Actions dependency updates.Reference comparison
Spec Kit core and
mnriem/spec-kit-extensionsboth use manual dispatch → PAT-authenticated tag push → separate publisher. The extension reference injects its PAT via the remote URL at the push step; this PR keeps Spec Kit core's checkout-token idiom. The reference's broad tag filter, first-delimiter parsing, and direct changelog interpolation are not copied: this repository hosts both package types and needs disjoint filters and safe notes handling.Validation
actionlintv1.7.12 passes for all four release workflows.-vdelimiters, and structural/PAT alignment. Invalid preflights produce no tag output, archive, or publication call.Release setup
Maintainers must configure the repository Actions secret
RELEASE_PATwith a token authorized to push tags before using the manual triggers. DefaultGITHUB_TOKENtag pushes do not start the separate publisher. Publishers useGITHUB_TOKENto create their release.Preset tags are
copilot-*-vX.Y.Z; extension tags areextension-*-vX.Y.Z. Update both the catalog version and its download URL before tagging. Both publishers retain one job with inline shell ZIP packaging; there are no reusable-workflow calls, artifact handoffs, or unrelated publisher failures.