--- name: CI on: push: branches: ["main"] 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: ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "pypy-2.7", "pypy-3.7"] steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" 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 - name: "Run tox targets for ${{ matrix.python-version }}" run: "python -m tox" - name: Upload coverage data uses: "actions/upload-artifact@v2" with: name: coverage-data path: ".coverage.*" if-no-files-found: ignore coverage: runs-on: "ubuntu-latest" needs: tests steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: # Use latest Python, so it understands all syntax. python-version: ${{env.PYTHON_LATEST}} - name: Install Coverage.py run: python -m pip install --upgrade coverage[toml] - name: Download coverage data uses: actions/download-artifact@v2 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 for failed check uses: actions/upload-artifact@v2 with: name: html-report path: htmlcov if: ${{ failure() }} package: name: "Build & verify package" runs-on: "ubuntu-latest" steps: - uses: "actions/checkout@v2" - uses: "actions/setup-python@v2" 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@v2" - uses: "actions/setup-python@v2" with: python-version: ${{env.PYTHON_LATEST}} - run: "python -m pip install -e .[dev]" - name: "Import package" run: "python -c 'import attr; print(attr.__version__)'"