diff --git a/.github/workflows/create_cache.yml b/.github/workflows/create_cache.yml new file mode 100644 index 00000000..c3cdcea2 --- /dev/null +++ b/.github/workflows/create_cache.yml @@ -0,0 +1,44 @@ +name: "Create GHA cache" + +# GitHub puts the following restrictions on cache sharing. PRs can access +# +# - caches that were created by the PR / earlier runs of the PR +# - caches that were created on the target branch +# +# To get effective cache sharing between PRs, we create caches on the `develop` +# branch (which is where almost all PRs merge into). + +on: + push: + branches: [develop] + +# Cancel running jobs if there's a newer push +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + # GitHub Actions cache of the pre-commit environment + pre-commit: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Setup Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - uses: actions/cache@v4 + id: cache + with: + path: ~/.cache/pre-commit + key: pre-commit_${{ env.pythonLocation }}_${{ hashFiles('.pre-commit-config.yaml') }} + lookup-only: true # don't actually download the cache + + - name: Populate pre-commit environment (if not cached) + if: steps.cache.outputs.cache-hit != 'true' + run: | + pip install pre-commit + pre-commit install --install-hooks diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 4e0cfc16..aee1d8e2 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -17,14 +17,20 @@ jobs: with: submodules: 'recursive' - - name: Step Python 3.11.9 + - name: Step Python 3.11 uses: actions/setup-python@v5 with: - python-version: '3.11.9' + python-version: '3.11' + + # Only restore (don't save) caches on PRs. New caches created from PRs won't be + # accessible from other PRs, see workflows/create-cache.yaml. + - uses: actions/cache/restore@v4 + with: + path: ~/.cache/pre-commit + key: pre-commit_${{ env.pythonLocation }}_${{ hashFiles('.pre-commit-config.yaml') }} - name: Install pre-commit run: pip install pre-commit - name: Run lint via pre-commit - run: | - pre-commit run --all-files + run: pre-commit run --all-files