diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
index 6248150..8af28af 100644
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -36,6 +36,23 @@ jobs:
- name: Git describe
id: ghd
uses: proudust/gh-describe@v1
+
+ # Extract metadata (tags, labels) for Docker
+ # https://github.com/docker/metadata-action
+ - name: Extract Docker metadata
+ id: meta
+ uses: docker/metadata-action@v5
+ with:
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+ tags: |
+ type=schedule
+ type=ref,event=branch
+ type=ref,event=pr
+ type=semver,pattern={{version}}
+ #type=semver,pattern={{major}}.{{minor}}
+ #type=semver,pattern={{major}}
+ #type=sha
+ type=raw,value=latest,enable={{is_default_branch}}
# Add support for more platforms with QEMU (optional)
# https://github.com/docker/setup-qemu-action
@@ -56,23 +73,6 @@ jobs:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- # Extract metadata (tags, labels) for Docker
- # https://github.com/docker/metadata-action
- - name: Extract Docker metadata
- id: meta
- uses: docker/metadata-action@v5
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- tags: |
- type=schedule
- type=ref,event=branch
- type=ref,event=pr
- type=semver,pattern={{version}}
- #type=semver,pattern={{major}}.{{minor}}
- #type=semver,pattern={{major}}
- #type=sha
- type=raw,value=latest,enable={{is_default_branch}}
-
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
@@ -83,9 +83,9 @@ jobs:
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- cache-from: type=gha
- cache-to: type=gha,mode=max
- platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
+ # cache-from: type=gha
+ # cache-to: type=gha,mode=max
+ platforms: linux/arm64,linux/amd64,linux/arm/v7
build-args: |
GIT_COMMIT=${{ steps.ghd.outputs.describe }}
diff --git a/tuya_mqtt.net/Dockerfile b/tuya_mqtt.net/Dockerfile
index aa54aeb..f61f165 100644
--- a/tuya_mqtt.net/Dockerfile
+++ b/tuya_mqtt.net/Dockerfile
@@ -1,8 +1,19 @@
-FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
+FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
+ARG DEBUGHELPER
+ARG TARGETPLATFORM
+ARG TARGETOS
+ARG TARGETARCH
+ARG TARGETVARIANT
+ARG BUILDPLATFORM
+ARG BUILDOS
+ARG BUILDARCH
+ARG BUILDVARIANT
+ARG GIT_COMMIT
+
ENV DOTNET_CLI_HOME=/tmp
WORKDIR /app
EXPOSE 80
-ARG DEBUGHELPER
+
ENV TZ=EUROPE/Berlin
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
HEALTHCHECK CMD curl --fail http://localhost:80/health || exit
@@ -14,46 +25,75 @@ RUN if [ "$DEBUGHELPER" = "yes" ] ; then \
apt install -y arping inetutils-ping libnet-ifconfig-wrapper-perl mc \
; fi
+
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:7.0 AS build
+ARG DEBUGHELPER
+ARG TARGETPLATFORM
+ARG TARGETOS
+ARG TARGETARCH
+ARG TARGETVARIANT
+ARG BUILDPLATFORM
+ARG BUILDOS
+ARG BUILDARCH
+ARG BUILDVARIANT
+ARG GIT_COMMIT
+ENV DOTNET_CLI_HOME=/tmp
+
WORKDIR /src
+
COPY ["tuya_mqtt.net.csproj", "."]
-ENV DOTNET_CLI_HOME=/tmp
-RUN dotnet restore "tuya_mqtt.net.csproj"
+
+RUN dotnet --info
+
COPY . .
WORKDIR "/src/."
-ARG BUILDPLATFORM
-ARG TARGETPLATFORM
-ARG GIT_COMMIT
+
RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
- RID=linux-x64 ; \
+ RID=linux-x64 ; \
elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then \
- RID=linux-arm64 ; \
+ RID=linux-arm64 ; \
elif [ "$TARGETPLATFORM" = "linux/arm/v7" ]; then \
- RID=linux-arm ; \
+ RID=linux-arm ; \
elif [ "$TARGETPLATFORM" = "linux/arm/v6" ]; then \
- RID=linux-arm ; \
+ RID=linux-arm ; \
fi \
- && echo "target $TARGETPLATFORM build $BUILDPLATFORM RID $RID" \
+ && echo "Building on $BUILDPLATFORM, targeting $TARGETPLATFORM" \
+ && echo "Building on ${BUILDOS} and ${BUILDARCH} with optional variant ${BUILDVARIANT}" \
+ && echo "Targeting ${TARGETOS} and ${TARGETARCH} with optional variant ${TARGETVARIANT}" \
+ && echo "RID is ${RID}" \
+ && dotnet restore -r $RID "tuya_mqtt.net.csproj" \
&& date > "/src/Resources/BuildDate.txt" \
&& echo $GIT_COMMIT >> "/src/Resources/BuildDate.txt" \
- && dotnet build "tuya_mqtt.net.csproj" -r $RID --self-contained -c Release -o /app/build
+ && dotnet build "tuya_mqtt.net.csproj" -r $RID --no-restore -c Release -o /app/build
-FROM build AS publish
-ARG BUILDPLATFORM
+FROM --platform=$TARGETPLATFORM build AS publish
+ARG DEBUGHELPER
ARG TARGETPLATFORM
+ARG TARGETOS
+ARG TARGETARCH
+ARG TARGETVARIANT
+ARG BUILDPLATFORM
+ARG BUILDOS
+ARG BUILDARCH
+ARG BUILDVARIANT
+ARG GIT_COMMIT
+
RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
- RID=linux-x64 ; \
+ RID=linux-x64 ; \
elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then \
- RID=linux-arm64 ; \
+ RID=linux-arm64 ; \
elif [ "$TARGETPLATFORM" = "linux/arm/v7" ]; then \
- RID=linux-arm ; \
+ RID=linux-arm ; \
elif [ "$TARGETPLATFORM" = "linux/arm/v6" ]; then \
- RID=linux-arm ; \
+ RID=linux-arm ; \
fi \
- && echo "target $TARGETPLATFORM build $BUILDPLATFORM RID $RID" \
- && dotnet publish "tuya_mqtt.net.csproj" -r $RID --self-contained false -c Release -o /app/publish /p:UseAppHost=false
+ && echo "Publishing on $BUILDPLATFORM, targeting $TARGETPLATFORM" \
+ && echo "Publishing on ${BUILDOS} and ${BUILDARCH} with optional variant ${BUILDVARIANT}" \
+ && echo "Targeting ${TARGETOS} and ${TARGETARCH} with optional variant ${TARGETVARIANT}" \
+ && echo "RID is ${RID}" \
+ && dotnet publish "tuya_mqtt.net.csproj" -r $RID --self-contained false -c Release --no-restore -o /app/publish /p:UseAppHost=false
-FROM base AS final
+FROM --platform=$TARGETPLATFORM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
diff --git a/tuya_mqtt.net/tuya_mqtt.net.csproj b/tuya_mqtt.net/tuya_mqtt.net.csproj
index 5bbfbda..21c6f17 100644
--- a/tuya_mqtt.net/tuya_mqtt.net.csproj
+++ b/tuya_mqtt.net/tuya_mqtt.net.csproj
@@ -9,6 +9,7 @@
..
../docker-compose.dcproj
true
+ linux-x64;linux-arm64;linux-arm;