refactor: streamline Docker build process with matrix strategy for multi-architecture support

This commit is contained in:
Andras Bacsai
2025-10-27 16:51:42 +01:00
parent a3a5694d10
commit cc070f2ee6

View File

@@ -23,50 +23,22 @@ env:
IMAGE_NAME: "coollabsio/coolify" IMAGE_NAME: "coollabsio/coolify"
jobs: jobs:
amd64: build-push:
runs-on: ubuntu-latest strategy:
steps: matrix:
- uses: actions/checkout@v4 include:
- arch: amd64
- name: Sanitize branch name for Docker tag platform: linux/amd64
id: sanitize runner: ubuntu-24.04
run: | - arch: aarch64
# Replace slashes and other invalid characters with dashes platform: linux/aarch64
SANITIZED_NAME=$(echo "${{ github.ref_name }}" | sed 's/[\/]/-/g') runner: ubuntu-24.04-arm
echo "tag=${SANITIZED_NAME}" >> $GITHUB_OUTPUT runs-on: ${{ matrix.runner }}
- name: Login to ${{ env.GITHUB_REGISTRY }}
uses: docker/login-action@v3
with:
registry: ${{ env.GITHUB_REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to ${{ env.DOCKER_REGISTRY }}
uses: docker/login-action@v3
with:
registry: ${{ env.DOCKER_REGISTRY }}
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and Push Image
uses: docker/build-push-action@v6
with:
context: .
file: docker/production/Dockerfile
platforms: linux/amd64
push: true
tags: |
${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}
${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}
aarch64:
runs-on: [self-hosted, arm64]
permissions: permissions:
contents: read contents: read
packages: write packages: write
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- name: Sanitize branch name for Docker tag - name: Sanitize branch name for Docker tag
id: sanitize id: sanitize
@@ -75,6 +47,9 @@ jobs:
SANITIZED_NAME=$(echo "${{ github.ref_name }}" | sed 's/[\/]/-/g') SANITIZED_NAME=$(echo "${{ github.ref_name }}" | sed 's/[\/]/-/g')
echo "tag=${SANITIZED_NAME}" >> $GITHUB_OUTPUT echo "tag=${SANITIZED_NAME}" >> $GITHUB_OUTPUT
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to ${{ env.GITHUB_REGISTRY }} - name: Login to ${{ env.GITHUB_REGISTRY }}
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
@@ -89,25 +64,27 @@ jobs:
username: ${{ secrets.DOCKER_USERNAME }} username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }} password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and Push Image - name: Build and Push Image (${{ matrix.arch }})
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
context: . context: .
file: docker/production/Dockerfile file: docker/production/Dockerfile
platforms: linux/aarch64 platforms: ${{ matrix.platform }}
push: true push: true
tags: | tags: |
${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-aarch64 ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-${{ matrix.arch }}
${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-aarch64 ${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-${{ matrix.arch }}
cache-from: type=gha
cache-to: type=gha,mode=max
merge-manifest: merge-manifest:
runs-on: ubuntu-latest runs-on: ubuntu-24.04
needs: build-push
permissions: permissions:
contents: read contents: read
packages: write packages: write
needs: [amd64, aarch64]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- name: Sanitize branch name for Docker tag - name: Sanitize branch name for Docker tag
id: sanitize id: sanitize
@@ -135,13 +112,15 @@ jobs:
- name: Create & publish manifest on ${{ env.GITHUB_REGISTRY }} - name: Create & publish manifest on ${{ env.GITHUB_REGISTRY }}
run: | run: |
docker buildx imagetools create \ docker buildx imagetools create \
--append ${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-aarch64 \ ${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-amd64 \
${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-aarch64 \
--tag ${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }} --tag ${{ env.GITHUB_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}
- name: Create & publish manifest on ${{ env.DOCKER_REGISTRY }} - name: Create & publish manifest on ${{ env.DOCKER_REGISTRY }}
run: | run: |
docker buildx imagetools create \ docker buildx imagetools create \
--append ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-aarch64 \ ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-amd64 \
${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}-aarch64 \
--tag ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }} --tag ${{ env.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.sanitize.outputs.tag }}
- uses: sarisia/actions-status-discord@v1 - uses: sarisia/actions-status-discord@v1