name: ci on: push: branches: - main pull_request: branches: - main jobs: lint: name: Linter runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Poetry run: pipx install poetry - name: Setup Python id: setup-python uses: actions/setup-python@v4 with: python-version: '3.x' cache: poetry - name: Cache mypy cache uses: actions/cache@v3 with: path: .mypy_cache key: ${{ runner.os }}-mypy-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('poetry.lock') }} restore-keys: | ${{ runner.os }}-mypy-${{ steps.setup-python.outputs.python-version }}- ${{ runner.os }}-mypy- - name: Install linting requirements run: poetry install --no-root --with=linting --all-extras - name: Execute linters run: | poetry run black --check --diff . poetry run flake8 poetry run mypy poetry run pyright test: needs: - lint strategy: matrix: python: ["3.7", "3.8", "3.9", "3.10", "3.11"] fail-fast: false name: "Test on Python ${{ matrix.python }}" runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Poetry run: pipx install poetry - uses: actions/setup-python@v4 with: python-version: "${{ matrix.python }}" cache: poetry - name: Install testing requirements run: | poetry install --no-root --with=dev --all-extras - name: Execute tests env: PYTHONDEVMODE: '1' run: poetry run pytest test-summary: name: Test matrix status runs-on: ubuntu-latest needs: [test] if: always() steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }}