Browse Source

Docker tags and multiarch support (#521)

robjuz 1 year ago
parent
commit
7c1b3c4cb3
2 changed files with 57 additions and 24 deletions
  1. 54 23
      .github/workflows/publish_docker.yml
  2. 3 1
      Dockerfile

+ 54 - 23
.github/workflows/publish_docker.yml

@@ -1,28 +1,59 @@
 name: Publish Docker image
 
 on:
-    push:
-        tags:
-            - "v*.*.*"
+  push:
+    branches:
+      - "main"
+    tags:
+      - "v*.*.*"
+  pull_request:
+    branches:
+      - "main"
 
 jobs:
-    push_to_registry:
-        name: Push Docker image to Docker Hub
-        runs-on: ubuntu-latest
-        steps:
-            - name: Checkout
-              uses: actions/checkout@v3
-            - name: Login to Docker Hub
-              uses: docker/login-action@v1
-              with:
-                  username: ${{ secrets.DOCKER_HUB_USERNAME }}
-                  password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-            - name: Set up Docker Buildx
-              uses: docker/setup-buildx-action@v1
-            - name: Build and push
-              uses: docker/build-push-action@v2
-              with:
-                  context: .
-                  file: ./Dockerfile
-                  push: true
-                  tags: ${{ secrets.DOCKER_HUB_USERNAME }}/rembg:latest
+  push_to_registry:
+    name: Push Docker image to Docker Hub
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v4
+
+      - name: Docker meta
+        id: meta
+        uses: docker/metadata-action@v5
+        with:
+          # list of Docker images to use as base name for tags
+          images: |
+            ${{ secrets.DOCKER_HUB_USERNAME }}/rembg
+          # generate Docker tags based on the following events/attributes
+          tags: |
+            type=ref,event=branch
+            type=ref,event=branch
+            type=ref,event=pr
+            type=semver,pattern={{version}}
+            type=semver,pattern={{major}}.{{minor}}
+            type=semver,pattern={{major}}
+            type=sha
+
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v3
+
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v3
+
+      - name: Login to Docker Hub
+        uses: docker/login-action@v3
+        with:
+          username: ${{ secrets.DOCKER_HUB_USERNAME }}
+          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
+
+      - name: Build and push
+        uses: docker/build-push-action@v5
+        with:
+          context: .
+          platforms: linux/amd64,linux/arm64
+          push: ${{ github.event_name != 'pull_request' }}
+          tags: ${{ steps.meta.outputs.tags }}
+          labels: ${{ steps.meta.outputs.labels }}
+          cache-from: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/rembg:buildcache
+          cache-to: type=registry,ref=${{ secrets.DOCKER_HUB_USERNAME }}/rembg:buildcache,mode=max

+ 3 - 1
Dockerfile

@@ -2,8 +2,10 @@ FROM python:3.10-slim
 
 WORKDIR /rembg
 
-COPY . .
 RUN pip install --upgrade pip
+
+COPY . .
+
 RUN python -m pip install ".[cli]"
 RUN python -c 'from rembg.bg import download_models; download_models()'