Skip to content

Commit 019c671

Browse files
authored
Merge branch 'main' into fix/qwen-markdown-format
2 parents ee2257f + 5c0bedb commit 019c671

40 files changed

+3127
-254
lines changed

.devcontainer/devcontainer.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@
5050
"kilocode.Kilo-Code",
5151
// Roo Code
5252
"RooVeterinaryInc.roo-cline",
53-
// Amazon Developer Q
54-
"AmazonWebServices.amazon-q-vscode",
5553
// Claude Code
5654
"anthropic.claude-code"
5755
],

.devcontainer/post-create.sh

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -51,32 +51,33 @@ echo -e "\n🤖 Installing OpenCode CLI..."
5151
run_command "npm install -g opencode-ai@latest"
5252
echo "✅ Done"
5353

54-
echo -e "\n🤖 Installing Amazon Q CLI..."
55-
# 👉🏾 https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-verify-download.html
56-
57-
run_command "curl --proto '=https' --tlsv1.2 -sSf 'https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip' -o 'q.zip'"
58-
run_command "curl --proto '=https' --tlsv1.2 -sSf 'https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip.sig' -o 'q.zip.sig'"
59-
cat > amazonq-public-key.asc << 'EOF'
60-
-----BEGIN PGP PUBLIC KEY BLOCK-----
61-
62-
mDMEZig60RYJKwYBBAHaRw8BAQdAy/+G05U5/EOA72WlcD4WkYn5SInri8pc4Z6D
63-
BKNNGOm0JEFtYXpvbiBRIENMSSBUZWFtIDxxLWNsaUBhbWF6b24uY29tPoiZBBMW
64-
CgBBFiEEmvYEF+gnQskUPgPsUNx6jcJMVmcFAmYoOtECGwMFCQPCZwAFCwkIBwIC
65-
IgIGFQoJCAsCBBYCAwECHgcCF4AACgkQUNx6jcJMVmef5QD/QWWEGG/cOnbDnp68
66-
SJXuFkwiNwlH2rPw9ZRIQMnfAS0A/0V6ZsGB4kOylBfc7CNfzRFGtovdBBgHqA6P
67-
zQ/PNscGuDgEZig60RIKKwYBBAGXVQEFAQEHQC4qleONMBCq3+wJwbZSr0vbuRba
68-
D1xr4wUPn4Avn4AnAwEIB4h+BBgWCgAmFiEEmvYEF+gnQskUPgPsUNx6jcJMVmcF
69-
AmYoOtECGwwFCQPCZwAACgkQUNx6jcJMVmchMgEA6l3RveCM0YHAGQaSFMkguoAo
70-
vK6FgOkDawgP0NPIP2oA/jIAO4gsAntuQgMOsPunEdDeji2t+AhV02+DQIsXZpoB
71-
=f8yY
72-
-----END PGP PUBLIC KEY BLOCK-----
73-
EOF
74-
run_command "gpg --batch --import amazonq-public-key.asc"
75-
run_command "gpg --verify q.zip.sig q.zip"
76-
run_command "unzip -q q.zip"
77-
run_command "chmod +x ./q/install.sh"
78-
run_command "./q/install.sh --no-confirm"
79-
run_command "rm -rf ./q q.zip q.zip.sig amazonq-public-key.asc"
54+
echo -e "\n🤖 Installing Kiro CLI..."
55+
# https://kiro.dev/docs/cli/
56+
KIRO_INSTALLER_URL="https://cli.kiro.dev/install"
57+
KIRO_INSTALLER_SHA256="7487a65cf310b7fb59b357c4b5e6e3f3259d383f4394ecedb39acf70f307cffb"
58+
KIRO_INSTALLER_PATH="$(mktemp)"
59+
60+
cleanup_kiro_installer() {
61+
rm -f "$KIRO_INSTALLER_PATH"
62+
}
63+
trap cleanup_kiro_installer EXIT
64+
65+
run_command "curl -fsSL \"$KIRO_INSTALLER_URL\" -o \"$KIRO_INSTALLER_PATH\""
66+
run_command "echo \"$KIRO_INSTALLER_SHA256 $KIRO_INSTALLER_PATH\" | sha256sum -c -"
67+
68+
run_command "bash \"$KIRO_INSTALLER_PATH\""
69+
70+
kiro_binary=""
71+
if command -v kiro-cli >/dev/null 2>&1; then
72+
kiro_binary="kiro-cli"
73+
elif command -v kiro >/dev/null 2>&1; then
74+
kiro_binary="kiro"
75+
else
76+
echo -e "\033[0;31m[ERROR] Kiro CLI installation did not create 'kiro-cli' or 'kiro' in PATH.\033[0m" >&2
77+
exit 1
78+
fi
79+
80+
run_command "$kiro_binary --help > /dev/null"
8081
echo "✅ Done"
8182

8283
echo -e "\n🤖 Installing CodeBuddy CLI..."

.github/ISSUE_TEMPLATE/agent_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ body:
88
value: |
99
Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
1010
11-
**Currently supported agents**: Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, Windsurf, Kilo Code, Auggie CLI, Roo Code, CodeBuddy, Qoder CLI, Amazon Q Developer CLI, Amp, SHAI, IBM Bob, Antigravity
11+
**Currently supported agents**: Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, Windsurf, Kilo Code, Auggie CLI, Roo Code, CodeBuddy, Qoder CLI, Kiro CLI, Amp, SHAI, IBM Bob, Antigravity
1212
1313
- type: input
1414
id: agent-name

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ body:
7575
- Roo Code
7676
- CodeBuddy
7777
- Qoder CLI
78-
- Amazon Q Developer CLI
78+
- Kiro CLI
7979
- Amp
8080
- SHAI
8181
- IBM Bob

.github/ISSUE_TEMPLATE/feature_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ body:
6969
- Roo Code
7070
- CodeBuddy
7171
- Qoder CLI
72-
- Amazon Q Developer CLI
72+
- Kiro CLI
7373
- Amp
7474
- SHAI
7575
- IBM Bob
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
# Release Process
2+
3+
This document describes the automated release process for Spec Kit.
4+
5+
## Overview
6+
7+
The release process is split into two workflows to ensure version consistency:
8+
9+
1. **Release Trigger Workflow** (`release-trigger.yml`) - Manages versioning and triggers release
10+
2. **Release Workflow** (`release.yml`) - Builds and publishes artifacts
11+
12+
This separation ensures that git tags always point to commits with the correct version in `pyproject.toml`.
13+
14+
## Before Creating a Release
15+
16+
**Important**: Write clear, descriptive commit messages!
17+
18+
### How CHANGELOG.md Works
19+
20+
The CHANGELOG is **automatically generated** from your git commit messages:
21+
22+
1. **During Development**: Write clear, descriptive commit messages:
23+
```bash
24+
git commit -m "feat: Add new authentication feature"
25+
git commit -m "fix: Resolve timeout issue in API client (#123)"
26+
git commit -m "docs: Update installation instructions"
27+
```
28+
29+
2. **When Releasing**: The release trigger workflow automatically:
30+
- Finds all commits since the last release tag
31+
- Formats them as changelog entries
32+
- Inserts them into CHANGELOG.md
33+
- Commits the updated changelog before creating the new tag
34+
35+
### Commit Message Best Practices
36+
37+
Good commit messages make good changelogs:
38+
- **Be descriptive**: "Add user authentication" not "Update files"
39+
- **Reference issues/PRs**: Include `(#123)` for automated linking
40+
- **Use conventional commits** (optional): `feat:`, `fix:`, `docs:`, `chore:`
41+
- **Keep it concise**: One line is ideal, details go in commit body
42+
43+
**Example commits that become good changelog entries:**
44+
```
45+
fix: prepend YAML frontmatter to Cursor .mdc files (#1699)
46+
feat: add generic agent support with customizable command directories (#1639)
47+
docs: document dual-catalog system for extensions (#1689)
48+
```
49+
50+
## Creating a Release
51+
52+
### Option 1: Auto-Increment (Recommended for patches)
53+
54+
1. Go to **Actions****Release Trigger**
55+
2. Click **Run workflow**
56+
3. Leave the version field **empty**
57+
4. Click **Run workflow**
58+
59+
The workflow will:
60+
- Auto-increment the patch version (e.g., `0.1.10``0.1.11`)
61+
- Update `pyproject.toml`
62+
- Update `CHANGELOG.md` by adding a new section for the release based on commits since the last tag
63+
- Commit changes to a `chore/release-vX.Y.Z` branch
64+
- Create and push the git tag from that branch
65+
- Open a PR to merge the version bump into `main`
66+
- Trigger the release workflow automatically via the tag push
67+
68+
### Option 2: Manual Version (For major/minor bumps)
69+
70+
1. Go to **Actions****Release Trigger**
71+
2. Click **Run workflow**
72+
3. Enter the desired version (e.g., `0.2.0` or `v0.2.0`)
73+
4. Click **Run workflow**
74+
75+
The workflow will:
76+
- Use your specified version
77+
- Update `pyproject.toml`
78+
- Update `CHANGELOG.md` by adding a new section for the release based on commits since the last tag
79+
- Commit changes to a `chore/release-vX.Y.Z` branch
80+
- Create and push the git tag from that branch
81+
- Open a PR to merge the version bump into `main`
82+
- Trigger the release workflow automatically via the tag push
83+
84+
## What Happens Next
85+
86+
Once the release trigger workflow completes:
87+
88+
1. A `chore/release-vX.Y.Z` branch is pushed with the version bump commit
89+
2. The git tag is pushed, pointing to that commit
90+
3. The **Release Workflow** is automatically triggered by the tag push
91+
4. Release artifacts are built for all supported agents
92+
5. A GitHub Release is created with all assets
93+
6. A PR is opened to merge the version bump branch into `main`
94+
95+
> **Note**: Merge the auto-opened PR after the release is published to keep `main` in sync.
96+
97+
## Workflow Details
98+
99+
### Release Trigger Workflow
100+
101+
**File**: `.github/workflows/release-trigger.yml`
102+
103+
**Trigger**: Manual (`workflow_dispatch`)
104+
105+
**Permissions Required**: `contents: write`
106+
107+
**Steps**:
108+
1. Checkout repository
109+
2. Determine version (manual or auto-increment)
110+
3. Check if tag already exists (prevents duplicates)
111+
4. Create `chore/release-vX.Y.Z` branch
112+
5. Update `pyproject.toml`
113+
6. Update `CHANGELOG.md` from git commits
114+
7. Commit changes
115+
8. Push branch and tag
116+
9. Open PR to merge version bump into `main`
117+
118+
### Release Workflow
119+
120+
**File**: `.github/workflows/release.yml`
121+
122+
**Trigger**: Tag push (`v*`)
123+
124+
**Permissions Required**: `contents: write`
125+
126+
**Steps**:
127+
1. Checkout repository at tag
128+
2. Extract version from tag name
129+
3. Check if release already exists
130+
4. Build release package variants (all agents × shell/powershell)
131+
5. Generate release notes from commits
132+
6. Create GitHub Release with all assets
133+
134+
## Version Constraints
135+
136+
- Tags must follow format: `v{MAJOR}.{MINOR}.{PATCH}`
137+
- Example valid versions: `v0.1.11`, `v0.2.0`, `v1.0.0`
138+
- Auto-increment only bumps patch version
139+
- Cannot create duplicate tags (workflow will fail)
140+
141+
## Benefits of This Approach
142+
143+
**Version Consistency**: Git tags point to commits with matching `pyproject.toml` version
144+
145+
**Single Source of Truth**: Version set once, used everywhere
146+
147+
**Prevents Drift**: No more manual version synchronization needed
148+
149+
**Clean Separation**: Versioning logic separate from artifact building
150+
151+
**Flexibility**: Supports both auto-increment and manual versioning
152+
153+
## Troubleshooting
154+
155+
### No Commits Since Last Release
156+
157+
If you run the release trigger workflow when there are no new commits since the last tag:
158+
- The workflow will still succeed
159+
- The CHANGELOG will show "- Initial release" if it's the first release
160+
- Or it will be empty if there are no commits
161+
- Consider adding meaningful commits before releasing
162+
163+
**Best Practice**: Use descriptive commit messages - they become your changelog!
164+
165+
### Tag Already Exists
166+
167+
If you see "Error: Tag vX.Y.Z already exists!", you need to:
168+
- Choose a different version number, or
169+
- Delete the existing tag if it was created in error
170+
171+
### Release Workflow Didn't Trigger
172+
173+
Check that:
174+
- The release trigger workflow completed successfully
175+
- The tag was pushed (check repository tags)
176+
- The release workflow is enabled in Actions settings
177+
178+
### Version Mismatch
179+
180+
If `pyproject.toml` doesn't match the latest tag:
181+
- Run the release trigger workflow to sync versions
182+
- Or manually update `pyproject.toml` and push changes before running the release trigger
183+
184+
## Legacy Behavior (Pre-v0.1.10)
185+
186+
Before this change, the release workflow:
187+
- Created tags automatically on main branch pushes
188+
- Updated `pyproject.toml` AFTER creating the tag
189+
- Resulted in tags pointing to commits with outdated versions
190+
191+
This has been fixed in v0.1.10+.

0 commit comments

Comments
 (0)