Test Commit #32
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: Test Commit | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| commit: | |
| description: "Commit SHA to test" | |
| required: true | |
| type: string | |
| os: | |
| description: "Operating system to run on" | |
| required: false | |
| default: "ubuntu-latest" | |
| type: choice | |
| options: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| python_version: | |
| description: "Python version" | |
| required: false | |
| default: "3.13" | |
| type: string | |
| run_lint: | |
| description: "Run ruff check" | |
| required: false | |
| default: true | |
| type: boolean | |
| run_format: | |
| description: "Run ruff format check" | |
| required: false | |
| default: true | |
| type: boolean | |
| run_typecheck: | |
| description: "Run mypy type checking" | |
| required: false | |
| default: true | |
| type: boolean | |
| test_command: | |
| description: "Pytest command (empty to skip tests)" | |
| required: false | |
| default: "pytest --tb=short" | |
| type: string | |
| env: | |
| FORCE_COLOR: 1 | |
| RUFF_OUTPUT_FORMAT: github | |
| COLUMNS: 120 | |
| jobs: | |
| lint: | |
| name: Lint (ruff) | |
| if: ${{ inputs.run_lint }} | |
| runs-on: ${{ inputs.os }} | |
| continue-on-error: true | |
| outputs: | |
| result: ${{ steps.lint.outcome }} | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ inputs.commit }} | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ inputs.python_version }} | |
| - name: Check for code issues (ruff check) | |
| id: lint | |
| uses: astral-sh/ruff-action@v3 | |
| format: | |
| name: Format (ruff) | |
| if: ${{ inputs.run_format }} | |
| runs-on: ${{ inputs.os }} | |
| continue-on-error: true | |
| outputs: | |
| result: ${{ steps.format.outcome }} | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ inputs.commit }} | |
| fetch-depth: 0 | |
| - name: Check code format (ruff format) | |
| id: format | |
| uses: astral-sh/ruff-action@v3 | |
| with: | |
| args: "format --check" | |
| typecheck: | |
| name: Type Check (mypy) | |
| if: ${{ inputs.run_typecheck }} | |
| runs-on: ${{ inputs.os }} | |
| continue-on-error: true | |
| outputs: | |
| result: ${{ steps.typecheck.outcome }} | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ inputs.commit }} | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ inputs.python_version }} | |
| - name: Install dependencies | |
| run: uv sync --all-extras --no-group lint | |
| - name: Static type checking (mypy) | |
| id: typecheck | |
| run: uv run --no-group docs mypy src/ | |
| test: | |
| name: Test (pytest) | |
| if: ${{ inputs.test_command != '' }} | |
| runs-on: ${{ inputs.os }} | |
| continue-on-error: true | |
| outputs: | |
| result: ${{ steps.test.outcome }} | |
| steps: | |
| - name: Check out repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: ${{ inputs.commit }} | |
| fetch-depth: 0 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v7 | |
| with: | |
| enable-cache: true | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ inputs.python_version }} | |
| - name: Install dependencies | |
| run: uv sync --all-extras --no-group lint | |
| - name: Run tests | |
| id: test | |
| env: | |
| OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} | |
| OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} | |
| run: uv run --no-group docs ${{ inputs.test_command }} | |
| report: | |
| name: Report Results | |
| runs-on: ubuntu-latest | |
| needs: [lint, format, typecheck, test] | |
| if: always() | |
| steps: | |
| - name: Summary | |
| run: | | |
| echo "## Test Results for commit ${{ inputs.commit }}" >> $GITHUB_STEP_SUMMARY | |
| echo "**OS:** ${{ inputs.os }} | **Python:** ${{ inputs.python_version }}" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Check | Result |" >> $GITHUB_STEP_SUMMARY | |
| echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY | |
| if [ "${{ inputs.run_lint }}" == "true" ]; then | |
| echo "| Lint (ruff check) | ${{ needs.lint.outputs.result }} |" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "| Lint (ruff check) | skipped |" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| if [ "${{ inputs.run_format }}" == "true" ]; then | |
| echo "| Format (ruff format) | ${{ needs.format.outputs.result }} |" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "| Format (ruff format) | skipped |" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| if [ "${{ inputs.run_typecheck }}" == "true" ]; then | |
| echo "| Type Check (mypy) | ${{ needs.typecheck.outputs.result }} |" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "| Type Check (mypy) | skipped |" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| if [ -n "${{ inputs.test_command }}" ]; then | |
| echo "| Tests (\`${{ inputs.test_command }}\`) | ${{ needs.test.outputs.result }} |" >> $GITHUB_STEP_SUMMARY | |
| else | |
| echo "| Tests (pytest) | skipped |" >> $GITHUB_STEP_SUMMARY | |
| fi |