From 92a41fbf479daf8864377eba8ae454b6b3893133 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Sat, 10 Feb 2024 08:27:52 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=B3=20feat:=20Push=20Container=20Image?= =?UTF-8?q?s=20to=20DockerHub=20(#1762)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/container.yml | 9 ++++ .github/workflows/dev-images.yml | 23 +++++++- .github/workflows/latest-images-main.yml | 69 ++++++++++++++++++++---- 3 files changed, 90 insertions(+), 11 deletions(-) diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index 23c6ad48cc..ef04f48d5e 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -23,6 +23,13 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v3 + # Login to Docker Hub + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + # Log in to GitHub Container Registry - name: Log in to GitHub Container Registry uses: docker/login-action@v2 @@ -43,6 +50,7 @@ jobs: with: images: | ghcr.io/${{ github.repository_owner }}/librechat-api + docker.io/${{ secrets.DOCKERHUB_USERNAME }}/librechat-api tags: | type=raw,value=latest type=semver,pattern={{version}} @@ -66,6 +74,7 @@ jobs: with: images: | ghcr.io/${{ github.repository_owner }}/librechat + docker.io/${{ secrets.DOCKERHUB_USERNAME }}/librechat tags: | type=raw,value=latest type=semver,pattern={{version}} diff --git a/.github/workflows/dev-images.yml b/.github/workflows/dev-images.yml index ac9a7df1d7..fa4621e84c 100644 --- a/.github/workflows/dev-images.yml +++ b/.github/workflows/dev-images.yml @@ -8,6 +8,7 @@ on: paths: - 'api/**' - 'client/**' + - 'packages/**' jobs: build: @@ -30,6 +31,13 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + # Login to Docker Hub + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + # Build Docker images - name: Build Docker images run: | @@ -38,7 +46,7 @@ jobs: docker build -f Dockerfile -t librechat-dev . # Tag and push the images to GitHub Container Registry - - name: Tag and push images + - name: Tag and push images to GHCR run: | docker tag librechat-dev-api:latest ghcr.io/${{ github.repository_owner }}/librechat-dev-api:${{ github.sha }} docker push ghcr.io/${{ github.repository_owner }}/librechat-dev-api:${{ github.sha }} @@ -49,3 +57,16 @@ jobs: docker push ghcr.io/${{ github.repository_owner }}/librechat-dev:${{ github.sha }} docker tag librechat-dev:latest ghcr.io/${{ github.repository_owner }}/librechat-dev:latest docker push ghcr.io/${{ github.repository_owner }}/librechat-dev:latest + + # Tag and push the images to Docker Hub + - name: Tag and push images to Docker Hub + run: | + docker tag librechat-dev-api:latest ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev-api:${{ github.sha }} + docker push ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev-api:${{ github.sha }} + docker tag librechat-dev-api:latest ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev-api:latest + docker push ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev-api:latest + + docker tag librechat-dev:latest ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev:${{ github.sha }} + docker push ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev:${{ github.sha }} + docker tag librechat-dev:latest ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev:latest + docker push ${{ secrets.DOCKERHUB_USERNAME }}/librechat-dev:latest diff --git a/.github/workflows/latest-images-main.yml b/.github/workflows/latest-images-main.yml index 5149cecb0e..02d61ca2f8 100644 --- a/.github/workflows/latest-images-main.yml +++ b/.github/workflows/latest-images-main.yml @@ -16,6 +16,17 @@ jobs: - name: Set up Docker uses: docker/setup-buildx-action@v3 + # Set up QEMU for cross-platform builds + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + # Login to Docker Hub + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + # Log in to GitHub Container Registry - name: Log in to GitHub Container Registry uses: docker/login-action@v2 @@ -24,17 +35,55 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - # Run docker-compose build + # Prepare Docker Build - name: Build Docker images run: | cp .env.example .env - docker-compose build - docker build -f Dockerfile.multi --target api-build -t librechat-api . - # Tag and push the images with the 'latest' tag - - name: Tag image and push - run: | - docker tag librechat:latest ghcr.io/${{ github.repository_owner }}/librechat:latest - docker push ghcr.io/${{ github.repository_owner }}/librechat:latest - docker tag librechat-api:latest ghcr.io/${{ github.repository_owner }}/librechat-api:latest - docker push ghcr.io/${{ github.repository_owner }}/librechat-api:latest + # Tag and push librechat-api + - name: Docker metadata for librechat-api + id: meta-librechat-api + uses: docker/metadata-action@v5 + with: + images: | + ghcr.io/${{ github.repository_owner }}/librechat-api + docker.io/${{ secrets.DOCKERHUB_USERNAME }}/librechat-api + tags: | + type=raw,value=latest + type=semver,pattern={{version}} + type=semver,pattern={{major}} + type=semver,pattern={{major}}.{{minor}} + + - name: Build and push librechat-api + uses: docker/build-push-action@v5 + with: + file: Dockerfile.multi + context: . + push: true + tags: ${{ steps.meta-librechat-api.outputs.tags }} + platforms: linux/amd64,linux/arm64 + target: api-build + + # Tag and push librechat + - name: Docker metadata for librechat + id: meta-librechat + uses: docker/metadata-action@v5 + with: + images: | + ghcr.io/${{ github.repository_owner }}/librechat + docker.io/${{ secrets.DOCKERHUB_USERNAME }}/librechat + tags: | + type=raw,value=latest + type=semver,pattern={{version}} + type=semver,pattern={{major}} + type=semver,pattern={{major}}.{{minor}} + + - name: Build and push librechat + uses: docker/build-push-action@v5 + with: + file: Dockerfile + context: . + push: true + tags: ${{ steps.meta-librechat.outputs.tags }} + platforms: linux/amd64,linux/arm64 + target: node