skip to Main Content

I have a pretty simple step for CI on Github Actions, which is supposed to cache Python dependencies, so it would save a lot of computing time.

  some-step:
    name: 'Test step'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: pipx install poetry
      - name: Set up Python 3.8
        uses: actions/setup-python@v4
        with:
          python-version: "3.8"
          architecture: "x64"
          cache: "poetry"
      - name: Install dependencies
        run: poetry install
      - run: poetry run ...

Every time when I create a new PR, new cache is generated, even if dependencies didn’t change. As I found out it happens because of cache branch restrictions.

My question is how to create a common cache? Or how to remove branch restrictions?

I rarely have to rerun my actions, so this caching implementation doesn’t give any benefits.

2

Answers


  1. Chosen as BEST ANSWER

    I reused action (it's really light and does a simple check quickly) and created a new workflow, which runs on lock file changes in master or could be run manually.

    on:
      push:
        branches:
          - master
        paths:
          - 'poetry.lock'
      workflow_dispatch:
        inputs:
          logLevel:
            description: 'Log level'
            required: false
            default: 'warning'
            type: choice
            options:
              - info
              - warning
              - debug 
    jobs:  
        some-step:
            name: 'Test step'
            runs-on: ubuntu-latest
            steps:
              - uses: actions/checkout@v3
              - run: pipx install poetry
              - name: Set up Python 3.8
                uses: actions/setup-python@v4
                with:
                  python-version: "3.8"
                  architecture: "x64"
                  cache: "poetry"
              - name: Install dependencies
                run: poetry install
              - run: poetry run ...
    

  2. You get a new, completely new runner for every run, so you need to tell GitHub to store the cached files. You do so by using this action: https://github.com/actions/cache

    Then use indeed this as a cache key: which will not change as long as that file does not change: poetry-${{ hashFiles(‘poetry.lock’) }}

    With this action, the first run will generate the cache and upload them to GitHub. Then the next run will download the cache and the next steps can use the files from it.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search