Skip to content

Commit

Permalink
Buildx
Browse files Browse the repository at this point in the history
  • Loading branch information
LordMike committed Aug 18, 2023
1 parent 1f093d1 commit c076800
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 124 deletions.
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
DOCKER_DOCKERFILE=MBW.Nemlig2MQTT/Dockerfile
DOCKER_TAG=lordmike/nemlig2mqtt
DOCKER_PLATFORMS=linux/amd64,linux/arm64/v8,linux/arm/v7
48 changes: 18 additions & 30 deletions .github/workflows/docker-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,30 @@ jobs:
runs-on: ubuntu-latest

steps:
- name: Prep docker experimentals
run: echo "DOCKER_CLI_EXPERIMENTAL=enabled" >> $GITHUB_ENV

- name: Prep GIT_TAG
run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV

- uses: actions/checkout@v2

- name: Dotenv Action
uses: xom9ikk/dotenv@v1.0.2

- name: Test
run: "[ -f .ci-skip-tests ] && echo 'Skipping tests' || dotnet test --configuration Release"

- name: Build
run: |
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && docker build -f ${DOCKER_DOCKERFILE}.amd64 -t ${DOCKER_TAG}:amd64-dev .
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && docker build -f ${DOCKER_DOCKERFILE}.armv7 -t ${DOCKER_TAG}:armv7-dev .
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && docker build -f ${DOCKER_DOCKERFILE}.aarch64 -t ${DOCKER_TAG}:aarch64-dev .
- name: Push base images to docker hub
run: |
echo ${{ secrets.DOCKER_KEY }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && docker push ${DOCKER_TAG}:amd64-dev
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && docker push ${DOCKER_TAG}:armv7-dev
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && docker push ${DOCKER_TAG}:aarch64-dev

- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Create manifest images + tag images
run: |
# Note: Manifests are created from tags from docker.io, so we must push first, then create manifest, then push again
PARTS=''
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && PARTS="$PARTS ${DOCKER_TAG}:amd64-dev"
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && PARTS="$PARTS ${DOCKER_TAG}:armv7-dev"
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && PARTS="$PARTS ${DOCKER_TAG}:aarch64-dev"
docker manifest create ${DOCKER_TAG}:dev $PARTS
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_KEY }}

docker manifest push ${DOCKER_TAG}:dev
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: ${{ env.DOCKER_PLATFORMS }}
push: true
tags: ${{ env.DOCKER_TAG }}:dev
file: ${{ env.DOCKER_DOCKERFILE }}
67 changes: 20 additions & 47 deletions .github/workflows/docker-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,57 +9,30 @@ jobs:
runs-on: ubuntu-latest

steps:
- name: Prep docker experimentals
run: echo "DOCKER_CLI_EXPERIMENTAL=enabled" >> $GITHUB_ENV

- name: Prep GIT_TAG
run: echo "GIT_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV

- uses: actions/checkout@v2

- name: Dotenv Action
uses: xom9ikk/dotenv@v1.0.2

- name: Test
run: "[ -f .ci-skip-tests ] && echo 'Skipping tests' || dotnet test --configuration Release"

- name: Build
run: |
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && docker build -f ${DOCKER_DOCKERFILE}.amd64 -t ${DOCKER_TAG}:amd64-latest .
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && docker build -f ${DOCKER_DOCKERFILE}.armv7 -t ${DOCKER_TAG}:armv7-latest .
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && docker build -f ${DOCKER_DOCKERFILE}.aarch64 -t ${DOCKER_TAG}:aarch64-latest .
- name: Push base images to docker hub
run: |
echo ${{ secrets.DOCKER_KEY }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && docker tag ${DOCKER_TAG}:amd64-latest ${DOCKER_TAG}:amd64-$GIT_TAG
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && docker tag ${DOCKER_TAG}:armv7-latest ${DOCKER_TAG}:armv7-$GIT_TAG
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && docker tag ${DOCKER_TAG}:aarch64-latest ${DOCKER_TAG}:aarch64-$GIT_TAG
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && docker push ${DOCKER_TAG}:amd64-latest
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && docker push ${DOCKER_TAG}:amd64-$GIT_TAG
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && docker push ${DOCKER_TAG}:armv7-latest
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && docker push ${DOCKER_TAG}:armv7-$GIT_TAG
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && docker push ${DOCKER_TAG}:aarch64-latest
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && docker push ${DOCKER_TAG}:aarch64-$GIT_TAG
- name: Create manifest images + tag images
run: |
# Note: Manifests are created from tags from docker.io, so we must push first, then create manifest, then push again
PARTS=''
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && PARTS="$PARTS ${DOCKER_TAG}:amd64-latest"
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && PARTS="$PARTS ${DOCKER_TAG}:armv7-latest"
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && PARTS="$PARTS ${DOCKER_TAG}:aarch64-latest"
docker manifest create ${DOCKER_TAG}:latest $PARTS
PARTS=''
[ -f "${DOCKER_DOCKERFILE}.amd64" ] && PARTS="$PARTS ${DOCKER_TAG}:amd64-$GIT_TAG"
[ -f "${DOCKER_DOCKERFILE}.armv7" ] && PARTS="$PARTS ${DOCKER_TAG}:armv7-$GIT_TAG"
[ -f "${DOCKER_DOCKERFILE}.aarch64" ] && PARTS="$PARTS ${DOCKER_TAG}:aarch64-$GIT_TAG"
docker manifest create ${DOCKER_TAG}:$GIT_TAG $PARTS
docker manifest push ${DOCKER_TAG}:latest
docker manifest push ${DOCKER_TAG}:$GIT_TAG

- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_KEY }}

- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: ${{ env.DOCKER_PLATFORMS }}
push: true
tags: ${{ env.DOCKER_TAG }}:${{ github.ref_name }},${{ env.DOCKER_TAG }}:latest
file: ${{ env.DOCKER_DOCKERFILE }}
30 changes: 15 additions & 15 deletions MBW.Nemlig2MQTT/Dockerfile.aarch64 → MBW.Nemlig2MQTT/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# https://hub.docker.com/_/microsoft-dotnet-core
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
WORKDIR "/src/MBW.Nemlig2MQTT/"
RUN dotnet publish -c release -o /app
# Final
FROM mcr.microsoft.com/dotnet/runtime:7.0-alpine-arm64v8
RUN apk --no-cache add tzdata
WORKDIR /app
COPY --from=build /app .
# https://hub.docker.com/_/microsoft-dotnet-core
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src

COPY . .
WORKDIR "/src/MBW.Nemlig2MQTT/"
RUN dotnet publish -c release -o /app

# Runtime image, use an arch-specific image
FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/runtime:7.0-alpine

RUN apk --no-cache add tzdata

WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "./MBW.Nemlig2MQTT.dll"]
16 changes: 0 additions & 16 deletions MBW.Nemlig2MQTT/Dockerfile.amd64

This file was deleted.

16 changes: 0 additions & 16 deletions MBW.Nemlig2MQTT/Dockerfile.armv7

This file was deleted.

0 comments on commit c076800

Please sign in to comment.