Fix GitHub Actions workflows for CI/CD pipeline #209
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]" | |
| - name: Lint with black | |
| run: | | |
| black --check clustrix/ tests/ | |
| - name: Lint with flake8 | |
| 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 |