diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 256328de7..a8591d2dd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,38 +2,74 @@ name: Test Suite on: push: - branches: [ main, nightly ] + branches: [main, nightly] pull_request: - branches: [ main, nightly ] + branches: [main, nightly] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read jobs: + lint: + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.14" + + - name: Install uv + uses: astral-sh/setup-uv@v4 + with: + enable-cache: true + cache-dependency-glob: "uv.lock" + + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y libolm-dev build-essential + + - name: Install dependencies + run: uv sync --all-extras + + - name: Lint with ruff + run: uv run ruff check nanobot --select F + test: + needs: lint runs-on: ${{ matrix.os }} + timeout-minutes: 20 strategy: + fail-fast: false matrix: - os: [ubuntu-latest, windows-latest] - python-version: ["3.11", "3.12", "3.13", "3.14"] + os: ${{ github.event_name == 'pull_request' && fromJSON('["ubuntu-latest"]') || fromJSON('["ubuntu-latest","windows-latest"]') }} + python-version: ${{ github.event_name == 'pull_request' && fromJSON('["3.11","3.14"]') || fromJSON('["3.11","3.12","3.13","3.14"]') }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} - - name: Install uv - uses: astral-sh/setup-uv@v4 + - name: Install uv + uses: astral-sh/setup-uv@v4 + with: + enable-cache: true + cache-dependency-glob: "uv.lock" - - name: Install system dependencies (Linux) - if: runner.os == 'Linux' - run: sudo apt-get update && sudo apt-get install -y libolm-dev build-essential + - name: Install system dependencies (Linux) + if: runner.os == 'Linux' + run: sudo apt-get update && sudo apt-get install -y libolm-dev build-essential - - name: Install dependencies - run: uv sync --all-extras + - name: Install dependencies + run: uv sync --all-extras - - name: Lint with ruff - run: uv run ruff check nanobot --select F - - - name: Run tests - run: uv run pytest tests/ + - name: Run tests + run: uv run pytest tests/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7c9fe5f9e..de3b3676f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -134,6 +134,20 @@ In practice: - Prefer focused patches over broad rewrites - If a new abstraction is introduced, it should clearly reduce complexity rather than move it around +## Modifying CI Workflows + +If your PR touches `.github/workflows/`, please keep the CI within +GitHub Actions' free tier: + +- Use only standard GitHub-hosted runners (`ubuntu-latest`, `windows-latest`) +- Avoid macOS runners, larger runners (`*-cores`, `*-xlarge`, `*-gpu`), + and self-hosted runners +- Avoid uploading large artifacts or using long retention +- Avoid paid Marketplace actions + +If your change genuinely needs to step outside this, please call it out +explicitly in the PR description so it can be discussed before merge. + ## Questions? If you have questions, ideas, or half-formed insights, you are warmly welcome here.