| --- |
| name: CI |
| |
| on: |
| push: |
| branches: ["main"] |
| tags: ["*"] |
| pull_request: |
| branches: ["main"] |
| workflow_dispatch: |
| |
| env: |
| FORCE_COLOR: "1" # Make tools pretty. |
| TOX_TESTENV_PASSENV: FORCE_COLOR |
| PYTHON_LATEST: "3.10" |
| |
| |
| jobs: |
| tests: |
| name: tox on ${{ matrix.python-version }} |
| runs-on: ubuntu-latest |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| python-version: ["3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "pypy-3.7", "pypy-3.8"] |
| |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v3 |
| with: |
| python-version: ${{ matrix.python-version }} |
| |
| - name: "Install dependencies" |
| run: | |
| python -VV |
| python -m site |
| python -m pip install --upgrade pip setuptools wheel |
| python -m pip install --upgrade virtualenv tox tox-gh-actions |
| |
| - run: "python -m tox" |
| |
| - name: Upload coverage data |
| uses: actions/upload-artifact@v3 |
| with: |
| name: coverage-data |
| path: ".coverage.*" |
| if-no-files-found: ignore |
| |
| |
| coverage: |
| runs-on: ubuntu-latest |
| needs: tests |
| |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v3 |
| with: |
| # Use latest Python, so it understands all syntax. |
| python-version: ${{env.PYTHON_LATEST}} |
| |
| - run: python -m pip install --upgrade coverage[toml] |
| |
| - name: Download coverage data |
| uses: actions/download-artifact@v3 |
| with: |
| name: coverage-data |
| |
| - name: Combine coverage and fail if it's <100%. |
| run: | |
| python -m coverage combine |
| python -m coverage html --skip-covered --skip-empty |
| python -m coverage report --fail-under=100 |
| |
| - name: Upload HTML report if check failed. |
| uses: actions/upload-artifact@v3 |
| with: |
| name: html-report |
| path: htmlcov |
| if: ${{ failure() }} |
| |
| |
| package: |
| name: Build & verify package |
| runs-on: ubuntu-latest |
| |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v3 |
| with: |
| python-version: ${{env.PYTHON_LATEST}} |
| |
| - run: python -m pip install build twine check-wheel-contents |
| - run: python -m build --sdist --wheel . |
| - run: ls -l dist |
| - run: check-wheel-contents dist/*.whl |
| - name: Check long_description |
| run: python -m twine check dist/* |
| |
| |
| install-dev: |
| name: Verify dev env |
| runs-on: ${{ matrix.os }} |
| strategy: |
| matrix: |
| os: ["ubuntu-latest", "windows-latest"] |
| |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v3 |
| with: |
| python-version: ${{env.PYTHON_LATEST}} |
| - run: python -m pip install -e .[dev] |
| - run: python -c 'import attr; print(attr.__version__)' |