diff options
| author | soler_j <soler_j@etna-alternance.net> | 2025-04-27 22:00:19 +0200 |
|---|---|---|
| committer | soler_j <soler_j@etna-alternance.net> | 2025-04-27 22:00:19 +0200 |
| commit | b3ff23e3924a383976ae799bf126f2d7f2a1339c (patch) | |
| tree | cc0ffa56223eb6ac7510e9543803de6c2f2b849e | |
| parent | c91ee5eb623102bdf6ea4d56827ab3474f5464dd (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.yml | 53 |
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 |
