Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save gh640/233a6daf68e9e937115371c0ecd39c61 to your computer and use it in GitHub Desktop.
Save gh640/233a6daf68e9e937115371c0ecd39c61 to your computer and use it in GitHub Desktop.
Sample: Use Python Poetry cache on GitHub Actions workflow
name: Use Python Poetry cache on GitHub Actions workflow
on:
push:
branches:
- main
env:
PYTHON_VERSION: "3.11"
POETRY_VERSION: "1.4.2"
POETRY_URL: https://install.python-poetry.org
jobs:
use_cache:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
id: setup_python
# Poetry cache depends on OS, Python version and Poetry version.
- name: Cache Poetry cache
uses: actions/cache@v3
with:
path: ~/.cache/pypoetry
key: poetry-cache-${{ runner.os }}-${{ steps.setup_python.outputs.python-version }}-${{ env.POETRY_VERSION }}
# virtualenv cache should depends on OS, Python version and `poetry.lock` (and optionally workflow files).
- name: Cache Packages
uses: actions/cache@v3
with:
path: ~/.local
key: poetry-local-${{ runner.os }}-${{ steps.setup_python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}-${{ hashFiles('.github/workflows/*.yml') }}
- name: Install Poetry ${{ env.POETRY_VERSION }}
run: |
curl -sSL ${{ env.POETRY_URL }} | python - --version ${{ env.POETRY_VERSION }}
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install Dependencies
run: poetry install
# Write actual actions here.
@gh640
Copy link
Author

gh640 commented Apr 7, 2023

I made a gist of a composite action to install Python and Poetry (that I use):

https://gist.github.com/gh640/317865611e39b93442579ed3cd4491ce

I hope this helps.

@hongbo-miao
Copy link

hongbo-miao commented Apr 7, 2023

Here is my current way with some small improvements 😃

    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Install Poetry
        run: |
          pipx install poetry
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
          cache: poetry
          cache-dependency-path: poetry.lock
      - name: Set Poetry environment
        run: |
          poetry env use 3.11
      - name: Install dependencies
        run: |
          poetry install --no-root
      - name: Run
        run: |
          poetry run xxx

@radzek15
Copy link

radzek15 commented Feb 28, 2024

@hongbo-miao thank you for sharing. I got an error when trying your code:
Installing dependencies from lock file pyproject.toml changed significantly since poetry.lock was last generated. Run poetry lock [--no-update] to fix the lock file.

So i just needed to add this small change:

        run: |
          poetry lock --no-update
          poetry install --no-root

@hongbo-miao
Copy link

You are welcome, @radzek15 ! However, you should run poetry lock --no-update locally and commit the change in your git instead of running in the CI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment