diff --git a/.build.ps1 b/.build.ps1 index 99515d0b..5f007924 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' --load --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 diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 2c7c315b..f110810a 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -32,6 +32,10 @@ jobs: - name: "Install InvokeBuild Module" shell: pwsh 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}} 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"]