chore: align CI Python matrix with devguide lifecycle + fix bash 3.2 portability#3244
Open
mnriem wants to merge 2 commits into
Open
chore: align CI Python matrix with devguide lifecycle + fix bash 3.2 portability#3244mnriem wants to merge 2 commits into
mnriem wants to merge 2 commits into
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Aligns Spec Kit’s declared Python support policy and documentation with the Python release lifecycle by lowering the minimum supported version to 3.10 and tightening CI coverage to current bugfix (maintenance) releases.
Changes:
- Lowered
requires-pythonto>=3.10(pyproject + PEP 723 script header). - Updated CI test matrix to run on Python 3.13/3.14 across ubuntu/windows/macos.
- Updated user and contributor docs to state “Python 3.10+”.
Show a summary per file
| File | Description |
|---|---|
src/specify_cli/__init__.py |
Updates the embedded PEP 723 requires-python header to 3.10+. |
pyproject.toml |
Lowers package requires-python floor to >=3.10. |
.github/workflows/test.yml |
Moves pytest matrix to Python 3.13/3.14 and adds macOS to the OS matrix. |
README.md |
Updates prerequisites to “Python 3.10+”. |
docs/installation.md |
Updates install prerequisites to “Python 3.10+”. |
docs/install/air-gapped.md |
Updates offline install note to “Python 3.10+”. |
CONTRIBUTING.md |
Updates contributor prerequisites to “Python 3.10+”. |
Review details
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 7/7 changed files
- Comments generated: 1
- Review effort level: Low
Comment on lines
4
to
8
| description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)." | ||
| readme = "README.md" | ||
| requires-python = ">=3.11" | ||
| requires-python = ">=3.10" | ||
| dependencies = [ | ||
| "typer>=0.24.0", |
Run the pytest matrix only on the bugfix (maintenance) releases — 3.13 and 3.14 — instead of 3.11/3.12/3.13, and point the ruff lint job at the latest interpreter (3.14). The supported floor stays at requires-python >= 3.11 (oldest non-EOL security release): older security versions are supported by claim and fixed reactively rather than gated on a wide per-commit matrix. Also add macos-latest to the OS matrix so macOS regressions are caught. Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adding macos-latest to the CI matrix surfaced two pre-existing bash 3.2
incompatibilities (macOS ships bash 3.2 as /bin/bash):
1. update-agent-context.sh embedded Python heredocs inside $(...) command
substitution. bash 3.2 mis-parses an apostrophe in a heredoc body
nested in $(...), failing with "unexpected EOF while looking for
matching `''". Removed the apostrophes from the affected $()-nested
heredoc body and documented the constraint to prevent regressions.
2. create-new-feature-branch.sh and create-new-feature.sh used the
bash 4+ ${word^^} uppercase parameter expansion, which errors as a
"bad substitution" on bash 3.2 and caused short uppercase acronyms
(e.g. "GO") to be dropped from derived branch names. Replaced with a
portable `tr '[:lower:]' '[:upper:]'` pipeline.
Verified the full test suite passes under bash 3.2.57 and shellcheck
(--severity=error) is clean.
Assisted-by: GitHub Copilot (model: Claude Opus 4.8, autonomous)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
55d749e to
fdaaa98
Compare
| if [ ${#word} -ge 3 ]; then | ||
| meaningful_words+=("$word") | ||
| elif echo "$description" | grep -q "\b${word^^}\b"; then | ||
| elif echo "$description" | grep -q "\b$(printf '%s' "$word" | tr '[:lower:]' '[:upper:]')\b"; then |
Comment on lines
123
to
127
| # Self-seed: the agent-context extension owns its lifecycle, so when its | ||
| # own config declares no target it derives one from the active integration | ||
| # recorded in init-options.json, using the extension's OWN bundled mapping | ||
| # recorded in init-options.json, using the OWN bundled mapping of the | ||
| # agent-context extension | ||
| # (agent-context-defaults.json). This is independent of the Specify CLI by |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Aligns Spec Kit's CI Python matrix with the Python release lifecycle, and fixes the bash 3.2 (macOS) portability issues this surfaced.
Policy:
requires-python = ">=3.11"— the oldest non-EOL security release. Security-only versions (3.11, 3.12) are supported by claim and fixed reactively, not gated on a wide per-commit matrix. (No change topyproject.toml— upstream already requires 3.11.)3.13and3.14— which are the versions most likely to surface real differences.rufflint job points at the latest interpreter (3.14) so packaging/lint is exercised on the newest release.macos-latestto the OS matrix (now ubuntu/windows/macos × 3.13/3.14) so macOS regressions are caught.bash 3.2 portability fixes
Adding
macos-latestsurfaced two pre-existing incompatibilities with bash 3.2, which macOS still ships as the system/bin/bash:update-agent-context.shembeds Python heredocs inside$(...)command substitution. bash 3.2 mis-parses an apostrophe in a heredoc body nested in$(...), failing with anunexpected EOFquote-matching error. Removed the apostrophes from the affected$()-nested heredoc body and documented the constraint inline to prevent regressions.create-new-feature-branch.shandcreate-new-feature.shused the bash 4+${word^^}uppercase expansion, which errors as a bad substitution on bash 3.2 and caused short uppercase acronyms (e.g.GO) to be dropped from derived branch names. Replaced with a portabletr '[:lower:]' '[:upper:]'pipeline.Validation
bash→/bin/bash).shellcheck --severity=errorclean on all changed scripts..shfiles parse under bash 3.2 (bash -n).Notes
This PR was prepared by GitHub Copilot (model: Claude Opus 4.8) on behalf of @mnriem.