Skip to content

Commit 8744262

Browse files
iamaeroplaneclaude
andcommitted
merge: resolve conflicts with upstream/main
Upstream added hook-only extension support to ExtensionManifest._validate(): type checks for provides.commands and hooks, allows extensions with only hooks (no commands), and validates individual hook entries have a 'command' field. Merged with our rename_map / command auto-correction logic. Test conflicts: upstream renamed test_no_commands → test_no_commands_no_hooks and softened the alias autocorrect assertion. Kept our detailed assertions (they test the actual behavior this PR introduces) and applied the rename. Updated hook error message match to upstream's new wording. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 parents b137f44 + 7f1e384 commit 8744262

199 files changed

Lines changed: 15413 additions & 5951 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/ISSUE_TEMPLATE/extension_submission.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body:
1212
- Review the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md)
1313
- Ensure your extension has a valid `extension.yml` manifest
1414
- Create a GitHub release with a version tag (e.g., v1.0.0)
15-
- Test installation: `specify extension add --from <your-release-url>`
15+
- Test installation: `specify extension add <extension-name> --from <your-release-url>`
1616
1717
- type: input
1818
id: extension-id
@@ -229,7 +229,7 @@ body:
229229
placeholder: |
230230
```bash
231231
# Install extension
232-
specify extension add --from https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip
232+
specify extension add <extension-name> --from https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip
233233
234234
# Use a command
235235
/speckit.your-extension.command-name arg1 arg2

.github/workflows/docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
docfx docfx.json
4848
4949
- name: Setup Pages
50-
uses: actions/configure-pages@v5
50+
uses: actions/configure-pages@v6
5151

5252
- name: Upload artifact
5353
uses: actions/upload-pages-artifact@v3

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
uses: actions/checkout@v6
1616

1717
- name: Run markdownlint-cli2
18-
uses: DavidAnson/markdownlint-cli2-action@v23
18+
uses: DavidAnson/markdownlint-cli2-action@ce4853d43830c74c1753b39f3cf40f71c2031eb9 # v23
1919
with:
2020
globs: |
2121
'**/*.md'

.github/workflows/release-trigger.yml

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,23 +139,40 @@ jobs:
139139
git push origin "${{ steps.version.outputs.tag }}"
140140
echo "Branch ${{ env.branch }} and tag ${{ steps.version.outputs.tag }} pushed"
141141
142+
- name: Bump to dev version
143+
id: dev_version
144+
run: |
145+
IFS='.' read -r MAJOR MINOR PATCH <<< "${{ steps.version.outputs.version }}"
146+
NEXT_DEV="$MAJOR.$MINOR.$((PATCH + 1)).dev0"
147+
echo "dev_version=$NEXT_DEV" >> $GITHUB_OUTPUT
148+
sed -i "s/version = \".*\"/version = \"$NEXT_DEV\"/" pyproject.toml
149+
git add pyproject.toml
150+
if git diff --cached --quiet; then
151+
echo "No dev version changes to commit"
152+
else
153+
git commit -m "chore: begin $NEXT_DEV development"
154+
git push origin "${{ env.branch }}"
155+
echo "Bumped to dev version $NEXT_DEV"
156+
fi
157+
142158
- name: Open pull request
143159
env:
144160
GITHUB_TOKEN: ${{ secrets.RELEASE_PAT }}
145161
run: |
146162
gh pr create \
147163
--base main \
148164
--head "${{ env.branch }}" \
149-
--title "chore: bump version to ${{ steps.version.outputs.version }}" \
150-
--body "Automated version bump to ${{ steps.version.outputs.version }}.
165+
--title "chore: release ${{ steps.version.outputs.version }}, begin ${{ steps.dev_version.outputs.dev_version }} development" \
166+
--body "Automated release of ${{ steps.version.outputs.version }}.
151167
152168
This PR was created by the Release Trigger workflow. The git tag \`${{ steps.version.outputs.tag }}\` has already been pushed and the release artifacts are being built.
153169
154-
Merge this PR to record the version bump and changelog update on \`main\`."
170+
Merging this PR will set \`main\` to \`${{ steps.dev_version.outputs.dev_version }}\` so that development installs are clearly marked as pre-release."
155171
156172
- name: Summary
157173
run: |
158174
echo "✅ Version bumped to ${{ steps.version.outputs.version }}"
159175
echo "✅ Tag ${{ steps.version.outputs.tag }} created and pushed"
176+
echo "✅ Dev version set to ${{ steps.dev_version.outputs.dev_version }}"
160177
echo "✅ PR opened to merge version bump into main"
161178
echo "🚀 Release workflow is building artifacts from the tag"

.github/workflows/release.yml

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,35 +27,63 @@ jobs:
2727
- name: Check if release already exists
2828
id: check_release
2929
run: |
30-
chmod +x .github/workflows/scripts/check-release-exists.sh
31-
.github/workflows/scripts/check-release-exists.sh ${{ steps.version.outputs.tag }}
30+
VERSION="${{ steps.version.outputs.tag }}"
31+
if gh release view "$VERSION" >/dev/null 2>&1; then
32+
echo "exists=true" >> $GITHUB_OUTPUT
33+
echo "Release $VERSION already exists, skipping..."
34+
else
35+
echo "exists=false" >> $GITHUB_OUTPUT
36+
echo "Release $VERSION does not exist, proceeding..."
37+
fi
3238
env:
3339
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3440

35-
- name: Create release package variants
36-
if: steps.check_release.outputs.exists == 'false'
37-
run: |
38-
chmod +x .github/workflows/scripts/create-release-packages.sh
39-
.github/workflows/scripts/create-release-packages.sh ${{ steps.version.outputs.tag }}
40-
4141
- name: Generate release notes
4242
if: steps.check_release.outputs.exists == 'false'
43-
id: release_notes
4443
run: |
45-
chmod +x .github/workflows/scripts/generate-release-notes.sh
46-
# Get the previous tag for changelog generation
47-
PREVIOUS_TAG=$(git describe --tags --abbrev=0 ${{ steps.version.outputs.tag }}^ 2>/dev/null || echo "")
48-
# Default to v0.0.0 if no previous tag is found (e.g., first release)
44+
VERSION="${{ steps.version.outputs.tag }}"
45+
VERSION_NO_V=${VERSION#v}
46+
47+
# Find previous tag
48+
PREVIOUS_TAG=$(git tag -l 'v*' --sort=-version:refname | grep -v "^${VERSION}$" | head -n 1)
49+
if [ -z "$PREVIOUS_TAG" ]; then
50+
PREVIOUS_TAG=""
51+
fi
52+
53+
# Get commits since previous tag
4954
if [ -z "$PREVIOUS_TAG" ]; then
50-
PREVIOUS_TAG="v0.0.0"
55+
COMMIT_COUNT=$(git rev-list --count HEAD)
56+
if [ "$COMMIT_COUNT" -gt 20 ]; then
57+
COMMITS=$(git log --oneline --pretty=format:"- %s" --no-merges HEAD~20..HEAD)
58+
else
59+
COMMITS=$(git log --oneline --pretty=format:"- %s" --no-merges)
60+
fi
61+
else
62+
COMMITS=$(git log --oneline --pretty=format:"- %s" --no-merges "$PREVIOUS_TAG"..HEAD)
5163
fi
52-
.github/workflows/scripts/generate-release-notes.sh ${{ steps.version.outputs.tag }} "$PREVIOUS_TAG"
64+
65+
cat > release_notes.md << NOTES_EOF
66+
## Install
67+
68+
\`\`\`bash
69+
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@${VERSION}
70+
specify init my-project
71+
\`\`\`
72+
73+
NOTES_EOF
74+
75+
echo "## What's Changed" >> release_notes.md
76+
echo "" >> release_notes.md
77+
echo "$COMMITS" >> release_notes.md
5378
5479
- name: Create GitHub Release
5580
if: steps.check_release.outputs.exists == 'false'
5681
run: |
57-
chmod +x .github/workflows/scripts/create-github-release.sh
58-
.github/workflows/scripts/create-github-release.sh ${{ steps.version.outputs.tag }}
82+
VERSION="${{ steps.version.outputs.tag }}"
83+
VERSION_NO_V=${VERSION#v}
84+
gh release create "$VERSION" \
85+
--title "Spec Kit - $VERSION_NO_V" \
86+
--notes-file release_notes.md
5987
env:
6088
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6189

.github/workflows/scripts/check-release-exists.sh

Lines changed: 0 additions & 21 deletions
This file was deleted.

.github/workflows/scripts/create-github-release.sh

Lines changed: 0 additions & 72 deletions
This file was deleted.

0 commit comments

Comments
 (0)