Skip to content

Update MySite.Web.csproj #127

Update MySite.Web.csproj

Update MySite.Web.csproj #127

# This demo has two container build & publish examples
# [Option A] DOCKER FILE BUILD - publishes the image to Docker Hub
# [Option B] .NET SDK CONTAINER BUILD - publishes the image to ghcr.io (GitHub container registry)
name: ASP.NET Core (with Reporting)
on:
workflow_dispatch:
push:
branches:
- main
- "aspnetcore/*"
paths:
- 'src/AspNetCore/**/*'
- '.github/workflows/main_build-aspnetcore.yml'
permissions:
contents: read
packages: write # to publish to GitHub container registry
id-token: write # JWT for Akeyless auth
env:
CONTAINER_REPOSITORY: "lancemccarthy/myaspnetcoreapp"
WORKING_DIRECTORY: "src/AspNetCore/MyAspNetCoreApp"
DOTNET_VERSION: "9.0.x"
# Custom base image with Skia dependencies pre-installed, only used by the .NET SDK container build.
BASE_IMAGE_DOTNET_BUILD: "lancemccarthy/skia-aspnet:9.0"
jobs:
##############################################
# [Option A] DOCKERFILE BUILD #
##############################################
# Publishes to registry.hub.docker.com (Docker hub)
build_aspnetcore:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
# Using AKeyless for secrets, you can use GitHub Actions 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/TELERIK_LICENSE":"TELERIK_LICENSE_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: 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 DockerHub
uses: docker/#-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-nuget-key=${{steps.akeyless.outputs.TELERIK_NUGET_KEY}}
telerik-license-key=${{steps.akeyless.outputs.TELERIK_LICENSE_KEY}}
tags: |
${{env.CONTAINER_REPOSITORY}}:latest
- name: Delete old (untagged) images
run: |
IMAGE_TAGS=$(curl -s "https://hub.docker.com/v2/repositories/${{env.CONTAINER_REPOSITORY}}/tags/?page_size=100" | jq -r '.results|.[]|.name')
for TAGG in $IMAGE_TAGS; do
if [[ "$TAGG" == "null" ]]; then
docker rmi "${{env.CONTAINER_REPOSITORY}}:$TAGG"
curl -s -X DELETE "https://hub.docker.com/v2/repositories/${{env.CONTAINER_REPOSITORY}}/tags/$TAGG/"
fi
done
##########################################################
# [Option B] .NET SDK CONTAINER BUILD #
##########################################################
# => Publishes to ghcr.io (GitHub)
build_x64:
runs-on: ubuntu-22.04
outputs:
build_tag: ${{steps.build.outputs.build_tag}}
env:
target_arch: "x64"
CONTAINER_REGISTRY: "ghcr.io"
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: Login to GitHub Container Registry
run: docker login ${{env.CONTAINER_REGISTRY}} -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
- name: Restore NuGet Packages
working-directory: ${{env.WORKING_DIRECTORY}}
run: dotnet restore -r "linux-${{env.target_arch}}"
env:
TELERIK_USERNAME: "api-key"
TELERIK_PASSWORD: ${{secrets.TELERIK_NUGET_KEY}}
- name: build the x64 image
id: build
working-directory: ${{env.WORKING_DIRECTORY}}
run: |
TAG="latest-${{env.target_arch}}"
dotnet publish \
-t:PublishContainer \
-p PublishProfile=DefaultContainer \
--arch ${{env.target_arch}} \
-p ContainerImageTag="$TAG" \
-p ContainerRepository="${{env.CONTAINER_REPOSITORY}}" \
-p ContainerRegistry="${{env.CONTAINER_REGISTRY}}" \
-p ContainerBaseImage=${{env.BASE_IMAGE_DOTNET_BUILD}} \
--no-restore
echo "build_tag=$TAG" >> $GITHUB_OUTPUT
env:
TELERIK_LICENSE: ${{secrets.TELERIK_LICENSE_KEY}}
build_arm64:
runs-on: ubuntu-22.04
outputs:
build_tag: ${{steps.build.outputs.build_tag}}
env:
target_arch: "arm64"
CONTAINER_REGISTRY: "ghcr.io"
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: Login to GitHub Container Registry
run: docker login ${{env.CONTAINER_REGISTRY}} -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
- name: Restore NuGet Packages
working-directory: ${{env.WORKING_DIRECTORY}}
run: dotnet restore -r "linux-${{env.target_arch}}"
env:
TELERIK_USERNAME: "api-key"
TELERIK_PASSWORD: ${{secrets.TELERIK_NUGET_KEY}}
- name: build the arm64 image
id: build
working-directory: ${{env.WORKING_DIRECTORY}}
run: |
TAG="latest-${{env.target_arch}}"
dotnet publish -t:PublishContainer \
-p PublishProfile=DefaultContainer \
--arch ${{env.target_arch}} \
-p ContainerImageTag="$TAG" \
-p ContainerRepository="${{env.CONTAINER_REPOSITORY}}" \
-p ContainerRegistry="${{env.CONTAINER_REGISTRY}}" \
-p ContainerBaseImage=${{env.BASE_IMAGE_DOTNET_BUILD}} \
--no-restore
echo "build_tag=$TAG" >> $GITHUB_OUTPUT
env:
TELERIK_LICENSE: ${{secrets.TELERIK_LICENSE_KEY}}
publish_combined_manifest:
runs-on: ubuntu-22.04
needs: [build_x64, build_arm64]
env:
CONTAINER_REGISTRY: "ghcr.io"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Login to GitHub Container Registry
run: docker login ${{env.CONTAINER_REGISTRY}} -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
- name: create the multi-image manifest
run: |
docker manifest create "${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:latest" \
"${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:$X86_TAG" \
"${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:$ARM64_TAG"
docker manifest push "${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:latest"
env:
X86_TAG: ${{needs.build_x64.outputs.build_tag}}
ARM64_TAG: ${{needs.build_arm64.outputs.build_tag}}
- name: Delete old Docker images
uses: actions/delete-package-versions@v5
with:
package-name: "myaspnetcoreapp"
package-type: container
min-versions-to-keep: 3
token: ${{secrets.GITHUB_TOKEN}}
# Matrix experiments
# dotnet_container_build:
# runs-on: ubuntu-22.04
# strategy:
# matrix:
# platform: [arm64, x64]
# outputs:
# tag_arm64: ${{steps.build.outputs.tag_arm64}}
# tag_x64: ${{steps.build.outputs.tag_x64}}
# env:
# CONTAINER_REGISTRY: "ghcr.io"
# TELERIK_LICENSE: ${{secrets.TELERIK_LICENSE_KEY}}
# 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: Login to GitHub Container Registry
# run: docker login ${{env.CONTAINER_REGISTRY}} -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
# - name: Restore NuGet Packages
# working-directory: ${{env.WORKING_DIRECTORY}}
# run: dotnet restore -r "linux-${{matrix.platform}}"
# env:
# TELERIK_USERNAME: "api-key"
# TELERIK_PASSWORD: ${{secrets.TELERIK_NUGET_KEY}}
# - name: Build the platform image
# id: build
# working-directory: ${{env.WORKING_DIRECTORY}}
# run: |
# # job output to reference this build later
# echo "tag_${{matrix.platform}}=${{matrix.platform}}" >> "$GITHUB_OUTPUT"
# dotnet publish -t:PublishContainer -p PublishProfile=DefaultContainer --arch ${{matrix.platform}} -p ContainerImageTag="${{matrix.platform}}" -p ContainerRepository=${{env.CONTAINER_REPOSITORY}} -p ContainerRegistry=${{env.CONTAINER_REGISTRY}} -p ContainerBaseImage=${{env.BASE_IMAGE_DOTNET_BUILD}} --no-restore
# publish_combined_manifest:
# runs-on: ubuntu-22.04
# needs: [dotnet_container_build]
# env:
# CONTAINER_REGISTRY: "ghcr.io"
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# with:
# fetch-depth: 0
# - name: Login to GitHub Container Registry
# run: docker login ${{env.CONTAINER_REGISTRY}} -u ${{github.actor}} -p ${{secrets.GITHUB_TOKEN}}
# - name: Create multi-image manifest
# run: docker manifest create "${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:latest" \
# "${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:${{needs.dotnet_container_build.outputs.tag_x64}}" \
# "${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:${{needs.dotnet_container_build.outputs.tag_arm64}}"
# - name: Publish manifest
# run: docker manifest push "${{env.CONTAINER_REGISTRY}}/${{env.CONTAINER_REPOSITORY}}:latest"