name: Validate on: pull_request: push: branches: - master - main permissions: contents: read concurrency: group: validate-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: validate: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.11", "3.12", "3.13"] timeout-minutes: 15 steps: - name: Check out repository uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v5 with: enable-cache: true - name: Set up Python ${{ matrix.python-version }} run: uv python install ${{ matrix.python-version }} - name: Install dependencies and dev tools run: | uv venv --python ${{ matrix.python-version }} uv pip install -r requirements-dev.lock.txt ruff - name: Lint with ruff run: .venv/bin/ruff check . - name: Run tests run: .venv/bin/python -m pytest - name: Validate catalog run: .venv/bin/python tools/validate_catalog.py - name: Verify public JSON exports run: .venv/bin/python tools/export_catalog.py --check --target both - name: Verify browsable README indexes run: .venv/bin/python tools/render_readmes.py --check - name: Verify first-party content manifest run: .venv/bin/python tools/build_content_manifest.py --check - name: Verify runnable examples run: .venv/bin/python tools/verify_examples.py - name: Verify course folders run: .venv/bin/python tools/verify_courses.py - name: Verify learning-path contracts run: .venv/bin/python tools/verify_paths.py