Update main_build-aspnetcore.yml #88
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow has three examples (one for IIS, two using containers) | |
# [Option A] Typical IIS build & publish | |
# [Option B] DOCKER FILE BUILD - publishes the image to ghcr.io (GitHub container registry) | |
# [Option C] .NET SDK CONTAINER BUILD - publishes the image to Docker Hub | |
name: Blazor (with Reporting) | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- main | |
- "blazor/*" | |
paths: | |
- 'src/Blazor/**/*' | |
- '.github/workflows/main_build-blazor.yml' | |
permissions: | |
contents: read | |
packages: write # to publish to GitHub container registry | |
id-token: write # # JWT for Akeyless auth | |
env: | |
CONFIGURATION: Release | |
BLAZOR_PROJ_PATH: src/Blazor/MyBlazorApp/MyBlazorApp.csproj | |
TEST_PROJ_PATH: src/Blazor/MyBlazorApp.Tests/MyBlazorApp.Tests.csproj | |
NUGET_CONFIG_PATH: src/NuGet.Config | |
DOTNET_VERSION: "9.0.x" | |
CONTAINER_BASE_IMAGE: "lancemccarthy/skia-aspnet:9.0" | |
CONTAINER_IMAGE_NAME: "lancemccarthy/myblazorapp" | |
jobs: | |
##################################################### | |
######### [Option A] WINDOWS BUILD (IIS) ############ | |
##################################################### | |
build_windows: | |
runs-on: windows-2022 | |
env: | |
RID: win-x64 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup .NET Core SDK | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: ${{env.DOTNET_VERSION}} | |
- name: Restore NuGet Packages | |
run: | | |
dotnet restore ${{env.BLAZOR_PROJ_PATH}} --configfile ${{env.NUGET_CONFIG_PATH}} -r ${{env.RID}} | |
dotnet restore ${{env.TEST_PROJ_PATH}} --configfile ${{env.NUGET_CONFIG_PATH}} -r ${{env.RID}} | |
env: | |
TELERIK_USERNAME: "api-key" | |
TELERIK_PASSWORD: ${{secrets.TELERIK_NUGET_KEY}} | |
- name: Build Test Project | |
run: dotnet build ${{env.TEST_PROJ_PATH}} -c ${{env.CONFIGURATION}} -r ${{env.RID}} --no-restore | |
env: | |
TELERIK_LICENSE: ${{secrets.TELERIK_LICENSE_KEY}} | |
###################################################### | |
############ [Option B] DOCKER FILE BUILD ############ | |
###################################################### | |
# Publishes to ghcr.io (GitHub) | |
build_container_with_dockerfile: | |
name: "Dockerfile container build" | |
runs-on: ubuntu-22.04 | |
env: | |
CONTAINER_IMAGE_REGISTRY: "ghcr.io" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Generate tag version | |
id: tag-creator | |
run: | | |
buildDay=`date +%Y.%m.%d` | |
tags="$buildDay.$GITHUB_RUN_NUMBER" | |
echo "VERSION_TAG=$tags" >> $GITHUB_OUTPUT | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Get package metadata from Docker Hub | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: ${{env.CONTAINER_REPOSITORY}} | |
- name: Login to ghcr.io | |
uses: docker/#-action@v3 | |
with: | |
registry: ${{env.CONTAINER_IMAGE_REGISTRY}} | |
username: ${{github.actor}} | |
password: ${{secrets.GITHUB_TOKEN}} | |
- name: Build and Publish arm64, amd64 Container Images | |
uses: docker/build-push-action@v5 | |
with: | |
context: src/Blazor/MyBlazorApp | |
platforms: linux/arm64,linux/amd64 | |
push: true | |
secrets: | | |
telerik-nuget-key=${{secrets.TELERIK_NUGET_KEY}} | |
telerik-license-key=${{secrets.TELERIK_LICENSE_KEY}} | |
tags: | | |
"${{env.CONTAINER_IMAGE_REGISTRY}}/${{env.CONTAINER_IMAGE_NAME}}:${{steps.tag-creator.outputs.VERSION_TAG}}" | |
"${{env.CONTAINER_IMAGE_REGISTRY}}/${{env.CONTAINER_IMAGE_NAME}}:latest" | |
########################################################## | |
######### [Option C] .NET SDK CONTAINER BUILD ############ | |
########################################################## | |
# Publishes to registry.hub.docker.com (Docker hub) | |
build_container_with_dotnet: | |
name: ".NET SDK Container build" | |
runs-on: ubuntu-22.04 | |
env: | |
CONTAINER_REGISTRY: "registry.hub.docker.com" | |
CONTAINER_ARCH: "x64" | |
CONTAINER_OS: "linux" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup .NET Core SDK | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: ${{env.DOTNET_VERSION}} | |
- name: Restore NuGet Packages | |
run: | | |
dotnet restore ${{env.BLAZOR_PROJ_PATH}} --configfile ${{env.NUGET_CONFIG_PATH}} -r "${{env.CONTAINER_OS}}-${{env.CONTAINER_ARCH}}" | |
dotnet restore ${{env.TEST_PROJ_PATH}} --configfile ${{env.NUGET_CONFIG_PATH}} -r "${{env.CONTAINER_OS}}-${{env.CONTAINER_ARCH}}" | |
env: | |
TELERIK_USERNAME: "api-key" | |
TELERIK_PASSWORD: ${{secrets.TELERIK_NUGET_KEY}} | |
- name: Fetch secrets from AKeyless | |
id: akeyless | |
uses: LanceMcCarthy/akeyless-action@v3 | |
with: | |
access-id: ${{secrets.AKEYLESS_JWT_ID}} | |
static-secrets: | | |
{ | |
"/personal-keys/mccarthy/DOCKER_HUB_USERNAME":"DOCKER_HUB_USERNAME", | |
"/personal-keys/mccarthy/DOCKER_HUB_PAT":"DOCKER_HUB_PAT" | |
} | |
export-secrets-to-outputs: true | |
export-secrets-to-environment: false | |
- name: Login to Docker Hub | |
run: docker login ${{env.CONTAINER_REGISTRY}} -u ${{steps.akeyless.outputs.DOCKER_HUB_USERNAME}} -p ${{steps.akeyless.outputs.DOCKER_HUB_PAT}} | |
# https://learn.microsoft.com/en-us/dotnet/core/docker/publish-as-container | |
- name: Publish Blazor Project to Docker Hub | |
run: | | |
dotnet publish ${{env.BLAZOR_PROJ_PATH}} \ | |
-c ${{env.CONFIGURATION}} \ | |
--no-restore \ | |
--os ${{env.CONTAINER_OS}} \ | |
--arch ${{env.CONTAINER_ARCH}} \ | |
-p PublishProfile=DefaultContainer \ | |
-p ContainerRuntimeIdentifier="${{env.CONTAINER_OS}}-${{env.CONTAINER_ARCH}}" \ | |
-p ContainerRegistry=${{env.CONTAINER_REGISTRY}} \ | |
-p ContainerRepository=${{env.CONTAINER_IMAGE_NAME}} \ | |
-p ContainerImageTag="latest" \ | |
-p ContainerBaseImage=${{env.CONTAINER_BASE_IMAGE}} | |
env: | |
TELERIK_LICENSE: ${{secrets.TELERIK_LICENSE_KEY}} |