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;