mirror of
https://github.com/hwchase17/langchain
synced 2024-11-06 03:20:49 +00:00
c75e1aa5ed
The previous approach was relying on `_test.yml` taking an input parameter, and then doing almost completely orthogonal things for each parameter value. I've separated out each of those test situations as its own job or workflow file, which eliminated all the special-casing and, in my opinion, improved maintainability by making it much more obvious what code runs when.
77 lines
2.8 KiB
YAML
77 lines
2.8 KiB
YAML
name: pydantic v1/v2 compatibility
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
working-directory:
|
|
required: true
|
|
type: string
|
|
description: "From which folder this pipeline executes"
|
|
|
|
env:
|
|
POETRY_VERSION: "1.5.1"
|
|
|
|
jobs:
|
|
build:
|
|
defaults:
|
|
run:
|
|
working-directory: ${{ inputs.working-directory }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version:
|
|
- "3.8"
|
|
- "3.9"
|
|
- "3.10"
|
|
- "3.11"
|
|
name: Pydantic v1/v2 compatibility - Python ${{ matrix.python-version }}
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Set up Python ${{ matrix.python-version }}
|
|
uses: "./.github/actions/poetry_setup"
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
working-directory: ${{ inputs.working-directory }}
|
|
poetry-version: ${{ env.POETRY_VERSION }}
|
|
cache-key: pydantic-cross-compat
|
|
install-command: poetry install
|
|
- name: Install the opposite major version of pydantic
|
|
# If normal tests use pydantic v1, here we'll use v2, and vice versa.
|
|
shell: bash
|
|
run: |
|
|
# Determine the major part of pydantic version
|
|
REGULAR_VERSION=$(poetry run python -c "import pydantic; print(pydantic.__version__)" | cut -d. -f1)
|
|
|
|
if [[ "$REGULAR_VERSION" == "1" ]]; then
|
|
PYDANTIC_DEP=">=2.1,<3"
|
|
TEST_WITH_VERSION="2"
|
|
elif [[ "$REGULAR_VERSION" == "2" ]]; then
|
|
PYDANTIC_DEP="<2"
|
|
TEST_WITH_VERSION="1"
|
|
else
|
|
echo "Unexpected pydantic major version '$REGULAR_VERSION', cannot determine which version to use for cross-compatibility test."
|
|
exit 1
|
|
fi
|
|
|
|
# Install via `pip` instead of `poetry add` to avoid changing lockfile,
|
|
# which would prevent caching from working: the cache would get saved
|
|
# to a different key than where it gets loaded from.
|
|
poetry run pip install "pydantic${PYDANTIC_DEP}"
|
|
|
|
# Ensure that the correct pydantic is installed now.
|
|
echo "Checking pydantic version... Expecting ${TEST_WITH_VERSION}"
|
|
|
|
# Determine the major part of pydantic version
|
|
CURRENT_VERSION=$(poetry run python -c "import pydantic; print(pydantic.__version__)" | cut -d. -f1)
|
|
|
|
# Check that the major part of pydantic version is as expected, if not
|
|
# raise an error
|
|
if [[ "$CURRENT_VERSION" != "$TEST_WITH_VERSION" ]]; then
|
|
echo "Error: expected pydantic version ${CURRENT_VERSION} to have been installed, but found: ${TEST_WITH_VERSION}"
|
|
exit 1
|
|
fi
|
|
echo "Found pydantic version ${CURRENT_VERSION}, as expected"
|
|
- name: Run pydantic compatibility tests
|
|
shell: bash
|
|
run: make test
|