The branch protection requires a status check named 'Tests', but GitHub reports checks using job names, not the workflow name. The summary job was named 'All Checks Complete' which never satisfied the required check, leaving PRs permanently stuck as 'Expected — Waiting for status to be reported'. Fix: rename the summary job from 'All Checks Complete' to 'Tests' so it matches the required status check exactly.
130 lines
3.7 KiB
YAML
130 lines
3.7 KiB
YAML
name: Tests
|
|
|
|
on:
|
|
push:
|
|
branches: [ main, development ]
|
|
pull_request:
|
|
branches: [ main, development ]
|
|
|
|
jobs:
|
|
lint:
|
|
name: Code Quality (Ruff & Mypy)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- name: Set up Python 3.12
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install ruff mypy
|
|
pip install -e .
|
|
|
|
- name: Run ruff linter
|
|
run: |
|
|
echo "Running ruff check..."
|
|
ruff check src/ tests/ --output-format=github
|
|
|
|
- name: Run ruff formatter check
|
|
run: |
|
|
echo "Checking code formatting..."
|
|
ruff format --check src/ tests/
|
|
|
|
- name: Run mypy type checker
|
|
run: |
|
|
echo "Running mypy type checker..."
|
|
mypy src/skill_seekers --show-error-codes --pretty
|
|
continue-on-error: true # Don't fail CI on mypy errors initially
|
|
|
|
test:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-latest, macos-latest]
|
|
python-version: ['3.10', '3.11', '3.12']
|
|
exclude:
|
|
# Exclude some combinations to speed up CI
|
|
- os: macos-latest
|
|
python-version: '3.10'
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
submodules: recursive # Initialize api/configs_repo submodule
|
|
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Install uv
|
|
run: |
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
|
|
- name: Cache pip packages
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', 'skill_seeker_mcp/requirements.txt') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pip-
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r requirements.txt
|
|
if [ -f skill_seeker_mcp/requirements.txt ]; then pip install -r skill_seeker_mcp/requirements.txt; fi
|
|
# Install package in editable mode for tests (required for src/ layout)
|
|
pip install -e .
|
|
|
|
- name: Run CLI tests
|
|
run: |
|
|
python -m pytest tests/test_scraper_features.py -v
|
|
python -m pytest tests/test_config_validation.py -v
|
|
python -m pytest tests/test_integration.py -v
|
|
|
|
- name: Run MCP server tests
|
|
run: |
|
|
python -m pytest tests/test_mcp_server.py -v
|
|
|
|
- name: Generate coverage report
|
|
run: |
|
|
python -m pytest tests/ --cov=src/skill_seekers --cov-report=xml --cov-report=term
|
|
|
|
- name: Upload coverage to Codecov
|
|
uses: codecov/codecov-action@v3
|
|
with:
|
|
file: ./coverage.xml
|
|
flags: unittests
|
|
name: codecov-umbrella
|
|
fail_ci_if_error: false
|
|
|
|
# Summary job that provides a single status check for branch protection.
|
|
# The job name MUST match the required status check in the branch
|
|
# protection rules. GitHub reports status checks using job names
|
|
# (not the workflow name), so the required check "Tests" will only
|
|
# be satisfied if a job with exactly that name exists and succeeds.
|
|
tests-complete:
|
|
name: Tests
|
|
needs: [lint, test]
|
|
runs-on: ubuntu-latest
|
|
if: always()
|
|
steps:
|
|
- name: Check all results
|
|
run: |
|
|
if [ "${{ needs.lint.result }}" != "success" ]; then
|
|
echo "❌ Code quality checks failed!"
|
|
exit 1
|
|
fi
|
|
if [ "${{ needs.test.result }}" != "success" ]; then
|
|
echo "❌ Tests failed!"
|
|
exit 1
|
|
fi
|
|
echo "✅ All checks passed!"
|