From aee96f077b7de39674a8ceb0c2b008ec7c7719b2 Mon Sep 17 00:00:00 2001
From: Felix Wotschofsky <hello@felisk.io>
Date: Tue, 29 Mar 2022 23:07:12 +0000
Subject: [PATCH] Improve container building workflow

---
 .github/workflows/publish-docker-github.yml | 73 ---------------------
 .github/workflows/publish-docker.yml        | 51 ++++++++++++++
 .github/workflows/publish-dockerhub.yml     | 31 ---------
 3 files changed, 51 insertions(+), 104 deletions(-)
 delete mode 100644 .github/workflows/publish-docker-github.yml
 create mode 100644 .github/workflows/publish-docker.yml
 delete mode 100644 .github/workflows/publish-dockerhub.yml

diff --git a/.github/workflows/publish-docker-github.yml b/.github/workflows/publish-docker-github.yml
deleted file mode 100644
index 29856e2..0000000
--- a/.github/workflows/publish-docker-github.yml
+++ /dev/null
@@ -1,73 +0,0 @@
-name: Publish to GitHub Container Registry
-# To uav4geo GitHub Container Registry
-# https://github.com/orgs/uav4geo/packages
-
-on:
-  push:
-    # Publish `main` as Docker `latest` image.
-    branches:
-      - main
-    # Publish `v1.2.3` tags as releases.
-    tags:
-      - v*
-  # Run tests for any PRs.
-  pull_request:
-  # Enable manual trigger.
-  workflow_dispatch:
-
-env:
-  IMAGE_NAME: libretranslate
-  # The image ID is generated using the GitHub user ID
-  # In our case IMAGE_ID: ghcr.io/uav4geo/libretranslate
-
-jobs:
-  # Test if the docker image build successfully
-  test:
-    runs-on: ubuntu-latest
-
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Run tests
-        run: |
-          docker build . --file Dockerfile
-
-  # Push image to GitHub Packages.
-  # See also https://docs.docker.com/docker-hub/builds/
-  publish:
-    needs: test
-    runs-on: ubuntu-latest
-    if: github.event_name == 'push'
-
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Build image
-        run: docker build . --file Dockerfile --tag $IMAGE_NAME
-
-      # Create an access token with `read:packages` and `write:packages` scopes
-      # https://github.com/settings/tokens
-      - name: Log into GitHub Container Registry
-        run: echo "${{ secrets.CONTAINER_REGISTRY_GITHUB_TOKEN }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
-
-      - name: Push image to GitHub Container Registry
-        run: |
-          IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME
-
-          # Change all uppercase to lowercase
-          IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
-
-          # Strip git ref prefix from version
-          VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
-
-          # Strip "v" prefix from tag name
-          [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
-
-          # Use Docker `latest` tag convention
-          [ "$VERSION" == "main" ] && VERSION=latest
-
-          echo IMAGE_ID=$IMAGE_ID
-          echo VERSION=$VERSION
-
-          docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
-          docker push $IMAGE_ID:$VERSION
diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml
new file mode 100644
index 0000000..af44597
--- /dev/null
+++ b/.github/workflows/publish-docker.yml
@@ -0,0 +1,51 @@
+name: Build and Publish Docker Image
+
+on:
+  push:
+    branches:
+      - main
+    tags:
+      - v*
+
+jobs:
+  main:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout Repository
+        uses: actions/checkout@v2
+
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v1
+
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v1
+
+      - name: Login to Docker Hub
+        uses: docker/login-action@v1
+        with:
+          username: ${{ secrets.DOCKERHUB_USERNAME }}
+          password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+      - name: Login to GHCR
+        uses: docker/login-action@v1
+        with:
+          registry: ghcr.io
+          username: ${{ github.repository_owner }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Get Version
+        id: get_version
+        run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/}
+
+      - name: Build and push Image
+        uses: docker/build-push-action@v2
+        with:
+          platforms: linux/amd64
+          tags: |
+            ${{ secrets.DOCKERHUB_USERNAME }}/libretranslate:${{ env.TAG }},
+            ghcr.io/${{ github.repository_owner }}/libretranslate:${{ env.TAG }}
+          push: true
+          cache-from: type=gha
+          cache-to: type=gha,mode=max
+        env:
+          TAG: ${{ startsWith(github.ref, 'refs/tags/') && steps.get_version.outputs.VERSION || 'latest' }}
diff --git a/.github/workflows/publish-dockerhub.yml b/.github/workflows/publish-dockerhub.yml
deleted file mode 100644
index 23a20f0..0000000
--- a/.github/workflows/publish-dockerhub.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: Publish to DockerHub
-
-on:
-  push:
-    branches: main
-
-jobs:
-  main:
-    runs-on: ubuntu-latest
-    steps:
-      - name: Set up QEMU
-        uses: docker/setup-qemu-action@v1
-      
-      - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v1
-      
-      - name: Login to DockerHub
-        uses: docker/login-action@v1 
-        with:
-          username: ${{ secrets.DOCKERHUB_USERNAME }}
-          password: ${{ secrets.DOCKERHUB_TOKEN }}
-      
-      - name: Build and push
-        id: docker_build
-        uses: docker/build-push-action@v2
-        with:
-          push: true
-          tags: libretranslate/libretranslate:latest
-          
-      - name: Image digest
-        run: echo ${{ steps.docker_build.outputs.digest }}
\ No newline at end of file
-- 
GitLab