Skip to content

docs(content): PR A — sidebar IA fix + community page #89

docs(content): PR A — sidebar IA fix + community page

docs(content): PR A — sidebar IA fix + community page #89

Workflow file for this run

name: CI Baseline
on:
pull_request:
paths:
- "src/**"
- "tests/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/ci.yml"
- "**/*.md"
- "**/*.json"
- "**/*.yml"
- "**/*.yaml"
- "**/*.sh"
- ".pre-commit-config.yaml"
- ".yamllint"
- ".markdownlint.jsonc"
push:
branches:
- main
- "release/**"
paths:
- "src/**"
- "tests/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/ci.yml"
- "**/*.md"
- "**/*.json"
- "**/*.yml"
- "**/*.yaml"
- "**/*.sh"
- ".pre-commit-config.yaml"
- ".yamllint"
- ".markdownlint.jsonc"
permissions:
contents: read
pull-requests: read
concurrency:
group: ci-baseline-${{ github.ref }}
cancel-in-progress: true
env:
# Force JS actions onto Node 24 ahead of the June 2026 GHA default flip.
# Several third-party actions still target Node 20; remove this once the
# ecosystem fully catches up.
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
# Pin pre-commit so CI matches what devs run locally. Bump alongside
# repo conventions.
PRE_COMMIT_VERSION: "4.5.1"
jobs:
changes:
name: Detect changed scopes
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
src: ${{ steps.filter.outputs.src }}
shell: ${{ steps.filter.outputs.shell }}
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Evaluate changed paths
id: filter
uses: dorny/paths-filter@6852f92c20ea7fd3b0c25de3b5112db3a98da050 # v3
with:
token: ""
list-files: csv
filters: |
src:
- "src/**"
- "tests/**"
- "pyproject.toml"
- "uv.lock"
- ".github/workflows/ci.yml"
shell:
- "**/*.sh"
- ".github/workflows/ci.yml"
pre-commit-quality-gates:
name: Pre-commit quality gates
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.11"
cache: pip
- name: Cache pre-commit environments
uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys: |
pre-commit-${{ runner.os }}-
- name: Install pre-commit
run: python -m pip install "pre-commit==${{ env.PRE_COMMIT_VERSION }}"
- name: Run pre-commit hooks
run: pre-commit run --all-files --show-diff-on-failure
python-tests:
name: Python tests (${{ matrix.python-version }})
runs-on: ubuntu-latest
timeout-minutes: 15
needs: changes
if: needs.changes.outputs.src == 'true'
strategy:
fail-fast: false
matrix:
python-version: ["3.11", "3.12", "3.13"]
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Set up uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
enable-cache: true
cache-dependency-glob: "**/uv.lock"
- name: Install dependencies
run: |
uv sync --group dev --group test
uv pip install pytest-cov
- name: Run pytest with coverage
run: |
uv run pytest -q \
--cov=src --cov-report=term-missing --cov-report=xml
- name: Upload coverage XML
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-${{ matrix.python-version }}
path: coverage.xml
if-no-files-found: warn
shell-script-sanity:
name: Shell script sanity
runs-on: ubuntu-latest
timeout-minutes: 5
needs: changes
if: needs.changes.outputs.shell == 'true'
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Install ShellCheck
run: sudo apt-get update && sudo apt-get install --yes shellcheck
- name: Run ShellCheck
run: |
mapfile -t shell_files < <(git ls-files '*.sh')
if [ "${#shell_files[@]}" -eq 0 ]; then
echo "No shell scripts found."
exit 0
fi
shellcheck "${shell_files[@]}"