From 8a96cf645e6b0ee4cd692d565389b79ec07b239b Mon Sep 17 00:00:00 2001 From: Liora Milbaum Date: Sun, 24 Mar 2024 23:16:09 +0200 Subject: [PATCH] playground tests --- .devcontainer/Containerfile | 9 +++++ .devcontainer/devcontainer.json | 8 +++++ .github/workflows/playground.yaml | 55 +++++++++++++++++++++++++++++++ .gitignore | 1 + playground/Containerfile | 3 +- playground/Makefile | 3 ++ playground/requirements.txt | 3 +- playground/tests/__init__.py | 0 playground/tests/conftest.py | 10 ++++++ playground/tests/requirements.txt | 4 +++ playground/tests/test_alive.py | 7 ++++ 11 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 .devcontainer/Containerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .github/workflows/playground.yaml create mode 100644 playground/Makefile create mode 100644 playground/tests/__init__.py create mode 100644 playground/tests/conftest.py create mode 100644 playground/tests/requirements.txt create mode 100644 playground/tests/test_alive.py diff --git a/.devcontainer/Containerfile b/.devcontainer/Containerfile new file mode 100644 index 000000000..0289dffb6 --- /dev/null +++ b/.devcontainer/Containerfile @@ -0,0 +1,9 @@ +FROM registry.access.redhat.com/ubi9/python-311:1-52 + +USER root + +COPY playground/tests/requirements.txt . + +RUN pip3 install -r requirements.txt && \ + dnf install -y podman buildah && \ + dnf clean all diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..caa271be2 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,8 @@ +{ + "name": "ai_recepies", + "build": { + "dockerfile": "Containerfile", + "context": ".." + }, + "privileged": true +} diff --git a/.github/workflows/playground.yaml b/.github/workflows/playground.yaml new file mode 100644 index 000000000..55287edfa --- /dev/null +++ b/.github/workflows/playground.yaml @@ -0,0 +1,55 @@ +name: playground + +on: + pull_request: + branches: + - main + push: + branches: + - main + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/playground + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - uses: actions/checkout@v4.1.1 + + - name: Login to ghcr + uses: docker/login-action@v3.1.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5.5.1 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push + uses: docker/build-push-action@v5.3.0 + with: + context: playground + file: playground/Containerfile + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + labels: ${{ steps.meta.outputs.labels }} + + - run: podman images + + - name: Set up Python + uses: actions/setup-python@v5.0.0 + + - run: pip install -r playground/tests/requirements.txt + + - name: Run tests + run: pytest diff --git a/.gitignore b/.gitignore index 3c2129ef7..50cf3e3cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.gguf *.bin *_pycache_* +port_check.lock diff --git a/playground/Containerfile b/playground/Containerfile index e47b81dd9..ec1cbe5d4 100644 --- a/playground/Containerfile +++ b/playground/Containerfile @@ -1,8 +1,7 @@ FROM registry.access.redhat.com/ubi9/python-39:latest WORKDIR /locallm COPY requirements.txt /locallm/requirements.txt -RUN pip install --upgrade pip -RUN pip install --no-cache-dir --upgrade -r /locallm/requirements.txt +RUN pip install --no-cache-dir -r /locallm/requirements.txt COPY run.sh run.sh EXPOSE 8001 ENTRYPOINT [ "sh", "run.sh" ] diff --git a/playground/Makefile b/playground/Makefile new file mode 100644 index 000000000..34c4f4f6a --- /dev/null +++ b/playground/Makefile @@ -0,0 +1,3 @@ +.PHONY: build +build: + buildah bud -f Containerfile --no-cache -t playground . diff --git a/playground/requirements.txt b/playground/requirements.txt index bbea3dd85..a3ffc4c08 100644 --- a/playground/requirements.txt +++ b/playground/requirements.txt @@ -1 +1,2 @@ -llama-cpp-python[server] \ No newline at end of file +llama-cpp-python[server]==0.2.57 +pip==24.0 diff --git a/playground/tests/__init__.py b/playground/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/playground/tests/conftest.py b/playground/tests/conftest.py new file mode 100644 index 000000000..d495d2f40 --- /dev/null +++ b/playground/tests/conftest.py @@ -0,0 +1,10 @@ +import pytest_container +import os + +TW = pytest_container.Container( + url=f"containers-storage:{os.environ['REGISTRY']}/{os.environ['IMAGE_NAME']}", + forwarded_ports=[pytest_container.PortForwarding(container_port=8001)] +) + +def pytest_generate_tests(metafunc): + pytest_container.auto_container_parametrize(metafunc) diff --git a/playground/tests/requirements.txt b/playground/tests/requirements.txt new file mode 100644 index 000000000..fd4236b64 --- /dev/null +++ b/playground/tests/requirements.txt @@ -0,0 +1,4 @@ +pip==24.0 +pytest-container==0.3.0 +pytest-testinfra==10.1.0 +pytest==8.1.1 diff --git a/playground/tests/test_alive.py b/playground/tests/test_alive.py new file mode 100644 index 000000000..7309f123c --- /dev/null +++ b/playground/tests/test_alive.py @@ -0,0 +1,7 @@ +import pytest_container +from .conftest import TW + +CONTAINER_IMAGES = [TW] + +def test_alive(auto_container: pytest_container.container.ContainerData, host): + res = host.run_expect([0],f"curl localhost:{auto_container.forwarded_ports[0].host_port}",).stdout.strip()