Skip to content

Commit e4a2e71

Browse files
Consolidate CI, add end-to-end pipeline demo, fix agentmd lint:isolint
- Replace three per-package CI workflows with a single `ci.yml` covering isolint's Node compat matrix and a unified build/test/dogfood job; update the iso-harness release gate to track the new check-run name. - Add `examples/pipeline/` — one authored `agent.md` flows through agentmd lint/render, isolint lint, and iso-harness build to produce the 11 files each coding-agent harness expects. Exposed as `npm run test:pipeline` and wired into CI so the monorepo's thesis stays provable. - Repoint `@razroo/agentmd`'s `lint:isolint` at the sibling workspace instead of a global binary, and render to a file since `isolint lint` does not read stdin. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 805695b commit e4a2e71

15 files changed

Lines changed: 281 additions & 222 deletions

File tree

.github/workflows/agentmd-ci.yml

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

.github/workflows/ci.yml

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
branches: [main]
6+
push:
7+
branches: [main]
8+
9+
permissions:
10+
contents: read
11+
security-events: write
12+
13+
jobs:
14+
isolint-compat:
15+
name: isolint compat (Node ${{ matrix.node }})
16+
runs-on: ubuntu-latest
17+
strategy:
18+
fail-fast: false
19+
matrix:
20+
node: ["18.17", "20", "22"]
21+
steps:
22+
- uses: actions/checkout@v5
23+
24+
- uses: actions/setup-node@v5
25+
with:
26+
node-version: ${{ matrix.node }}
27+
cache: npm
28+
29+
- run: npm ci
30+
31+
- run: npm run typecheck --workspace @razroo/isolint
32+
33+
- run: npm test --workspace @razroo/isolint
34+
35+
- run: npm run build --workspace @razroo/isolint
36+
37+
build-test-lint:
38+
name: build-test-lint
39+
runs-on: ubuntu-latest
40+
steps:
41+
- uses: actions/checkout@v5
42+
43+
- uses: actions/setup-node@v5
44+
with:
45+
node-version: "22"
46+
cache: npm
47+
48+
- run: npm ci
49+
50+
- run: npm run typecheck --workspaces --if-present
51+
52+
- run: npm run test --workspaces --if-present
53+
54+
- run: npm run build --workspaces --if-present
55+
56+
- name: agentmd lint (examples)
57+
working-directory: packages/agentmd
58+
run: |
59+
node dist/cli.js lint examples/outreach-writer.md
60+
node dist/cli.js lint examples/minimal.md
61+
62+
- name: isolint lint (SARIF)
63+
working-directory: packages/isolint
64+
run: node dist/cli/index.js lint . --format sarif --fail-on warn > isolint.sarif
65+
continue-on-error: true
66+
67+
- name: Upload SARIF to GitHub code scanning
68+
if: always()
69+
uses: github/codeql-action/upload-sarif@v3
70+
with:
71+
sarif_file: packages/isolint/isolint.sarif
72+
category: isolint
73+
74+
- name: isolint lint (enforce)
75+
working-directory: packages/isolint
76+
run: node dist/cli/index.js lint . --fail-on error
77+
78+
- name: Pipeline integration (agentmd → isolint → iso-harness)
79+
run: node examples/pipeline/build.mjs
80+
81+
- name: iso-harness smoke build
82+
working-directory: packages/iso-harness
83+
run: npm run smoke
84+
85+
- name: Verify iso-harness expected output files exist
86+
run: |
87+
set -e
88+
OUT=/tmp/iso-harness-smoke
89+
for f in \
90+
"$OUT/CLAUDE.md" \
91+
"$OUT/.claude/agents/researcher.md" \
92+
"$OUT/.claude/commands/review.md" \
93+
"$OUT/.mcp.json" \
94+
"$OUT/.cursor/rules/main.mdc" \
95+
"$OUT/.cursor/mcp.json" \
96+
"$OUT/AGENTS.md" \
97+
"$OUT/.codex/config.toml" \
98+
"$OUT/opencode.json" \
99+
"$OUT/.opencode/agents/researcher.md" \
100+
"$OUT/.opencode/skills/review.md"
101+
do
102+
if [ ! -f "$f" ]; then
103+
echo "::error::missing expected output: $f"
104+
exit 1
105+
fi
106+
done
107+
echo "All 11 expected output files present."

.github/workflows/iso-harness-ci.yml

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

.github/workflows/iso-harness-release.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,34 +29,34 @@ jobs:
2929
VERSION="${GITHUB_REF_NAME#iso-harness-v}"
3030
echo "VERSION=$VERSION" >> $GITHUB_ENV
3131
32-
- name: Verify Quality checks passed for release commit
32+
- name: Verify CI build-test-lint passed for release commit
3333
env:
3434
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3535
working-directory: .
3636
run: |
3737
SHA=$(git rev-parse HEAD)
38-
echo "Verifying iso-harness quality check-run for $SHA"
38+
echo "Verifying CI build-test-lint check-run for $SHA"
3939
DEADLINE=$(( $(date +%s) + 1800 ))
4040
STATUS=""
4141
CONCLUSION=""
4242
while [ "$(date +%s)" -lt "$DEADLINE" ]; do
4343
read -r STATUS CONCLUSION <<<"$(gh api "repos/${{ github.repository }}/commits/$SHA/check-runs" \
44-
--jq '[.check_runs[] | select(.name == "quality")] | sort_by(.started_at) | last | "\(.status // "missing") \(.conclusion // "null")"')"
45-
echo "quality check-run: status=$STATUS conclusion=$CONCLUSION"
44+
--jq '[.check_runs[] | select(.name == "build-test-lint")] | sort_by(.started_at) | last | "\(.status // "missing") \(.conclusion // "null")"')"
45+
echo "build-test-lint check-run: status=$STATUS conclusion=$CONCLUSION"
4646
if [ "$STATUS" = "completed" ]; then
4747
break
4848
fi
4949
sleep 15
5050
done
5151
if [ "$STATUS" != "completed" ]; then
52-
echo "::error::Quality checks for $SHA never completed within 30min (last status: $STATUS)."
52+
echo "::error::CI build-test-lint for $SHA never completed within 30min (last status: $STATUS)."
5353
exit 1
5454
fi
5555
if [ "$CONCLUSION" != "success" ]; then
56-
echo "::error::Quality checks for $SHA did not succeed (conclusion: $CONCLUSION). Fix before re-releasing."
56+
echo "::error::CI build-test-lint for $SHA did not succeed (conclusion: $CONCLUSION). Fix before re-releasing."
5757
exit 1
5858
fi
59-
echo "Quality checks succeeded for $SHA"
59+
echo "CI build-test-lint succeeded for $SHA"
6060
6161
- name: Verify package.json version matches release tag
6262
run: npm run release:check-source -- "$VERSION"

.github/workflows/isolint-ci.yml

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

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,17 @@ npm install # install all workspace deps
8080
npm run build # build every package
8181
npm run test # run every package's tests
8282
npm run typecheck # typecheck every package
83+
npm run test:pipeline # end-to-end demo (agentmd → isolint → iso-harness)
8384

8485
# Target a single package
8586
npm run build --workspace @razroo/isolint
8687
npm run test --workspace @razroo/agentmd
8788
```
89+
90+
## End-to-end example
91+
92+
[`examples/pipeline/`](./examples/pipeline) is an executable demonstration
93+
of the composed pipeline: one authored `agent.md` is structurally linted,
94+
rendered, prose-linted, and fanned out into the 11 files each coding-agent
95+
harness expects. Run `npm run test:pipeline` to exercise all three packages
96+
against a single source.

examples/pipeline/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
iso-src/instructions.md
2+
out/

0 commit comments

Comments
 (0)