Skip to content

Update MyAspNetCoreApp.csproj #89

Update MyAspNetCoreApp.csproj

Update MyAspNetCoreApp.csproj #89

name: Build ASP.NET Core and Reporting REST Service
on:
workflow_dispatch:
push:
branches:
- main
- "aspnetcore/*"
paths:
- 'src/AspNetCore/**/*'
- '.github/workflows/main_build-aspnetcore.yml'
env:
CONTAINER_BASE_IMAGE: "mcr.microsoft.com/dotnet/aspnet:8.0"
WORKING_DIRECTORY: "src/AspNetCore/MyAspNetCoreApp"
jobs:
##############################################
######## [Option A] DOCKER FILE BUILD ########
##############################################
# => Publishes to registry.hub.docker.com <= #
# A job that containerizes an ASP.NET Core web app with Relerik Reporting REST service and publish to Docker Hub
build_aspnetcore:
runs-on: ubuntu-22.04
permissions:
id-token: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Getting all my secrets from AKeyless is a personal choice, you can use GitHub Actions secrets instead.
- name: Fetch secrets from AKeyless
id: akeyless
uses: LanceMcCarthy/akeyless-action@v3
with:
access-id: ${{ secrets.AKEYLESS_JWT_ID }}
static-secrets: '{"/personal-keys/mccarthy/TELERIK_NUGET_KEY":"TELERIK_NUGET_KEY", "/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: Create Kendo license file in the appropriate project directory
run: |
cd src/AspNetCore/MyAspNetCoreApp/wwwroot/js
echo ${{ steps.akeyless.outputs.KENDO_LICENSE_FILE }} > kendo-ui-license.js
- name: Verify tag output
run: echo ${{ steps.tag-creator.outputs.DOCKER_HUB_TAG }}
- 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: lancemccarthy/myaspnetcoreapp
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ steps.akeyless.outputs.DOCKER_HUB_USERNAME }}
password: ${{ steps.akeyless.outputs.DOCKER_HUB_PAT }}
- name: Build and push to Docker Hub
uses: docker/build-push-action@v5
with:
context: ${{env.WORKING_DIRECTORY}}
platforms: linux/arm64,linux/amd64
push: true
secrets: |
telerik_key=${{ steps.akeyless.outputs.TELERIK_NUGET_KEY }}
tags: |
lancemccarthy/myaspnetcoreapp:latest
##########################################################
######### [Option B] .NET SDK CONTAINER BUILD ############
##########################################################
# => Publishes to ghcr.io (GitHub container registry) <= #
build_x64:
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
outputs:
build_tag: ${{ steps.build.outputs.build_tag }}
env:
target_arch: "x64"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Login to GitHub Container Registry
run: docker login ghcr.io -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
- name: Restore NuGet Packages
working-directory: ${{env.WORKING_DIRECTORY}}
run: dotnet restore -r "linux-${{env.target_arch}}" --configfile "../../NuGet.Config"
env:
TELERIK_USERNAME: ${{secrets.MyTelerikAccountUsername}}
TELERIK_PASSWORD: ${{secrets.MyTelerikAccountPassword}}
- name: build the x64 image
id: build
working-directory: ${{env.WORKING_DIRECTORY}}
run: |
TAG="latest-${{env.target_arch}}"
# Build and publish arch-specific container
dotnet publish -t:PublishContainer -p PublishProfile=DefaultContainer --arch ${{env.target_arch}} -p ContainerImageTag="$TAG" -p ContainerRepository="lancemccarthy/myaspnetcoreapp" -p ContainerRegistry="ghcr.io" -p ContainerBaseImage=${{env.CONTAINER_BASE_IMAGE}} --no-restore
# Job output the arch-specific container name so we can publish a multi-arch image later
echo "build_tag=$TAG" >> $GITHUB_OUTPUT
build_arm64:
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
outputs:
build_tag: ${{ steps.build.outputs.build_tag }}
env:
target_arch: "arm64"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Login to GitHub Container Registry
run: docker login ghcr.io -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
- name: Restore NuGet Packages
working-directory: ${{env.WORKING_DIRECTORY}}
run: dotnet restore -r "linux-${{env.target_arch}}" --configfile "../../NuGet.Config"
env:
TELERIK_USERNAME: ${{secrets.MyTelerikAccountUsername}}
TELERIK_PASSWORD: ${{secrets.MyTelerikAccountPassword}}
- name: build the arm64 image
id: build
working-directory: ${{env.WORKING_DIRECTORY}}
run: |
TAG="latest-${{env.target_arch}}"
# Build and publish arch-specific container
dotnet publish -t:PublishContainer -p PublishProfile=DefaultContainer --arch ${{env.target_arch}} -p ContainerImageTag="$TAG" -p ContainerRepository="lancemccarthy/myaspnetcoreapp" -p ContainerRegistry="ghcr.io" -p ContainerBaseImage=${{env.CONTAINER_BASE_IMAGE}} --no-restore
# Job output the arch-specific container name so we can publish a multi-arch image later
echo "build_tag=$TAG" >> $GITHUB_OUTPUT
publish_combined_manifest:
runs-on: ubuntu-22.04
needs: [build_x64, build_arm64]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Login to GitHub Container Registry
run: docker login ghcr.io -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
- name: create the multi-image manifest
run: |
docker manifest create "ghcr.io/lancemccarthy/myaspnetcoreapp:latest" \
"ghcr.io/lancemccarthy/myaspnetcoreapp:$X86_TAG" \
"ghcr.io/lancemccarthy/myaspnetcoreapp:$ARM64_TAG"
docker manifest push "ghcr.io/lancemccarthy/myaspnetcoreapp:latest"
env:
X86_TAG: ${{needs.build_x64.outputs.build_tag}}
ARM64_TAG: ${{needs.build_arm64.outputs.build_tag}}