Issue #109: Stop the test suite from provisioning billable AWS resources #214
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: Tests | |
| on: | |
| push: | |
| branches: [ master, main, develop ] | |
| pull_request: | |
| branches: [ master, main, develop ] | |
| permissions: | |
| contents: write | |
| pull-requests: read | |
| jobs: | |
| test: | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 15 | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
| exclude: | |
| # Reduce matrix size by excluding some combinations | |
| - os: windows-latest | |
| python-version: '3.8' | |
| - os: macos-latest | |
| python-version: '3.8' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev,test,kubernetes,widget]" | |
| # Linting is version-independent, so run it once on the primary target | |
| # rather than on all 13 matrix combinations. This also keeps the black pin | |
| # off Python 3.8, which black 25.1.0 does not support (see #110). | |
| - name: Lint with black | |
| if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' | |
| run: | | |
| black --check clustrix/ tests/ | |
| - name: Lint with flake8 | |
| if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' | |
| run: | | |
| flake8 clustrix/ tests/ --max-line-length=88 --extend-ignore=E203,W503,F401,E722,F541,F841,F811,E731,E501,W291,W293,F824 --exit-zero | |
| - name: Test with pytest | |
| run: | | |
| pytest tests/unit/ -v --cov=clustrix --cov-report=xml --cov-report=html --cov-report=term-missing --cov-report=json -m "not real_world" | |
| - name: Update coverage badge | |
| if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' && github.ref == 'refs/heads/master' | |
| run: | | |
| python .github/scripts/update_coverage_badge.py | |
| - name: Commit coverage badge update | |
| if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' && github.ref == 'refs/heads/master' | |
| run: | | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Action" | |
| git add README.md | |
| git diff --staged --quiet || git commit -m "Update coverage badge [skip ci]" | |
| git push | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Test installation | |
| run: | | |
| pip install . | |
| python -c "import clustrix; print('Clustrix installed successfully')" | |
| - name: Test CLI | |
| run: | | |
| clustrix --help | |
| clustrix config --help | |
| integration-test: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| needs: test | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev,test,kubernetes,widget]" | |
| - name: Run integration tests | |
| run: | | |
| # Run only local integration tests that don't require external resources | |
| pytest tests/ -k "integration and local and not (gpu or aws or azure or gcp or ssh or slurm or pbs or sge)" -v -x -m "not real_world" || true | |
| - name: Test example scripts | |
| run: | | |
| python -c " | |
| from clustrix import cluster, configure | |
| configure(cluster_host=None) # Local execution | |
| @cluster(cores=2) | |
| def test_example(): | |
| return sum(range(100)) | |
| result = test_example() | |
| assert result == 4950 | |
| print('Example test passed!') | |
| " | |
| docs-test: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.11 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.11' | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y pandoc | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[docs]" | |
| - name: Test documentation build | |
| run: | | |
| cd docs | |
| make html | |
| - name: Test notebook execution | |
| run: | | |
| pip install jupyter nbconvert | |
| jupyter nbconvert --to script docs/source/notebooks/basic_usage.ipynb | |
| # Note: Full notebook execution would require cluster setup |