Skip to content

Update main_build-aspnetcore.yml #88

Update main_build-aspnetcore.yml

Update main_build-aspnetcore.yml #88

# 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}}