Files
skill-seekers-reference/.github/workflows/tests.yml
yusyus 0c9504c944 fix(ci): rename summary job to 'Tests' to match branch protection rule
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.
2026-03-15 01:39:58 +03:00

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!"