Skip to content

chore: release v0.23.1 (#369) #803

chore: release v0.23.1 (#369)

chore: release v0.23.1 (#369) #803

Workflow file for this run

name: ci
on:
push:
branches: [main]
pull_request:
permissions:
contents: read
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
- name: Ruff check
run: python -m ruff check .
- name: Ruff format
run: python -m ruff format --check .
- name: Mypy
run: python -m mypy
- name: Version sync
run: python scripts/version_sync.py --check
- name: Managed snapshot
run: python scripts/managed_snapshot.py --check
test:
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python }}
- name: Install
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
- name: Pytest
if: matrix.python != '3.12'
run: python -m pytest -q
- name: Pytest with coverage gate
if: matrix.python == '3.12'
run: python -m pytest -q --cov=brigade --cov-report=term --cov-fail-under=78
component-manifest-provenance:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Verify component manifest provenance
run: python scripts/verify_component_manifest_provenance.py
env:
GITHUB_TOKEN: ${{ github.token }}
content-guard:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
path: brigade
- uses: actions/checkout@v5
with:
repository: solomonneas/content-guard
ref: v0.1.1
path: content-guard
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Scan
run: |
cd brigade
PYTHONPATH=../content-guard/src python -m content_guard scan . \
--policy ../content-guard/policies/public-repo.json
repo-metadata:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
- name: Command Inventory
run: brigade roadmap commands --check
env:
BRIGADE_EXTRAS: "1"
- name: Template Audit
run: brigade security template-audit --target . --json
install-from-source:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
combo:
- name: "repo+claude"
flags: "--depth repo --harnesses claude"
- name: "repo+codex"
flags: "--depth repo --harnesses codex"
- name: "workspace+claude+openclaw"
flags: "--depth workspace --harnesses claude,openclaw"
- name: "workspace+codex+openclaw"
flags: "--depth workspace --harnesses codex,openclaw"
- name: "workspace+hermes"
flags: "--depth workspace --harnesses hermes"
- name: "kitchen-sink"
flags: "--depth workspace --harnesses claude,codex,openclaw,hermes"
- name: "workspace+none"
flags: "--depth workspace --harnesses none"
- name: "repo+claude+publisher"
flags: "--depth repo --harnesses claude --include publisher"
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: pipx install
run: |
python -m pip install --upgrade pip pipx
pipx install .
brigade --version
- name: Init + doctor
run: |
target="$(mktemp -d)"
git init -q -b main "$target"
brigade init --target "$target" ${{ matrix.combo.flags }}
brigade doctor --target "$target"
case "${{ matrix.combo.flags }}" in
*hermes*)
test -f "$target/.hermes/memory-handoffs/TEMPLATE.md"
test -d "$target/.hermes/memory-handoffs/processed"
test -f "$target/.brigade/hermes/workspace.harness.json"
test -f "$target/.brigade/hermes/memory-handoff.harness.json"
grep -q '"handoff_inbox": ".hermes/memory-handoffs"' "$target/.brigade/hermes/workspace.harness.json"
grep -q '"inbox_dir": ".hermes/memory-handoffs"' "$target/.brigade/hermes/memory-handoff.harness.json"
! grep -R '.claude/memory-handoffs' "$target/.brigade/hermes"
brigade handoff sources init --target "$target" --force
brigade handoff draft --target "$target" --inbox hermes \
--title "Hermes CI smoke" \
--summary "Hermes can write a local Brigade handoff." \
--content "### Hermes CI smoke
The Hermes inbox follows the shared Brigade handoff contract."
brigade operator verify-harness --harness hermes --target "$target"
;;
esac
quickstart-smoke:
name: quickstart-smoke (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: pipx install
run: |
python -m pip install --upgrade pip pipx
pipx install .
brigade --version
- name: Quickstart (minimal default, Linux/macOS)
if: runner.os != 'Windows'
run: |
target="$(mktemp -d)"
git init -q -b main "$target"
brigade operator quickstart --target "$target" --harnesses codex --json
brigade operator doctor --target "$target" --profile local-operator --json
test -f "$target/.brigade/config.json"
test -d "$target/.codex/memory-handoffs"
test -f "$target/.codex/skills/brigade-work/SKILL.md"
test -f "$target/AGENTS.md"
test ! -e "$target/tools"
test ! -e "$target/rules"
test ! -e "$target/INSTALL_FOR_AGENTS.md"
- name: Quickstart (minimal default, PowerShell)
if: runner.os == 'Windows'
shell: pwsh
run: |
$target = Join-Path $env:RUNNER_TEMP "brigade-quickstart-minimal"
git init -q -b main $target
brigade operator quickstart --target $target --harnesses codex --json
brigade operator doctor --target $target --profile local-operator --json
if (-not (Test-Path (Join-Path $target ".brigade/config.json"))) { throw "missing Brigade config" }
if (-not (Test-Path (Join-Path $target ".codex/memory-handoffs"))) { throw "missing Codex handoff inbox" }
if (-not (Test-Path (Join-Path $target ".codex/skills/brigade-work/SKILL.md"))) { throw "missing brigade-work skill" }
if (-not (Test-Path (Join-Path $target "AGENTS.md"))) { throw "missing AGENTS.md" }
if (Test-Path (Join-Path $target "tools")) { throw "minimal install unexpectedly created tools" }
if (Test-Path (Join-Path $target "rules")) { throw "minimal install unexpectedly created rules" }
if (Test-Path (Join-Path $target "INSTALL_FOR_AGENTS.md")) { throw "minimal install unexpectedly created full-kit guide" }
- name: Quickstart (--full, Linux/macOS)
if: runner.os != 'Windows'
run: |
target="$(mktemp -d)"
git init -q -b main "$target"
brigade operator quickstart --target "$target" --harnesses codex --full --json
brigade operator doctor --target "$target" --profile local-operator --json
test -f "$target/.codex/skills/frontend/SKILL.md"
test -f "$target/tools/antislop.md"
test -f "$target/INSTALL_FOR_AGENTS.md"
test -f "$target/rules/issue-tdd-loop.md"
- name: Quickstart (--full, PowerShell)
if: runner.os == 'Windows'
shell: pwsh
run: |
$target = Join-Path $env:RUNNER_TEMP "brigade-quickstart-full"
git init -q -b main $target
brigade operator quickstart --target $target --harnesses codex --full --json
brigade operator doctor --target $target --profile local-operator --json
if (-not (Test-Path (Join-Path $target ".codex/skills/frontend/SKILL.md"))) { throw "missing frontend skill" }
if (-not (Test-Path (Join-Path $target "tools/antislop.md"))) { throw "missing antislop tool" }
if (-not (Test-Path (Join-Path $target "INSTALL_FOR_AGENTS.md"))) { throw "missing full-kit guide" }
if (-not (Test-Path (Join-Path $target "rules/issue-tdd-loop.md"))) { throw "missing issue/TDD rule" }