From d2826549252317115bdd46305ae0909123899089 Mon Sep 17 00:00:00 2001 From: Tigran TIKSN Torosyan Date: Wed, 1 Jan 2025 11:09:38 -0600 Subject: [PATCH 1/5] Make docker file multi-platform --- src/API.Web/Dockerfile | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/API.Web/Dockerfile b/src/API.Web/Dockerfile index 7b5fbca3..61b642c4 100644 --- a/src/API.Web/Dockerfile +++ b/src/API.Web/Dockerfile @@ -1,7 +1,15 @@ -FROM mcr.microsoft.com/dotnet/aspnet:9.0.9 +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:9.0.101 AS build +ARG TARGETARCH +WORKDIR /source +COPY --link . /source +RUN dotnet restore -a $TARGETARCH +WORKDIR /source/src/API.Web +RUN dotnet publish -a $TARGETARCH --no-restore -o /app + +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/aspnet:9.0.4 AS runtime RUN apt-get update && apt-get upgrade -y && apt-get install -y curl=7.88.1-10+deb12u14 && apt-get clean -WORKDIR /App -COPY . ./ +WORKDIR /app +COPY --link --from=build /app . USER app EXPOSE 8080 ENTRYPOINT ["dotnet", "API.Web.dll"] From 2eacdc9d9ef5709d0a096d9514a1b4226a69fa41 Mon Sep 17 00:00:00 2001 From: Tigran TIKSN Torosyan Date: Wed, 1 Jan 2025 11:14:01 -0600 Subject: [PATCH 2/5] Update script --- .build.ps1 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.build.ps1 b/.build.ps1 index 99515d0b..a2485122 100644 --- a/.build.ps1 +++ b/.build.ps1 @@ -65,8 +65,6 @@ Task Pack Build, Test, Ward, { $state = Import-Clixml -Path ".\.trash\$Instance\state.clixml" $dockerImageName = $state.DockerImageName $nextVersion = $state.NextVersion - $linuxX64BuildArtifactsFolder = $state.LinuxX64BuildArtifactsFolder - $linuxArm64BuildArtifactsFolder = $state.LinuxArm64BuildArtifactsFolder $dockerFilePath = Resolve-Path -Path '.\src\API.Web\Dockerfile' $dockerImageVersionTag = "$($dockerImageName):$nextVersion" @@ -77,7 +75,8 @@ Task Pack Build, Test, Ward, { $dockerImageVersionArchive = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\.trash\$Instance\artifacts\$dockerImageVersionArchiveName") $dockerImageLatestArchive = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\.trash\$Instance\artifacts\$dockerImageLatestArchiveName") - Exec { docker buildx build --file $dockerFilePath --tag $dockerImageVersionTag --tag $dockerImageLatestTag $linuxX64BuildArtifactsFolder } + Exec { docker buildx build --platform 'linux/amd64,linux/arm64' --file $dockerFilePath --tag $dockerImageVersionTag --tag $dockerImageLatestTag . } + Exec { docker image save --output $dockerImageVersionArchive $dockerImageVersionTag } Exec { docker image save --output $dockerImageLatestArchive $dockerImageLatestTag } @@ -324,7 +323,7 @@ Task Init { ContractsArtifactsFolder = $contractsArtifactsFolder LinuxX64BuildArtifactsFolder = $linuxX64BuildArtifactsFolder LinuxArm64BuildArtifactsFolder = $linuxArm64BuildArtifactsFolder - WinX64BuildArtifactsFolder = $winX64BuildArtifactsFolder + WinX64BuildArtifactsFolder = $winX64BuildArtifactsFolder DockerImageName = 'tiksn/fossa-api' DockerImageVersionTag = $null DockerImageLatestTag = $null From 57a5f64a10a17cdde883721a3fe3bdb9669f22f5 Mon Sep 17 00:00:00 2001 From: Tigran TIKSN Torosyan Date: Wed, 1 Jan 2025 16:35:12 -0600 Subject: [PATCH 3/5] Set up QEMU --- .github/workflows/cicd.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 2c7c315b..c8b87f4f 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -32,6 +32,8 @@ jobs: - name: "Install InvokeBuild Module" shell: pwsh run: Install-Module -Name InvokeBuild -Force + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 - name: "Restore" shell: pwsh run: .\restore.ps1 -Instance ${{github.run_id}} From 5e78ff8f23c1255aa662a32785be8588633ee358 Mon Sep 17 00:00:00 2001 From: Tigran TIKSN Torosyan Date: Wed, 1 Jan 2025 18:06:34 -0600 Subject: [PATCH 4/5] Set up Docker Buildx --- .github/workflows/cicd.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index c8b87f4f..f110810a 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -34,6 +34,8 @@ jobs: run: Install-Module -Name InvokeBuild -Force - name: Set up QEMU uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: "Restore" shell: pwsh run: .\restore.ps1 -Instance ${{github.run_id}} From 3629eec95b7893c839c961709cc98fb272c42240 Mon Sep 17 00:00:00 2001 From: Tigran TIKSN Torosyan Date: Wed, 1 Jan 2025 19:03:41 -0600 Subject: [PATCH 5/5] Load image --- .build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.build.ps1 b/.build.ps1 index a2485122..5f007924 100644 --- a/.build.ps1 +++ b/.build.ps1 @@ -75,7 +75,7 @@ Task Pack Build, Test, Ward, { $dockerImageVersionArchive = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\.trash\$Instance\artifacts\$dockerImageVersionArchiveName") $dockerImageLatestArchive = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\.trash\$Instance\artifacts\$dockerImageLatestArchiveName") - Exec { docker buildx build --platform 'linux/amd64,linux/arm64' --file $dockerFilePath --tag $dockerImageVersionTag --tag $dockerImageLatestTag . } + Exec { docker buildx build --platform 'linux/amd64,linux/arm64' --load --file $dockerFilePath --tag $dockerImageVersionTag --tag $dockerImageLatestTag . } Exec { docker image save --output $dockerImageVersionArchive $dockerImageVersionTag } Exec { docker image save --output $dockerImageLatestArchive $dockerImageLatestTag }