Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,34 @@ permissions:
contents: read

jobs:
node-compatibility:
name: Node ${{ matrix.node-version }} compatibility
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ['20', '22']

steps:
- name: Check out repository
uses: actions/checkout@v6

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: 10.13.1

- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Verify build, templates, and CLI behavior
run: pnpm run build && pnpm test && bash tests/cli-ux-smoke.sh

repository-hygiene:
name: Repository hygiene
runs-on: ubuntu-latest
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release-dry-run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ jobs:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/setup-node@v5
with:
node-version: 22
- uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false
- uses: actions/setup-node@v5
with:
node-version: 22
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install ReleaseBox
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ jobs:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- uses: actions/setup-node@v5
with:
node-version: 22
registry-url: https://registry.npmjs.org
- uses: pnpm/action-setup@v4
with:
version: 10.13.1
run_install: false
- uses: actions/setup-node@v5
with:
node-version: 22
registry-url: https://registry.npmjs.org
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Install ReleaseBox
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ format and uses semantic versioning when versioned releases are published.

### Changed

- Upgraded Commander to 14.0.3, the newest release compatible with the Node.js
20 runtime floor, and added Node.js 20 and 22 CLI compatibility coverage.
- Aligned template terminology, placeholder documentation, and current V1
surface area across docs, templates, and workflows.
- Expanded the optional docs-site template with clearer setup guidance and a
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
Agent-friendly software project scaffolding CLI for apps, APIs, CLIs, and OSS
packages.

StackForge requires Node.js 20 or newer. Its build, template checks, and CLI
smoke tests run in CI on both Node.js 20 and the primary Node.js 22 runtime.

## Status

Early build. StackForge is release-scoped as a CLI-first tool first, with
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"package:smoke": "pnpm run build && node scripts/package-smoke.mjs"
},
"dependencies": {
"commander": "^12.1.0"
"commander": "^14.0.3"
},
"devDependencies": {
"@types/node": "^22.10.2",
Expand Down
12 changes: 6 additions & 6 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions tests/cli-ux-smoke.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ assert_empty_file templates.err
assert_json_file templates.json
assert_field templates.json "Array.isArray(data.templates) && data.templates.some((template) => template.key === 'oss-cli')"

if node "$cli" templates --not-an-option > invalid-option.out 2> invalid-option.err; then
fail "unknown option succeeded"
fi
assert_empty_file invalid-option.out
grep -Fq "unknown option '--not-an-option'" invalid-option.err \
|| fail "unknown option error did not identify the rejected option"

node "$cli" init oss-cli smoke-app --dry-run > dry-run.json 2> dry-run.err
assert_empty_file dry-run.err
assert_json_file dry-run.json
Expand Down
Loading