From 4dd4a8ede9fc5d8ea18840192538199d0ab7ee9c Mon Sep 17 00:00:00 2001 From: jtkech Date: Wed, 6 Dec 2023 07:24:03 +0100 Subject: [PATCH 1/7] Testing Docker Multi Targets --- .github/workflows/pr_ci.yml | 17 +++++++++++++++++ .github/workflows/preview_ci.yml | 4 ++-- .github/workflows/release_ci.yml | 4 ++-- Dockerfile | 8 +++++++- Dockerfile-linux-CI => Dockerfile-CI | 6 +++++- Dockerfile-windows-CI | 10 ---------- 6 files changed, 33 insertions(+), 16 deletions(-) rename Dockerfile-linux-CI => Dockerfile-CI (51%) delete mode 100644 Dockerfile-windows-CI diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index e41ff5cdb54..dfa58b131db 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -27,6 +27,23 @@ jobs: - name: Build run: | dotnet build -c Release + - name: Testing preview docker image for linux + shell: pwsh + if: matrix.os == 'ubuntu-latest' + run: | + Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item -Recurse -Confirm:$false + Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false + $output = [System.IO.Path]::GetFullPath("./.build/release") + dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 + docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:dev . + - name: Testing preview docker image for windows + if: matrix.os == 'windows-latest' + run: | + Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item -Recurse -Confirm:$false + Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false + $output = [System.IO.Path]::GetFullPath("./.build/release") + dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 + docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:dev . - name: Unit Tests run: | dotnet test -c Release --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj diff --git a/.github/workflows/preview_ci.yml b/.github/workflows/preview_ci.yml index e991162ad78..fa9c6929546 100644 --- a/.github/workflows/preview_ci.yml +++ b/.github/workflows/preview_ci.yml @@ -67,7 +67,7 @@ jobs: Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false $output = [System.IO.Path]::GetFullPath("./.build/release") dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 - docker build -f Dockerfile-linux-CI -t orchardproject/orchardcore-cms-linux:dev . + docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:dev . docker push orchardproject/orchardcore-cms-linux:dev - name: Deploy preview docker image for windows if: matrix.os == 'windows-latest' @@ -76,6 +76,6 @@ jobs: Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false $output = [System.IO.Path]::GetFullPath("./.build/release") dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 - docker build -f Dockerfile-windows-CI -t orchardproject/orchardcore-cms-windows:dev . + docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:dev . echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u="${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin docker push orchardproject/orchardcore-cms-windows:dev diff --git a/.github/workflows/release_ci.yml b/.github/workflows/release_ci.yml index 5848d6b0bdf..f3108da1c51 100644 --- a/.github/workflows/release_ci.yml +++ b/.github/workflows/release_ci.yml @@ -78,7 +78,7 @@ jobs: Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false $output = [System.IO.Path]::GetFullPath("./.build/release") dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 - docker build -f Dockerfile-linux-CI -t orchardproject/orchardcore-cms-linux:latest -t orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }} . + docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:latest -t orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }} . docker push orchardproject/orchardcore-cms-linux:latest docker push "orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }}" - name: Deploy preview docker image for windows @@ -88,7 +88,7 @@ jobs: Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false $output = [System.IO.Path]::GetFullPath("./.build/release") dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 - docker build -f Dockerfile-windows-CI -t orchardproject/orchardcore-cms-windows:latest -t orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }} . + docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:latest -t orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }} . echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u="${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin docker push orchardproject/orchardcore-cms-windows:latest docker push "orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }}" diff --git a/Dockerfile b/Dockerfile index 0c1f69e2ce3..85b899d1c23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,6 @@ +FROM --platform=$BUILDPLATFORM golang:alpine AS build +ARG TARGETOS + FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env LABEL stage=build-env WORKDIR /app @@ -7,7 +10,10 @@ COPY ./src /app RUN dotnet publish /app/OrchardCore.Cms.Web -c Release -o ./build/release --framework net8.0 # Build runtime image -FROM mcr.microsoft.com/dotnet/aspnet:8.0 +FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS build_windows +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS build_linux +FROM build_${TARGETOS} AS aspnet + EXPOSE 80 ENV ASPNETCORE_URLS http://+:80 WORKDIR /app diff --git a/Dockerfile-linux-CI b/Dockerfile-CI similarity index 51% rename from Dockerfile-linux-CI rename to Dockerfile-CI index 1a019b53864..f118690e976 100644 --- a/Dockerfile-linux-CI +++ b/Dockerfile-CI @@ -1,7 +1,11 @@ # This Docker file is intended for the CI # A prerequisite is a published application in the .build/release +FROM --platform=$BUILDPLATFORM golang:alpine AS build +ARG TARGETOS -FROM mcr.microsoft.com/dotnet/aspnet:8.0 +FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS build_windows +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS build_linux +FROM build_${TARGETOS} AS aspnet EXPOSE 80 ENV ASPNETCORE_URLS http://+:80 diff --git a/Dockerfile-windows-CI b/Dockerfile-windows-CI deleted file mode 100644 index 4db8aab657d..00000000000 --- a/Dockerfile-windows-CI +++ /dev/null @@ -1,10 +0,0 @@ -# This Docker file is intended for the CI -# A prerequisite is a published application in the .build/release - -FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 - -EXPOSE 80 -ENV ASPNETCORE_URLS http://+:80 -WORKDIR /app -COPY .build/release /app -ENTRYPOINT ["dotnet", "OrchardCore.Cms.Web.dll"] From 943a153710eae6a6f2597bcd03833bde91b30e62 Mon Sep 17 00:00:00 2001 From: jtkech Date: Wed, 6 Dec 2023 08:15:07 +0100 Subject: [PATCH 2/7] Testing --- .github/workflows/pr_ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index dfa58b131db..b9c791662f2 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -27,6 +27,8 @@ jobs: - name: Build run: | dotnet build -c Release + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: Testing preview docker image for linux shell: pwsh if: matrix.os == 'ubuntu-latest' From 8121b83749135a477cd048706392941fff316bc6 Mon Sep 17 00:00:00 2001 From: jtkech Date: Wed, 6 Dec 2023 09:47:56 +0100 Subject: [PATCH 3/7] Testing --- .github/workflows/pr_ci.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index b9c791662f2..a4276445741 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -29,7 +29,7 @@ jobs: dotnet build -c Release - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Testing preview docker image for linux + - name: Testing preview docker image for linux and windows shell: pwsh if: matrix.os == 'ubuntu-latest' run: | @@ -38,13 +38,6 @@ jobs: $output = [System.IO.Path]::GetFullPath("./.build/release") dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:dev . - - name: Testing preview docker image for windows - if: matrix.os == 'windows-latest' - run: | - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item -Recurse -Confirm:$false - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false - $output = [System.IO.Path]::GetFullPath("./.build/release") - dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:dev . - name: Unit Tests run: | From d22bf440b536eb1381e989c091397030e2019d73 Mon Sep 17 00:00:00 2001 From: jtkech Date: Wed, 6 Dec 2023 09:57:58 +0100 Subject: [PATCH 4/7] Testing --- .github/workflows/pr_ci.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index a4276445741..8da4cafd52f 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -27,8 +27,6 @@ jobs: - name: Build run: | dotnet build -c Release - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - name: Testing preview docker image for linux and windows shell: pwsh if: matrix.os == 'ubuntu-latest' From 659df205d6ee5362394d6193eac454d4dd33b2d7 Mon Sep 17 00:00:00 2001 From: jtkech Date: Wed, 6 Dec 2023 10:04:43 +0100 Subject: [PATCH 5/7] Testing --- .github/workflows/pr_ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index 8da4cafd52f..6f1997f8a76 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -27,6 +27,9 @@ jobs: - name: Build run: | dotnet build -c Release + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + if: matrix.os == 'ubuntu-latest' - name: Testing preview docker image for linux and windows shell: pwsh if: matrix.os == 'ubuntu-latest' From f64d6a32a3642a69a9cce8bf174e64f7fe0aa32b Mon Sep 17 00:00:00 2001 From: jtkech Date: Wed, 6 Dec 2023 11:12:50 +0100 Subject: [PATCH 6/7] tweaks --- .github/workflows/pr_ci.yml | 14 -------------- .github/workflows/preview_ci.yml | 13 ++++--------- .github/workflows/release_ci.yml | 11 +++-------- 3 files changed, 7 insertions(+), 31 deletions(-) diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index 6f1997f8a76..7dcde8681af 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -27,19 +27,6 @@ jobs: - name: Build run: | dotnet build -c Release - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - if: matrix.os == 'ubuntu-latest' - - name: Testing preview docker image for linux and windows - shell: pwsh - if: matrix.os == 'ubuntu-latest' - run: | - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item -Recurse -Confirm:$false - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false - $output = [System.IO.Path]::GetFullPath("./.build/release") - dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 - docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:dev . - docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:dev . - name: Unit Tests run: | dotnet test -c Release --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj @@ -57,4 +44,3 @@ jobs: path: | test/OrchardCore.Tests.Functional/cms-tests/cypress/screenshots src/OrchardCore.Cms.Web/App_Data/logs - diff --git a/.github/workflows/preview_ci.yml b/.github/workflows/preview_ci.yml index fa9c6929546..3964b039ac3 100644 --- a/.github/workflows/preview_ci.yml +++ b/.github/workflows/preview_ci.yml @@ -53,13 +53,16 @@ jobs: run: | dotnet pack -c Release --no-build dotnet nuget push './src/**/*.nupkg' -t 600 -k ${{secrets.CLOUDSMITH_API_KEY}} -n -s https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json --skip-duplicate + - name: Set up Docker Buildx + if: matrix.os == 'ubuntu-latest' + uses: docker/setup-buildx-action@v3 - name: Login to DockerHub if: matrix.os == 'ubuntu-latest' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - - name: Deploy preview docker image for linux + - name: Deploy preview docker image for linux and windows shell: pwsh if: matrix.os == 'ubuntu-latest' run: | @@ -69,13 +72,5 @@ jobs: dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:dev . docker push orchardproject/orchardcore-cms-linux:dev - - name: Deploy preview docker image for windows - if: matrix.os == 'windows-latest' - run: | - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item -Recurse -Confirm:$false - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false - $output = [System.IO.Path]::GetFullPath("./.build/release") - dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:dev . - echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u="${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin docker push orchardproject/orchardcore-cms-windows:dev diff --git a/.github/workflows/release_ci.yml b/.github/workflows/release_ci.yml index f3108da1c51..eec7dbcfc18 100644 --- a/.github/workflows/release_ci.yml +++ b/.github/workflows/release_ci.yml @@ -64,6 +64,9 @@ jobs: run: | dotnet pack -c Release --no-build -p:Version=${{ steps.get_version.outputs.VERSION }} -p:TreatWarningsAsErrors=false dotnet nuget push './src/**/*.nupkg' -t 600 -k ${{secrets.NUGET_API_KEY}} -s https://api.nuget.org/v3/index.json --skip-duplicate + - name: Set up Docker Buildx + if: matrix.os == 'ubuntu-latest' + uses: docker/setup-buildx-action@v3 - name: Login to DockerHub if: matrix.os == 'ubuntu-latest' uses: docker/login-action@v1 @@ -81,14 +84,6 @@ jobs: docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:latest -t orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }} . docker push orchardproject/orchardcore-cms-linux:latest docker push "orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }}" - - name: Deploy preview docker image for windows - if: matrix.os == 'windows-latest' - run: | - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item -Recurse -Confirm:$false - Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item -Recurse -Confirm:$false - $output = [System.IO.Path]::GetFullPath("./.build/release") - dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:latest -t orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }} . - echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u="${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin docker push orchardproject/orchardcore-cms-windows:latest docker push "orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }}" From d1622da9f8852f02a9f36ef7e118e4c7ab1bb948 Mon Sep 17 00:00:00 2001 From: jtkech Date: Wed, 6 Dec 2023 22:58:02 +0100 Subject: [PATCH 7/7] Keep 2 steps for deploying docker images --- .github/workflows/preview_ci.yml | 6 +++++- .github/workflows/release_ci.yml | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/preview_ci.yml b/.github/workflows/preview_ci.yml index 3964b039ac3..ae20d190767 100644 --- a/.github/workflows/preview_ci.yml +++ b/.github/workflows/preview_ci.yml @@ -62,7 +62,7 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - - name: Deploy preview docker image for linux and windows + - name: Deploy preview docker image for linux shell: pwsh if: matrix.os == 'ubuntu-latest' run: | @@ -72,5 +72,9 @@ jobs: dotnet publish -c Release --property:PublishDir=$output --no-build --framework net8.0 docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:dev . docker push orchardproject/orchardcore-cms-linux:dev + - name: Deploy preview docker image for windows + shell: pwsh + if: matrix.os == 'ubuntu-latest' + run: | docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:dev . docker push orchardproject/orchardcore-cms-windows:dev diff --git a/.github/workflows/release_ci.yml b/.github/workflows/release_ci.yml index eec7dbcfc18..24074a6d2c3 100644 --- a/.github/workflows/release_ci.yml +++ b/.github/workflows/release_ci.yml @@ -84,6 +84,10 @@ jobs: docker buildx build -f Dockerfile-CI --platform=linux/amd64 -t orchardproject/orchardcore-cms-linux:latest -t orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }} . docker push orchardproject/orchardcore-cms-linux:latest docker push "orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }}" + - name: Deploy release docker image for windows + shell: pwsh + if: matrix.os == 'ubuntu-latest' + run: | docker buildx build -f Dockerfile-CI --platform=windows/amd64 -t orchardproject/orchardcore-cms-windows:latest -t orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }} . docker push orchardproject/orchardcore-cms-windows:latest docker push "orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }}"