# An action for setting up poetry install with caching. # Using a custom action since the default action does not # take poetry install groups into account. # Action code from: # https://github.com/actions/setup-python/issues/505#issuecomment-1273013236 name: poetry-install-with-caching description: Poetry install with support for caching of dependency groups. inputs: python-version: description: Python version, supporting MAJOR.MINOR only required: true poetry-version: description: Poetry version required: true cache-key: description: Cache key to use for manual handling of caching required: true working-directory: description: Directory whose poetry.lock file should be cached required: true runs: using: composite steps: - uses: actions/setup-python@v4 name: Setup python $${ inputs.python-version }} with: python-version: ${{ inputs.python-version }} - uses: actions/cache@v3 id: cache-bin-poetry name: Cache Poetry binary - Python ${{ inputs.python-version }} env: SEGMENT_DOWNLOAD_TIMEOUT_MIN: "1" with: path: | /opt/pipx/venvs/poetry /opt/pipx_bin/poetry # This step caches the poetry installation, so make sure it's keyed on the poetry version as well. key: bin-poetry-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-${{ inputs.poetry-version }} - name: Install poetry if: steps.cache-bin-poetry.outputs.cache-hit != 'true' shell: bash env: POETRY_VERSION: ${{ inputs.poetry-version }} PYTHON_VERSION: ${{ inputs.python-version }} run: pipx install "poetry==$POETRY_VERSION" --python "python$PYTHON_VERSION" --verbose - name: Restore pip and poetry cached dependencies uses: actions/cache@v3 env: SEGMENT_DOWNLOAD_TIMEOUT_MIN: "4" WORKDIR: ${{ inputs.working-directory == '' && '.' || inputs.working-directory }} with: path: | ~/.cache/pip ~/.cache/pypoetry/virtualenvs ~/.cache/pypoetry/cache ~/.cache/pypoetry/artifacts ${{ env.WORKDIR }}/.venv key: py-deps-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-poetry-${{ inputs.poetry-version }}-${{ inputs.cache-key }}-${{ hashFiles(format('{0}/**/poetry.lock', env.WORKDIR)) }}