From 457581537adbf7d5194b3b89be26f2b0407e6a83 Mon Sep 17 00:00:00 2001 From: diogoazevedo15 <68329635+diogoazevedo15@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:49:09 +0100 Subject: [PATCH] Feat/add docker to workflows (#149) * Add Docker build and push to workflows Updated upload-pypi-dev and upload-pypi to build and push a docker image with the most recent version of LLMstudio (including dev releases) to tensoropsai dockerhub. * Fix some lint issues --- .github/workflows/upload-pypi-dev.yml | 47 +++++++++++++++++++++- .github/workflows/upload-pypi.yml | 56 ++++++++++++++++++++++++++- llmstudio/cli.py | 2 +- 3 files changed, 102 insertions(+), 3 deletions(-) diff --git a/.github/workflows/upload-pypi-dev.yml b/.github/workflows/upload-pypi-dev.yml index 8304eb18..dcc4d365 100644 --- a/.github/workflows/upload-pypi-dev.yml +++ b/.github/workflows/upload-pypi-dev.yml @@ -1,4 +1,4 @@ -name: Upload Python package to PyPI as dev pre-release +name: Upload Python package to PyPI as dev release and build/push Docker image. on: workflow_dispatch: @@ -39,3 +39,48 @@ jobs: git add pyproject.toml git commit -m "[fix] bump prerelease version in pyproject.toml" git push + + # Wait for PyPI to update + - name: Wait for PyPI to update + run: | + VERSION=$(poetry version --short) + echo "Checking for llmstudio==$VERSION on PyPI..." + for i in {1..10}; do + if python -m pip install llmstudio==${VERSION} --dry-run >/dev/null 2>&1; then + echo "Package llmstudio==${VERSION} is available on PyPI." + break + else + echo "Package llmstudio==${VERSION} not available yet. Waiting 15 seconds..." + sleep 15 + fi + if [ $i -eq 10 ]; then + echo "Package did not become available in time." + exit 1 + fi + done + + # Docker build and push section + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract version for tagging Docker image + id: get_version + run: | + echo "VERSION=$(poetry version --short)" >> $GITHUB_ENV + + - name: Build and tag Docker image + run: | + docker build \ + --build-arg LLMSTUDIO_VERSION=${{ env.VERSION }} \ + -t tensoropsai/llmstudio:${{ env.VERSION }} \ + . + + - name: Push Docker image to Docker Hub + run: | + docker push tensoropsai/llmstudio:${{ env.VERSION }} \ No newline at end of file diff --git a/.github/workflows/upload-pypi.yml b/.github/workflows/upload-pypi.yml index ec06e30b..15952239 100644 --- a/.github/workflows/upload-pypi.yml +++ b/.github/workflows/upload-pypi.yml @@ -1,4 +1,4 @@ -name: Upload Python package to PyPI +name: Upload Python package to PyPI and build/push Docker images. on: push: @@ -11,23 +11,77 @@ jobs: deploy: runs-on: ubuntu-latest steps: + # Checkout the code - name: Checkout code uses: actions/checkout@v2 + # Set up Python environment - name: Set up Python uses: actions/setup-python@v2 with: python-version: "3.x" + # Install Poetry - name: Install Poetry run: | curl -sSL https://install.python-poetry.org | python3 - + # Configure Poetry with PyPI token - name: Configure Poetry run: | poetry config pypi-token.pypi ${{ secrets.PYPI_API_TOKEN }} + # Build and publish package to PyPI - name: Build and publish to PyPI run: | poetry build poetry publish + + # Extract the new version number from pyproject.toml + - name: Extract version for tagging Docker image + run: | + echo "VERSION=$(poetry version --short)" >> $GITHUB_ENV + + # Wait for the package to become available on PyPI + - name: Wait for PyPI to update + run: | + echo "Checking for llmstudio==${{ env.VERSION }} on PyPI..." + for i in {1..10}; do + if python -m pip install llmstudio==${{ env.VERSION }} --dry-run >/dev/null 2>&1; then + echo "Package llmstudio==${{ env.VERSION }} is available on PyPI." + break + else + echo "Package llmstudio==${{ env.VERSION }} not available yet. Waiting 15 seconds..." + sleep 15 + fi + if [ $i -eq 10 ]; then + echo "Package did not become available in time." + exit 1 + fi + done + + # Set up Docker Buildx + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + # Log in to Docker Hub + - name: Log in to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + # Build and tag Docker images with both :latest and :[NEW_VERSION] + - name: Build and tag Docker images + run: | + docker build \ + --build-arg LLMSTUDIO_VERSION=${{ env.VERSION }} \ + -t tensoropsai/llmstudio:latest \ + -t tensoropsai/llmstudio:${{ env.VERSION }} \ + . + + # Push both Docker images to Docker Hub + - name: Push Docker images to Docker Hub + run: | + docker push tensoropsai/llmstudio:${{ env.VERSION }} + docker push tensoropsai/llmstudio:latest \ No newline at end of file diff --git a/llmstudio/cli.py b/llmstudio/cli.py index 9d8a7d37..57944402 100644 --- a/llmstudio/cli.py +++ b/llmstudio/cli.py @@ -34,4 +34,4 @@ def server(ui): if __name__ == "__main__": - main() \ No newline at end of file + main()