summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsoler_j <soler_j@etna-alternance.net>2025-04-27 22:00:19 +0200
committersoler_j <soler_j@etna-alternance.net>2025-04-27 22:00:19 +0200
commitb3ff23e3924a383976ae799bf126f2d7f2a1339c (patch)
treecc0ffa56223eb6ac7510e9543803de6c2f2b849e
parentc91ee5eb623102bdf6ea4d56827ab3474f5464dd (diff)
Refactor le workflow de construction Docker pour prendre en charge les architectures multi-plateformes, en ajoutant des étapes pour la construction et la fusion des images Docker, tout en améliorant la gestion des permissions.
-rw-r--r--.github/workflows/build.yml53
1 files changed, 46 insertions, 7 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 28262b7..4798e43 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -11,36 +11,75 @@ env:
IMAGE_NAME: ${{ github.repository }}
jobs:
- build-and-push-api-image:
- runs-on: ubuntu-latest
+ build-api-image:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, ubuntu-24.04-arm] # Matrix with both AMD64 and ARM64 runners
+ include:
+ - os: ubuntu-latest
+ platform: linux/amd64
+ tag: amd64
+ - os: ubuntu-24.04-arm
+ platform: linux/arm64
+ tag: arm64
permissions:
contents: read
packages: write
+
steps:
- name: Checkout repository
uses: actions/checkout@v4
- - name: Set up QEMU
+
+ - name: Set up QEMU for multi-architecture
uses: docker/setup-qemu-action@v3
+
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
+
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
+
- name: Extract metadata (tags, labels) for Docker
id: meta-api
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- - name: Build and push Proxy Docker image
+
+ - name: Build Docker image for ${{ matrix.tag }}
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
- platforms: linux/amd64,linux/arm64
- push: true
- tags: ${{ steps.meta-api.outputs.tags }}
+ platforms: ${{ matrix.platform }} # Specify the platform for the build
+ push: false # Do not push yet
+ tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ matrix.tag }}
labels: ${{ steps.meta-api.outputs.labels }}
cache-from: type=registry,ref=${{ env.IMAGE_NAME }}:cache
cache-to: type=registry,ref=${{ env.IMAGE_NAME }}:cache,mode=max
+
+ merge-and-push:
+ runs-on: ubuntu-latest
+ needs: build-api-image # This ensures the merge happens only after build is complete
+ permissions:
+ contents: read
+ packages: write
+
+ steps:
+ - name: Log in to the Container registry
+ uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Merge Docker images and push multi-arch image
+ run: |
+ docker buildx imagetools create \
+ --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \
+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:amd64 \
+ ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:arm64
+ docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest