# Most of this is inspired by the mypy primer # See: https://github.com/hauntsaninja/mypy_primer # This is the primer job that runs on the default 'main' branch # It is also responsible for caching the packages to prime on name: Primer / Main on: push: branches: - main concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: # This needs to be the SAME as in the PR and comment job CACHE_VERSION: 3 KEY_PREFIX: venv-primer permissions: contents: read jobs: run-primer: name: Run / ${{ matrix.python-version }} runs-on: ubuntu-latest timeout-minutes: 120 strategy: matrix: python-version: ["3.8", "3.11"] steps: - name: Check out code from GitHub uses: actions/checkout@v3.5.2 - name: Set up Python ${{ matrix.python-version }} id: python uses: actions/setup-python@v4.6.0 with: python-version: ${{ matrix.python-version }} check-latest: true # Create a re-usable virtual environment - name: Create Python virtual environment cache id: cache-venv uses: actions/cache@v3.3.1 with: path: venv key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{ env.KEY_PREFIX }}-${{ env.CACHE_VERSION }}-${{ hashFiles('pyproject.toml', 'requirements_test.txt', 'requirements_test_min.txt', 'requirements_test_pre_commit.txt') }} - name: Create Python virtual environment if: steps.cache-venv.outputs.cache-hit != 'true' run: | python -m venv venv . venv/bin/activate python -m pip install -U pip setuptools wheel pip install -U -r requirements_test.txt # Cache primer packages - name: Get commit string id: commitstring run: | . venv/bin/activate python tests/primer/__main__.py prepare --make-commit-string output=$(python tests/primer/__main__.py prepare --read-commit-string) echo "commitstring=$output" >> $GITHUB_OUTPUT - name: Restore projects cache id: cache-projects uses: actions/cache@v3.3.1 with: path: tests/.pylint_primer_tests/ key: >- ${{ runner.os }}-${{ matrix.python-version }}-${{ steps.commitstring.outputs.commitstring }}-primer - name: Regenerate cache run: | . venv/bin/activate python tests/primer/__main__.py prepare --clone - name: Upload output diff uses: actions/upload-artifact@v3.1.2 with: name: primer_commitstring path: tests/.pylint_primer_tests/commit_string_${{ matrix.python-version }}.txt # Run primer - name: Run pylint primer run: | . venv/bin/activate pip install -e . python tests/primer/__main__.py run --type=main 2>warnings.txt WARNINGS=$(head -c 65000 < warnings.txt) if [[ $WARNINGS ]] then echo "::warning ::$WARNINGS" fi - name: Upload output uses: actions/upload-artifact@v3.1.2 with: name: primer_output path: >- tests/.pylint_primer_tests/output_${{ steps.python.outputs.python-version }}_main.txt