name: Validate skills on: push: branches: [main] pull_request: permissions: contents: read jobs: validate: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: '3.3' - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install Python validator dependencies run: python3 -m pip install -r requirements-dev.txt - name: Validate skill format and links run: ruby scripts/validate-skills.rb - name: Test eval manifest validation run: python3 scripts/test-eval-validation.py - name: Validate eval manifests run: python3 scripts/validate-evals.py - name: Test life-coach capability validation run: python3 -m unittest discover -s life-coach/tests -p 'test_*.py' - name: Test changed-skill quality validation run: ruby scripts/test-validate-skill-quality.rb - name: Validate changed skill quality env: SKILL_QUALITY_BASE: ${{ github.event.pull_request.base.sha || github.event.before }} run: ruby scripts/validate-skill-quality.rb --base "$SKILL_QUALITY_BASE" - name: Check tracked repository artifacts run: python3 scripts/check-artifacts.py - name: Validate Claude Code marketplace run: ruby scripts/gen-claude-marketplace.rb - name: Validate Codex plugin packaging run: ruby scripts/gen-codex-plugin.rb - name: Test eval coverage ratchet run: python3 scripts/test-eval-coverage.py - name: Report eval coverage run: python3 scripts/eval-coverage.py - name: Enforce eval coverage ratchet env: EVAL_RATCHET_BASE: ${{ github.event.pull_request.base.sha || github.event.before }} run: python3 scripts/eval-coverage.py --modified-from "$EVAL_RATCHET_BASE" - name: Test llms.txt generator run: ruby scripts/test-gen-llms-txt.rb - name: Validate llms.txt catalog run: ruby scripts/gen-llms-txt.rb - name: Build tracked Python packages run: | wheel_dir=$(mktemp -d) while IFS= read -r pyproject; do python3 -m pip wheel --no-deps "./$(dirname "$pyproject")" --wheel-dir "$wheel_dir" done < <(git ls-files -- ':(glob)**/pyproject.toml')