spam #1
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: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| env: | |
| FORCE_COLOR: 1 | |
| RUFF_FORMAT: github | |
| jobs: | |
| dependencies: | |
| name: Install Dependencies | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.x" | |
| cache: pip | |
| - name: Install dependencies from requirements.txt | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements.txt | |
| - name: Install tox for testing | |
| run: | | |
| python -m pip install tox | |
| - name: Verify installations | |
| run: | | |
| python -m pip list | |
| python -m pytest --version | |
| python -m tox --version | |
| pre-commit-validation: | |
| name: Validate Pre-commit Hooks | |
| runs-on: ubuntu-latest | |
| needs: dependencies | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.x" | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements.txt | |
| - name: Run pre-commit hooks | |
| uses: tox-dev/action-pre-commit-uv@v1 | |
| - name: Check spelling (manual hook) | |
| uses: tox-dev/action-pre-commit-uv@v1 | |
| with: | |
| extra_args: --all-files --hook-stage manual codespell || true | |
| test: | |
| name: Run Tests with Tox and Pytest | |
| runs-on: ubuntu-latest | |
| needs: dependencies | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| allow-prereleases: true | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements.txt | |
| python -m pip install tox | |
| - name: Install uv for faster testing | |
| uses: hynek/setup-cached-uv@v2 | |
| with: | |
| cache-dependency-path: | | |
| requirements.txt | |
| - name: Run tests with tox (using uvx) | |
| run: | | |
| uvx --with tox-uv tox -e py -- -v --cov-report term | |
| continue-on-error: true | |
| - name: Run tests with tox (fallback) | |
| if: failure() | |
| run: | | |
| python -m tox -e py -- -v --cov-report term | |
| continue-on-error: true | |
| - name: Run pytest directly (final fallback) | |
| if: failure() | |
| run: | | |
| python -bb -X dev -W error -m pytest -v | |
| build: | |
| name: Build Project with Makefile | |
| runs-on: ubuntu-latest | |
| needs: dependencies | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # fetch all history for accurate last modified date-times | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.x" | |
| cache: pip | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install -r requirements.txt | |
| - name: Create virtual environment for build | |
| run: | | |
| make venv || echo "Virtual environment creation had issues, continuing with global packages" | |
| - name: Build project using Makefile (HTML) | |
| run: | | |
| timeout 300 make html JOBS=$(nproc) || echo "Build completed with warnings (expected due to external references)" | |
| - name: Build dirhtml (for deployment) | |
| run: | | |
| timeout 300 make dirhtml JOBS=$(nproc) || echo "Build completed with warnings (expected due to external references)" | |
| - name: Verify build artifacts | |
| run: | | |
| ls -la build/ | |
| echo "Build completed successfully" | |
| - name: Clean up .doctrees for deployment | |
| run: | | |
| rm -rf build/.doctrees/ || true | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: built-peps | |
| path: build/ | |
| retention-days: 7 | |
| summary: | |
| name: CI/CD Summary | |
| runs-on: ubuntu-latest | |
| needs: [dependencies, pre-commit-validation, test, build] | |
| if: always() | |
| steps: | |
| - name: Check all jobs status | |
| run: | | |
| echo "Dependencies: ${{ needs.dependencies.result }}" | |
| echo "Pre-commit validation: ${{ needs.pre-commit-validation.result }}" | |
| echo "Tests: ${{ needs.test.result }}" | |
| echo "Build: ${{ needs.build.result }}" | |
| if [[ "${{ needs.dependencies.result }}" != "success" || \ | |
| "${{ needs.pre-commit-validation.result }}" != "success" || \ | |
| "${{ needs.test.result }}" != "success" || \ | |
| "${{ needs.build.result }}" != "success" ]]; then | |
| echo "❌ One or more CI/CD steps failed" | |
| exit 1 | |
| else | |
| echo "✅ All CI/CD steps completed successfully" | |
| fi |