Last active
February 28, 2024 19:35
-
-
Save gh640/233a6daf68e9e937115371c0ecd39c61 to your computer and use it in GitHub Desktop.
Sample: Use Python Poetry cache on GitHub Actions workflow
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
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.
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
@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
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
There are also 2 different maintained actions you can use to install / setup Poetry:
https://github.com/Gr1N/setup-poetry
https://github.com/snok/install-poetry
(They are pretty similar in functionality.)