Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
bdfa220
Add images to EasyCaching article with Angular dashboard hero and Swa…
workcontrolgit Mar 12, 2026
e481022
Update images in EasyCaching article - use employee swagger screensho…
workcontrolgit Mar 12, 2026
479068c
Add AI Enhancement tutorial plan, Series 6 and 7 folder structure
workcontrolgit Mar 15, 2026
a148bf2
Fix duplicate divider in SERIES-NAVIGATION-TOC between Series 5 and 6
workcontrolgit Mar 16, 2026
4640c61
Add article 6.1: Run a Local LLM in Your .NET 10 API with Ollama
workcontrolgit Mar 16, 2026
5a1b001
Update AI enhancement plan checklist: mark 6.1 and Phase 0 complete
workcontrolgit Mar 16, 2026
9d6db2f
Fix employee-form image link in POM article; update ApiResources subm…
workcontrolgit Mar 18, 2026
062465d
Standardize Series 4 sections: remove Summary, rename Key Patterns to…
workcontrolgit Mar 18, 2026
1082267
Update 4.5 hero image to use swagger-api-endpoints webapi screenshot
workcontrolgit Mar 18, 2026
cb19305
Add Azure OIDC automation script and update deployment docs with Angu…
workcontrolgit Mar 21, 2026
f926885
Standardize Series 5 sections: remove Summary, rename Key Patterns to…
workcontrolgit Mar 21, 2026
0532278
Add Key Design Decisions section to 5.1 database seeding article
workcontrolgit Mar 21, 2026
9983dc7
Elaborate Playwright seeding section in 5.1: request fixture, beforeA…
workcontrolgit Mar 21, 2026
4c665c9
Fix seed endpoint URL, auth requirement, and request format in 5.1 Pl…
workcontrolgit Mar 21, 2026
a0fc6ab
Update ApiResources submodule reference
workcontrolgit Mar 21, 2026
9f20808
Add Series 5 Azure deployment sub-series (5.3-5.8) to blog plan
workcontrolgit Mar 21, 2026
3eee1e7
Add articles 5.3 and 5.4 with Bicep infrastructure files
workcontrolgit Mar 21, 2026
b02e522
Add articles 5.5-5.8 and GitHub Actions deployment workflows
workcontrolgit Mar 22, 2026
bd50fa6
Update Angular submodule ref: add staticwebapp.config.json
workcontrolgit Mar 22, 2026
02e0697
Add bicep
workcontrolgit Mar 25, 2026
657e303
Merge branch 'feature/6.1-dotnet-ai-foundation' into develop
workcontrolgit Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions .github/workflows/deploy-angular.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Deploy Angular to Azure Static Web Apps

on:
push:
branches:
- main
paths:
- 'Clients/TalentManagement-Angular-Material/**'
- '.github/workflows/deploy-angular.yml'
workflow_dispatch:

permissions:
id-token: write # Required for OIDC token request
contents: read

env:
ANGULAR_APP_DIR: 'Clients/TalentManagement-Angular-Material/talent-management'
STATIC_WEB_APP_NAME: 'swa-talent-ui-dev'
RESOURCE_GROUP: 'rg-talent-dev'

jobs:
build-and-deploy:
name: Build and Deploy Angular
runs-on: ubuntu-latest

steps:
- name: Checkout repository (with submodules)
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22.x'
cache: 'npm'
cache-dependency-path: '${{ env.ANGULAR_APP_DIR }}/package-lock.json'

- name: Install dependencies
working-directory: ${{ env.ANGULAR_APP_DIR }}
run: npm ci

- name: Inject production environment variables
working-directory: ${{ env.ANGULAR_APP_DIR }}
env:
API_URL: ${{ secrets.API_APP_URL }}
IDENTITY_SERVER_URL: ${{ secrets.IDENTITY_SERVER_URL }}
run: |
sed -i "s|https://your-production-api.com/api/v1|${API_URL}/api/v1|g" src/environments/environment.prod.ts
sed -i "s|https://localhost:44310|${IDENTITY_SERVER_URL}|g" src/environments/environment.prod.ts

- name: Build Angular (production)
working-directory: ${{ env.ANGULAR_APP_DIR }}
run: npm run build -- --configuration production

- name: Log in to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: Get Static Web App deployment token
id: swa-token
run: |
SWA_TOKEN=$(az staticwebapp secrets list \
--name ${{ env.STATIC_WEB_APP_NAME }} \
--resource-group ${{ env.RESOURCE_GROUP }} \
--query properties.apiKey \
--output tsv)
echo "token=${SWA_TOKEN}" >> $GITHUB_OUTPUT

- name: Deploy to Azure Static Web Apps
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ steps.swa-token.outputs.token }}
action: upload
app_location: 'Clients/TalentManagement-Angular-Material/talent-management'
output_location: 'dist/talent-management/browser'
skip_app_build: true
84 changes: 84 additions & 0 deletions .github/workflows/deploy-api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Deploy .NET API to Azure App Service

on:
push:
branches:
- main
paths:
- 'ApiResources/TalentManagement-API/**'
- '.github/workflows/deploy-api.yml'
workflow_dispatch:

permissions:
id-token: write # Required for OIDC token request
contents: read

env:
DOTNET_VERSION: '10.x'
PROJECT_PATH: 'ApiResources/TalentManagement-API/TalentManagementAPI.WebApi/TalentManagementAPI.WebApi.csproj'
SOLUTION_PATH: 'ApiResources/TalentManagement-API/TalentManagementAPI.slnx'
PUBLISH_DIR: '${{ github.workspace }}/publish/api'
APP_SERVICE_NAME: 'app-talent-api-dev'
RESOURCE_GROUP: 'rg-talent-dev'

jobs:
build-and-deploy:
name: Build, Test, and Deploy API
runs-on: ubuntu-latest

steps:
- name: Checkout repository (with submodules)
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up .NET ${{ env.DOTNET_VERSION }}
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Restore dependencies
run: dotnet restore ${{ env.SOLUTION_PATH }}

- name: Build
run: dotnet build ${{ env.SOLUTION_PATH }} --configuration Release --no-restore

- name: Run unit tests
run: dotnet test ${{ env.SOLUTION_PATH }} --configuration Release --no-build --verbosity normal

- name: Publish
run: |
dotnet publish ${{ env.PROJECT_PATH }} \
--configuration Release \
--no-build \
--output ${{ env.PUBLISH_DIR }}

- name: Log in to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: Configure App Service settings
run: |
az webapp config appsettings set \
--resource-group ${{ env.RESOURCE_GROUP }} \
--name ${{ env.APP_SERVICE_NAME }} \
--settings \
"ConnectionStrings__DefaultConnection=${{ secrets.API_DB_CONNECTION_STRING }}" \
"Sts__ServerUrl=${{ secrets.IDENTITY_SERVER_URL }}" \
"Sts__ValidIssuer=${{ secrets.IDENTITY_SERVER_URL }}" \
"Sts__Audience=app.api.talentmanagement" \
"JWTSettings__Key=${{ secrets.JWT_KEY }}" \
"JWTSettings__Issuer=CoreIdentity" \
"JWTSettings__Audience=CoreIdentityUser" \
"JWTSettings__DurationInMinutes=60" \
"FeatureManagement__AuthEnabled=true" \
"ASPNETCORE_ENVIRONMENT=Production"

- name: Deploy to Azure App Service
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.APP_SERVICE_NAME }}
package: ${{ env.PUBLISH_DIR }}
76 changes: 76 additions & 0 deletions .github/workflows/deploy-identityserver.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Deploy IdentityServer to Azure App Service

on:
push:
branches:
- main
paths:
- 'TokenService/Duende-IdentityServer/**'
- '.github/workflows/deploy-identityserver.yml'
workflow_dispatch:

permissions:
id-token: write # Required for OIDC token request
contents: read

env:
DOTNET_VERSION: '8.x'
STS_PROJECT_PATH: 'TokenService/Duende-IdentityServer/src/DuendeIdentityServer.STS.Identity/DuendeIdentityServer.STS.Identity.csproj'
ADMIN_PROJECT_PATH: 'TokenService/Duende-IdentityServer/src/DuendeIdentityServer.Admin/DuendeIdentityServer.Admin.csproj'
PUBLISH_DIR: '${{ github.workspace }}/publish/ids'
APP_SERVICE_NAME: 'app-talent-ids-dev'
RESOURCE_GROUP: 'rg-talent-dev'

jobs:
build-and-deploy:
name: Build, Test, and Deploy IdentityServer
runs-on: ubuntu-latest

steps:
- name: Checkout repository (with submodules)
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up .NET ${{ env.DOTNET_VERSION }}
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Restore dependencies
run: dotnet restore ${{ env.STS_PROJECT_PATH }}

- name: Build
run: dotnet build ${{ env.STS_PROJECT_PATH }} --configuration Release --no-restore

- name: Publish
run: |
dotnet publish ${{ env.STS_PROJECT_PATH }} \
--configuration Release \
--no-build \
--output ${{ env.PUBLISH_DIR }}

- name: Log in to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: Configure App Service settings
run: |
az webapp config appsettings set \
--resource-group ${{ env.RESOURCE_GROUP }} \
--name ${{ env.APP_SERVICE_NAME }} \
--settings \
"ConnectionStrings__ConfigurationDbConnection=${{ secrets.IDS_DB_CONNECTION_STRING }}" \
"ConnectionStrings__PersistedGrantDbConnection=${{ secrets.IDS_DB_CONNECTION_STRING }}" \
"ConnectionStrings__IdentityDbConnection=${{ secrets.IDS_DB_CONNECTION_STRING }}" \
"AdminConfiguration__IdentityServerBaseUrl=${{ secrets.IDENTITY_SERVER_URL }}" \
"ASPNETCORE_ENVIRONMENT=Production"

- name: Deploy to Azure App Service
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.APP_SERVICE_NAME }}
package: ${{ env.PUBLISH_DIR }}
Loading
Loading