fix(cli): eliminate YAML install friction and guarantee command coverage #4
Workflow file for this run
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
| name: Roster Health | |
| # Runs nightly and on changes to roster/index.yaml to verify every | |
| # Eidolon in the roster is EIIS-conformant and reachable. | |
| on: | |
| push: | |
| paths: | |
| - 'roster/**' | |
| - 'cli/**' | |
| - 'schemas/**' | |
| - '.github/workflows/roster-health.yml' | |
| pull_request: | |
| paths: | |
| - 'roster/**' | |
| - 'cli/**' | |
| - 'schemas/**' | |
| schedule: | |
| # Nightly at 03:00 UTC — catches upstream Eidolon repos going bad | |
| - cron: '0 3 * * *' | |
| workflow_dispatch: | |
| jobs: | |
| validate-roster: | |
| name: Validate roster schema | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y jq | |
| # mikefarah/yq | |
| sudo wget -qO /usr/local/bin/yq \ | |
| https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 | |
| sudo chmod +x /usr/local/bin/yq | |
| - name: Validate roster/index.yaml structure | |
| run: | | |
| set -euo pipefail | |
| yq eval '.' roster/index.yaml > /tmp/roster.json | |
| # Every entry must have required fields | |
| for name in $(jq -r '.eidolons[].name' /tmp/roster.json); do | |
| echo "Validating $name..." | |
| jq -e --arg n "$name" '.eidolons[] | select(.name == $n) | | |
| .methodology.name and .methodology.version and .methodology.cycle and | |
| .source.repo and | |
| .versions.latest and | |
| .handoffs.upstream and .handoffs.downstream' \ | |
| /tmp/roster.json > /dev/null || { echo "::error::$name missing required fields"; exit 1; } | |
| done | |
| - name: Validate JSON schemas themselves | |
| run: | | |
| for schema in schemas/*.json; do | |
| echo "Checking $schema is valid JSON..." | |
| jq empty "$schema" | |
| done | |
| check-eidolon-repos: | |
| name: Check every Eidolon repo is reachable and EIIS-conformant | |
| runs-on: ubuntu-latest | |
| needs: validate-roster | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| eidolon: [atlas, spectra, apivr, idg, forge] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y jq | |
| sudo wget -qO /usr/local/bin/yq \ | |
| https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 | |
| sudo chmod +x /usr/local/bin/yq | |
| - name: Resolve repo for ${{ matrix.eidolon }} | |
| id: resolve | |
| run: | | |
| REPO=$(yq -r ".eidolons[] | select(.name == \"${{ matrix.eidolon }}\") | .source.repo" roster/index.yaml) | |
| STATUS=$(yq -r ".eidolons[] | select(.name == \"${{ matrix.eidolon }}\") | .status" roster/index.yaml) | |
| echo "repo=$REPO" >> "$GITHUB_OUTPUT" | |
| echo "status=$STATUS" >> "$GITHUB_OUTPUT" | |
| - name: Skip in-construction Eidolons | |
| if: steps.resolve.outputs.status == 'in_construction' | |
| run: echo "::notice::${{ matrix.eidolon }} is in_construction — skipping conformance check" | |
| - name: Clone ${{ matrix.eidolon }} | |
| if: steps.resolve.outputs.status == 'shipped' | |
| run: | | |
| git clone --depth 1 "https://github.com/${{ steps.resolve.outputs.repo }}" /tmp/eidolon | |
| - name: EIIS conformance check | |
| if: steps.resolve.outputs.status == 'shipped' | |
| run: | | |
| set -euo pipefail | |
| required=(AGENTS.md CLAUDE.md install.sh agent.md README.md) | |
| missing=() | |
| for f in "${required[@]}"; do | |
| [[ -f "/tmp/eidolon/$f" ]] || missing+=("$f") | |
| done | |
| if (( ${#missing[@]} > 0 )); then | |
| echo "::error::${{ matrix.eidolon }} missing EIIS-required files: ${missing[*]}" | |
| exit 1 | |
| fi | |
| echo "::notice::${{ matrix.eidolon }} passes basic EIIS-1.0 checks" | |
| - name: Verify install.sh exits cleanly with --help | |
| if: steps.resolve.outputs.status == 'shipped' | |
| run: | | |
| cd /tmp/eidolon | |
| bash install.sh --help > /dev/null | |
| # CLI smoke testing has moved to .github/workflows/ci.yml (install-e2e + | |
| # cli-tests jobs, which cover every command across Ubuntu and macOS with | |
| # bats). This workflow now focuses on its namesake: verifying the roster | |
| # itself is valid and every upstream Eidolon repo is reachable + EIIS- | |
| # conformant (runs on path-filtered pushes and nightly). |