mirror of
https://github.com/hwchase17/langchain
synced 2024-10-31 15:20:26 +00:00
83986ea98a
With this PR: - All lint and test jobs use the exact same Python + Poetry installation approach, instead of lints doing it one way and tests doing it another way. - The Poetry installation itself is cached, which saves ~15s per run. - We no longer pass shell commands as workflow arguments to a workflow that just runs them in a shell. This makes our actions more resilient to shell code injection. If y'all like this approach, I can modify the scheduled tests workflow and the release workflow to use this too.
67 lines
2.3 KiB
YAML
67 lines
2.3 KiB
YAML
# 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)) }}
|