Skip to content

Commit

Permalink
fix: tests with Dockerfile (langchain-ai#2382)
Browse files Browse the repository at this point in the history
Update the Dockerfile to use the `$POETRY_HOME` argument to set the
Poetry home directory instead of adding Poetry to the PATH environment
variable.

Add instructions to the `CONTRIBUTING.md` file on how to run tests with
Docker.

Closes langchain-ai#2324
  • Loading branch information
sergerdn authored Apr 4, 2023
1 parent fe1eb8c commit 90973c1
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 16 deletions.
6 changes: 5 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
.venv
.github
.github
.git
.mypy_cache
.pytest_cache
Dockerfile
6 changes: 6 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,12 @@ To run unit tests:
make test
```

To run unit tests in Docker:

```bash
make docker_tests
```

If you add new logic, please add a unit test.

Integration tests cover logic that requires making calls to outside APIs (often integration with other services).
Expand Down
35 changes: 20 additions & 15 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
# This is a Dockerfile for running unit tests

# Use the Python base image
FROM python:3.11.2-bullseye AS builder

# Print Python version
RUN echo "Python version:" && python --version && echo ""
# Define the version of Poetry to install (default is 1.4.2)
ARG POETRY_VERSION=1.4.2

# Install Poetry
RUN echo "Installing Poetry..." && \
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
# Define the directory to install Poetry to (default is /opt/poetry)
ARG POETRY_HOME=/opt/poetry

# Add Poetry to PATH
ENV PATH="${PATH}:/root/.local/bin"
# Create a Python virtual environment for Poetry and install it
RUN python3 -m venv ${POETRY_HOME} && \
$POETRY_HOME/bin/pip install --upgrade pip && \
$POETRY_HOME/bin/pip install poetry==${POETRY_VERSION}

# Test if Poetry is added to PATH
RUN echo "Poetry version:" && poetry --version && echo ""
# Test if Poetry is installed in the expected path
RUN echo "Poetry version:" && $POETRY_HOME/bin/poetry --version

# Set working directory
# Set the working directory for the app
WORKDIR /app

# Use a multi-stage build to install dependencies
Expand All @@ -23,17 +26,19 @@ FROM builder AS dependencies
# Copy only the dependency files for installation
COPY pyproject.toml poetry.lock poetry.toml ./

# Install Poetry dependencies (this layer will be cached as long as the dependencies don't change)
RUN poetry install --no-interaction --no-ansi
# Install the Poetry dependencies (this layer will be cached as long as the dependencies don't change)
RUN $POETRY_HOME/bin/poetry install --no-interaction --no-ansi

# Use a multi-stage build to run tests
FROM dependencies AS tests

# Copy the rest of the app source code (this layer will be invalidated and rebuilt whenever the source code changes)
COPY . .

# Set entrypoint to run tests
ENTRYPOINT ["poetry", "run", "pytest"]
RUN /opt/poetry/bin/poetry install --no-interaction --no-ansi

# Set the entrypoint to run tests using Poetry
ENTRYPOINT ["/opt/poetry/bin/poetry", "run", "pytest"]

# Set default command to run all unit tests
# Set the default command to run all unit tests
CMD ["tests/unit_tests"]

0 comments on commit 90973c1

Please sign in to comment.