diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 7ea0fc0b..22d6d0a4 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -10,22 +10,39 @@ on: type: string description: 'Version number' required: true + release: + type: boolean + description: 'Is this a release build?' + required: true secrets: docker_username: required: true docker_token: required: true -env: - DOCKER_IMAGE: ${{ secrets.docker_username }}/libation - jobs: - docker: + configure: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 + build_and_push: + runs-on: ubuntu-latest + needs: configure + strategy: + # Prevent a failure in one image from stopping the other builds + fail-fast: false + matrix: + os: + - ubuntu-latest + arch: + - amd64 + - arm64 + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -38,9 +55,25 @@ jobs: username: ${{ secrets.docker_username }} password: ${{ secrets.docker_token }} - - name: Build and push - uses: docker/build-push-action@v5 + - name: Generate docker image tags + id: metadata + uses: docker/metadata-action@v5 with: - push: true - build-args: 'FOLDER_NAME=Linux-chardonnay' - tags: ${{ env.DOCKER_IMAGE }}:latest,${{ env.DOCKER_IMAGE }}:${{ inputs.version }} + flavor: | + latest=true + images: | + name=${{ secrets.docker_username }}/libation + tags: | + type=raw,value=${{ inputs.version }},enable=${{ inputs.release }} + + - name: Build and push image + uses: docker/build-push-action@v6 + with: + platforms: ${{ matrix.arch }} + push: ${{ steps.metadata.outputs.tags != ''}} + cache-from: type=gha + cache-to: type=gha,mode=max + tags: ${{ steps.metadata.outputs.tags }} + labels: ${{ steps.metadata.outputs.labels }} + build-args: | + TARGET_ARCH=${{ matrix.arch }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fd1cc731..be07bd8e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,6 +23,7 @@ jobs: uses: ./.github/workflows/docker.yml with: version: ${{ needs.prerelease.outputs.version }} + release: true secrets: docker_username: ${{ secrets.DOCKERHUB_USERNAME }} docker_token: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 0ae4c712..d8b302ec 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -12,3 +12,11 @@ on: jobs: build: uses: ./.github/workflows/build.yml + docker: + uses: ./.github/workflows/docker.yml + with: + version: ${GITHUB_SHA} + release: false + secrets: + docker_username: ${{ secrets.DOCKERHUB_USERNAME }} + docker_token: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/Dockerfile b/Dockerfile index 36eddace..36386ec1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,14 @@ # Dockerfile FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env +ARG TARGET_ARCH=linux-x64 COPY Source /Source -RUN dotnet publish -c Release -o /Source/bin/Publish/Linux-chardonnay /Source/LibationCli/LibationCli.csproj -p:PublishProfile=/Source/LibationCli/Properties/PublishProfiles/LinuxProfile.pubxml +RUN dotnet publish \ + /Source/LibationCli/LibationCli.csproj \ + --runtime linux-${TARGET_ARCH} \ + --configuration Release \ + --output /Source/bin/Publish/Linux-chardonnay \ + -p:PublishProfile=/Source/LibationCli/Properties/PublishProfiles/LinuxProfile.pubxml FROM mcr.microsoft.com/dotnet/runtime:8.0 ARG USER_UID=1001