Quick patch updates #87
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
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}} |