From a5724f5e050be5eb714803273dff85cf767a86bc Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 14:58:59 +0100 Subject: [PATCH 01/72] Add GitHub Actions workflow for backend deployment --- .../workflows/deploy-infra-and-apps.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml diff --git a/infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml b/infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml new file mode 100644 index 00000000..1cc0144f --- /dev/null +++ b/infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml @@ -0,0 +1,35 @@ +on: [push, workflow_dispatch] + +env: + AZURE_RG_NAME: rg-${{ vars.PROJECT_NAME }}-${{ vars.AZURE_RESOURCE_IDENTIFIER }} + +jobs: + deploy_infrastructure: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Login 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 }} + enable-AzPSSession: true + + - name: Create resource group if not exists + run: | + az group show --name ${{ env.AZURE_RG_NAME }} || + az group create --name ${{ env.AZURE_RG_NAME }} --location ${{ secrets.AZURE_REGION }} + + - name: Deploy bicep + id: bicep_deploy + uses: azure/arm-deploy@v2 + with: + subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} + region: ${{ secrets.AZURE_REGION }} + template: ./infrastructure/main.bicep + parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} + resourceGroupName: ${{ env.AZURE_RG_NAME }} From 41ec392ac84a2f72bce901a15146208a520f7694 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 15:01:41 +0100 Subject: [PATCH 02/72] infrastrcuture modules --- infrastructure/main.bicep | 32 +++++++++++++++++++++ infrastructure/modules/appService.bicep | 22 ++++++++++++++ infrastructure/modules/appServicePlan.bicep | 20 +++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 infrastructure/main.bicep create mode 100644 infrastructure/modules/appService.bicep create mode 100644 infrastructure/modules/appServicePlan.bicep diff --git a/infrastructure/main.bicep b/infrastructure/main.bicep new file mode 100644 index 00000000..22bac17a --- /dev/null +++ b/infrastructure/main.bicep @@ -0,0 +1,32 @@ +targetScope = 'resourceGroup' // We'll deploy the resources in the provided resource group + +// Parameters to easily construct resource names +param location string +param project string + +// Here we'll add an identifier to create a unique name for the App Service Plan, for example your trigram, so that everyone could deploy his own parkndeploy instance +param identifier string + +// Create the AppServicePlan through the AppServicePlan module +module appServicePlan 'modules/appServicePlan.bicep' = { + name: 'appServicePlan' + params: { + location: location + project: project + identifier: identifier + } +} + +// Create the AppService through the AppService module +module appService 'modules/appService.bicep' = { + name: 'appService' + params: { + location: location + project: project + identifier: identifier + planId: appServicePlan.outputs.planId // Use the appServicePlan output to get its id back => an App Service needs to reference its App Service Plan + } +} + +// Export App Service Name +output appServiceName string = appService.outputs.appServiceName diff --git a/infrastructure/modules/appService.bicep b/infrastructure/modules/appService.bicep new file mode 100644 index 00000000..40b49099 --- /dev/null +++ b/infrastructure/modules/appService.bicep @@ -0,0 +1,22 @@ +param location string +param project string +param identifier string + +// App Service Plan identifier that will host our App Service +param planId string + +resource app 'Microsoft.Web/sites@2022-03-01' = { + name: '${project}-app-${identifier}' + location: location + + properties: { + serverFarmId: planId + reserved: true + + siteConfig: { + linuxFxVersion: 'DOTNETCORE|9.0' // Specify to setup the .NET Core 9.0 runtime (used by our backend API) on the Linux machine under the hood + } + } +} + +output appServiceName string = app.name // Export the App Service name for deployment diff --git a/infrastructure/modules/appServicePlan.bicep b/infrastructure/modules/appServicePlan.bicep new file mode 100644 index 00000000..c9b43403 --- /dev/null +++ b/infrastructure/modules/appServicePlan.bicep @@ -0,0 +1,20 @@ +param location string +param project string +param identifier string + +resource plan 'Microsoft.Web/serverfarms@2022-09-01' = { + name: '${project}-plan-${identifier}' + location: location + + sku: { + name: 'F1' // We use F1 pricing plan (free one) as we don't need specific features + } + + kind: 'app,linux' // Allow to deploy on an App Service using Linux OS + + properties: { + reserved: true // Specifity of App Service with Linux OS + } +} + +output planId string = plan.id // Export the App Service identifier From 3faefdc61dc1205dd8d4f6131bfbabb0fcdad7f7 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 15:10:17 +0100 Subject: [PATCH 03/72] step 1 --- .github/workflows/deploy-infra-and-apps.yml | 84 +++++++++++++++++++ infrastructure/main.bicep | 2 +- .../workflows/deploy-infra-and-apps.yml | 35 -------- infrastructure/modules/appService.bicep | 2 +- infrastructure/modules/appServicePlan.bicep | 2 +- 5 files changed, 87 insertions(+), 38 deletions(-) create mode 100644 .github/workflows/deploy-infra-and-apps.yml delete mode 100644 infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml new file mode 100644 index 00000000..7f296647 --- /dev/null +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -0,0 +1,84 @@ +# Déclenche le workflow sur push ou déclenchement manuel +on: [push, workflow_dispatch] + +# Permissions pour OIDC + lecture du repo +permissions: + id-token: write + contents: read + +# Variables globales pour le workflow +env: + AZURE_RG_NAME: rg-${{ vars.PROJECT_NAME }}-${{ vars.AZURE_RESOURCE_IDENTIFIER }} + +jobs: + # -------------------------- + # Job 1 : Déployer l'infrastructure + # -------------------------- + deploy_infrastructure: + runs-on: ubuntu-latest + environment: production # Utilisation de ton Federated Credential + + # Exposer le nom de l'App Service pour le job backend + outputs: + appServiceName: ${{ steps.bicep_deploy.outputs.appServiceName }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Login 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 }} + enable-AzPSSession: true + + - name: Create resource group if not exists + run: | + az group show --name ${{ env.AZURE_RG_NAME }} || + az group create --name ${{ env.AZURE_RG_NAME }} --location ${{ secrets.AZURE_REGION }} + + - name: Deploy bicep + id: bicep_deploy + uses: azure/arm-deploy@v2 + with: + subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + region: ${{ secrets.AZURE_REGION }} + template: ./infrastructure/main.bicep + parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} + resourceGroupName: ${{ env.AZURE_RG_NAME }} + + # -------------------------- + # Job 2 : Déployer le backend API + # -------------------------- + deploy_backend: + runs-on: ubuntu-latest + needs: deploy_infrastructure + environment: production + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET SDK 9.0.x + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Publish the app + run: dotnet publish -c Release --property:PublishDir=publish + working-directory: ./backend + + - name: Login 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: Deploy backend to App Service + uses: azure/webapps-deploy@v2 + with: + app-name: ${{ needs.deploy_infrastructure.outputs.appServiceName }} + package: ./backend/ParkNDeploy.Api/publish diff --git a/infrastructure/main.bicep b/infrastructure/main.bicep index 22bac17a..22252465 100644 --- a/infrastructure/main.bicep +++ b/infrastructure/main.bicep @@ -29,4 +29,4 @@ module appService 'modules/appService.bicep' = { } // Export App Service Name -output appServiceName string = appService.outputs.appServiceName +output appServiceName string = appService.outputs.appServiceName \ No newline at end of file diff --git a/infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml b/infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml deleted file mode 100644 index 1cc0144f..00000000 --- a/infrastructure/modules/.github/workflows/deploy-infra-and-apps.yml +++ /dev/null @@ -1,35 +0,0 @@ -on: [push, workflow_dispatch] - -env: - AZURE_RG_NAME: rg-${{ vars.PROJECT_NAME }}-${{ vars.AZURE_RESOURCE_IDENTIFIER }} - -jobs: - deploy_infrastructure: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Login 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 }} - enable-AzPSSession: true - - - name: Create resource group if not exists - run: | - az group show --name ${{ env.AZURE_RG_NAME }} || - az group create --name ${{ env.AZURE_RG_NAME }} --location ${{ secrets.AZURE_REGION }} - - - name: Deploy bicep - id: bicep_deploy - uses: azure/arm-deploy@v2 - with: - subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} - region: ${{ secrets.AZURE_REGION }} - template: ./infrastructure/main.bicep - parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} - resourceGroupName: ${{ env.AZURE_RG_NAME }} diff --git a/infrastructure/modules/appService.bicep b/infrastructure/modules/appService.bicep index 40b49099..740e0841 100644 --- a/infrastructure/modules/appService.bicep +++ b/infrastructure/modules/appService.bicep @@ -19,4 +19,4 @@ resource app 'Microsoft.Web/sites@2022-03-01' = { } } -output appServiceName string = app.name // Export the App Service name for deployment +output appServiceName string = app.name // Export the App Service name for deployment \ No newline at end of file diff --git a/infrastructure/modules/appServicePlan.bicep b/infrastructure/modules/appServicePlan.bicep index c9b43403..c871995f 100644 --- a/infrastructure/modules/appServicePlan.bicep +++ b/infrastructure/modules/appServicePlan.bicep @@ -17,4 +17,4 @@ resource plan 'Microsoft.Web/serverfarms@2022-09-01' = { } } -output planId string = plan.id // Export the App Service identifier +output planId string = plan.id // Export the App Service identifier \ No newline at end of file From 2302399b28873d057282832f315765fa5b7022c6 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 15:46:46 +0100 Subject: [PATCH 04/72] deploy statical web app --- .github/workflows/deploy-infra-and-apps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 7f296647..0727a460 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -43,10 +43,10 @@ jobs: id: bicep_deploy uses: azure/arm-deploy@v2 with: - subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} region: ${{ secrets.AZURE_REGION }} template: ./infrastructure/main.bicep - parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} + parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} swaLocation=${{ secrets.AZURE_SWA_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} resourceGroupName: ${{ env.AZURE_RG_NAME }} # -------------------------- From 0f57ef660aac07908e95aeef63ac8afa70c30cfa Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 15:47:17 +0100 Subject: [PATCH 05/72] deploy statical web app step --- infrastructure/main.bicep | 16 +++++++++++++++- infrastructure/modules/staticwebApp.bicep | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 infrastructure/modules/staticwebApp.bicep diff --git a/infrastructure/main.bicep b/infrastructure/main.bicep index 22252465..72320337 100644 --- a/infrastructure/main.bicep +++ b/infrastructure/main.bicep @@ -7,6 +7,9 @@ param project string // Here we'll add an identifier to create a unique name for the App Service Plan, for example your trigram, so that everyone could deploy his own parkndeploy instance param identifier string +// Static web app location +param swaLocation string + // Create the AppServicePlan through the AppServicePlan module module appServicePlan 'modules/appServicePlan.bicep' = { name: 'appServicePlan' @@ -28,5 +31,16 @@ module appService 'modules/appService.bicep' = { } } +// Create the Static Web App through the StaticWebApp module +module staticWebApp 'modules/staticWebApp.bicep' = { + name: 'staticWebApp' + params: { + location: swaLocation + project: project + identifier: identifier + } +} // Export App Service Name -output appServiceName string = appService.outputs.appServiceName \ No newline at end of file +output appServiceName string = appService.outputs.appServiceName +output appServiceName string = appService.outputs.appServiceName // Export AppServiceName in order to deploy the API later on +output staticWebAppName string = staticWebApp.outputs.swaName // Export StaticWebAppName in order to deploy the Frontend late \ No newline at end of file diff --git a/infrastructure/modules/staticwebApp.bicep b/infrastructure/modules/staticwebApp.bicep new file mode 100644 index 00000000..6e3be365 --- /dev/null +++ b/infrastructure/modules/staticwebApp.bicep @@ -0,0 +1,16 @@ +param location string +param project string +param identifier string + +resource swa 'Microsoft.Web/staticSites@2024-04-01 ' = { + name: '${project}-swa-${identifier}' + location: location + + sku: { + name: 'Free' + } + + properties: {} // Even empty, it's mandatory ... +} + +output swaName string = swa.name // Expose Static Web App name as we did for App Service for deployment purpose \ No newline at end of file From c8d44953d714d520ed92ce6c52f836c4329efddc Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:51:21 +0100 Subject: [PATCH 06/72] Rename staticwebApp.bicep to staticWebApp.bicep --- .../modules/{staticwebApp.bicep => staticWebApp.bicep} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename infrastructure/modules/{staticwebApp.bicep => staticWebApp.bicep} (87%) diff --git a/infrastructure/modules/staticwebApp.bicep b/infrastructure/modules/staticWebApp.bicep similarity index 87% rename from infrastructure/modules/staticwebApp.bicep rename to infrastructure/modules/staticWebApp.bicep index 6e3be365..58806c9e 100644 --- a/infrastructure/modules/staticwebApp.bicep +++ b/infrastructure/modules/staticWebApp.bicep @@ -13,4 +13,4 @@ resource swa 'Microsoft.Web/staticSites@2024-04-01 ' = { properties: {} // Even empty, it's mandatory ... } -output swaName string = swa.name // Expose Static Web App name as we did for App Service for deployment purpose \ No newline at end of file +output swaName string = swa.name // Expose Static Web App name as we did for App Service for deployment purpose From e4f6febd7b4005a76906ea4f682517bb9e8f1d69 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 15:55:48 +0100 Subject: [PATCH 07/72] duplicate app name on bicep main correction --- infrastructure/main.bicep | 1 - 1 file changed, 1 deletion(-) diff --git a/infrastructure/main.bicep b/infrastructure/main.bicep index 72320337..4b1e64e9 100644 --- a/infrastructure/main.bicep +++ b/infrastructure/main.bicep @@ -42,5 +42,4 @@ module staticWebApp 'modules/staticWebApp.bicep' = { } // Export App Service Name output appServiceName string = appService.outputs.appServiceName -output appServiceName string = appService.outputs.appServiceName // Export AppServiceName in order to deploy the API later on output staticWebAppName string = staticWebApp.outputs.swaName // Export StaticWebAppName in order to deploy the Frontend late \ No newline at end of file From d804cc56fe7c540ff1a357fe09a883cbd46877f1 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:05:41 +0100 Subject: [PATCH 08/72] static web app bicep file review --- infrastructure/modules/staticWebApp.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infrastructure/modules/staticWebApp.bicep b/infrastructure/modules/staticWebApp.bicep index 58806c9e..cd780056 100644 --- a/infrastructure/modules/staticWebApp.bicep +++ b/infrastructure/modules/staticWebApp.bicep @@ -2,7 +2,7 @@ param location string param project string param identifier string -resource swa 'Microsoft.Web/staticSites@2024-04-01 ' = { +resource swa 'Microsoft.Web/staticSites@2024-04-01' = { name: '${project}-swa-${identifier}' location: location From 13e7c569ef779bf72b3c8b04448d9e6698d0f179 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:13:11 +0100 Subject: [PATCH 09/72] deploy front end --- .github/workflows/deploy-infra-and-apps.yml | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 0727a460..0beec4e2 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -21,6 +21,7 @@ jobs: # Exposer le nom de l'App Service pour le job backend outputs: appServiceName: ${{ steps.bicep_deploy.outputs.appServiceName }} + staticWebAppName: ${{ steps.bicep_deploy.outputs.staticWebAppName }} steps: - name: Checkout repository @@ -82,3 +83,34 @@ jobs: with: app-name: ${{ needs.deploy_infrastructure.outputs.appServiceName }} package: ./backend/ParkNDeploy.Api/publish + + + + #deploy front end + deploy_frontend: + runs-on: ubuntu-latest + needs: deploy_infrastructure + environment: production + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Build the app + run: npm install && npm run build + working-directory: ./frontend + + - name: Login 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: Deploy frontend to Static Web App + uses: azure/static-web-apps-deploy@v1 + with: + app_location: frontend/dist + action: upload + skip_app_build: true + skip_api_build: true \ No newline at end of file From 817abbb36a3d2e1eb85387aa06f5619567971043 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:20:46 +0100 Subject: [PATCH 10/72] front end deploy --- .github/workflows/deploy-infra-and-apps.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 0beec4e2..ea2e624e 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -34,6 +34,11 @@ jobs: tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} enable-AzPSSession: true + + - name: Get Static Web App deployment token + run: | + SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) + echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV - name: Create resource group if not exists run: | From 78aacd398e2d176d99f97044f6e1eb0805280dac Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Wed, 14 Jan 2026 16:24:31 +0100 Subject: [PATCH 11/72] Update deploy-infra-and-apps.yml --- .github/workflows/deploy-infra-and-apps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index ea2e624e..45b0dc38 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -35,7 +35,7 @@ jobs: subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} enable-AzPSSession: true - - name: Get Static Web App deployment token + - name: Get Static Web App deployment token run: | SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV @@ -118,4 +118,4 @@ jobs: app_location: frontend/dist action: upload skip_app_build: true - skip_api_build: true \ No newline at end of file + skip_api_build: true From 97aa1c3daab9d8e69fa05ca4fd04dba6967e9d46 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:26:36 +0100 Subject: [PATCH 12/72] review gitflow yaml --- .github/workflows/deploy-infra-and-apps.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index ea2e624e..5f102d8c 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -40,6 +40,7 @@ jobs: SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV + - name: Create resource group if not exists run: | az group show --name ${{ env.AZURE_RG_NAME }} || From 3cdb024b6d5d389d348e6132c2999926ea0a6533 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:29:34 +0100 Subject: [PATCH 13/72] review yaml gitflow file --- .github/workflows/deploy-infra-and-apps.yml | 155 ++++++++++---------- 1 file changed, 77 insertions(+), 78 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 4af81491..49315c6f 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -24,37 +24,36 @@ jobs: staticWebAppName: ${{ steps.bicep_deploy.outputs.staticWebAppName }} steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Login 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 }} - enable-AzPSSession: true - - - name: Get Static Web App deployment token - run: | - SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) - echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV - - - - name: Create resource group if not exists - run: | - az group show --name ${{ env.AZURE_RG_NAME }} || - az group create --name ${{ env.AZURE_RG_NAME }} --location ${{ secrets.AZURE_REGION }} - - - name: Deploy bicep - id: bicep_deploy - uses: azure/arm-deploy@v2 - with: - subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} - region: ${{ secrets.AZURE_REGION }} - template: ./infrastructure/main.bicep - parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} swaLocation=${{ secrets.AZURE_SWA_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} - resourceGroupName: ${{ env.AZURE_RG_NAME }} + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Login 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 }} + enable-AzPSSession: true + + - name: Get Static Web App deployment token + run: | + SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) + echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV + + - name: Create resource group if not exists + run: | + az group show --name ${{ env.AZURE_RG_NAME }} || + az group create --name ${{ env.AZURE_RG_NAME }} --location ${{ secrets.AZURE_REGION }} + + - name: Deploy bicep + id: bicep_deploy + uses: azure/arm-deploy@v2 + with: + subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} + region: ${{ secrets.AZURE_REGION }} + template: ./infrastructure/main.bicep + parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} swaLocation=${{ secrets.AZURE_SWA_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} + resourceGroupName: ${{ env.AZURE_RG_NAME }} # -------------------------- # Job 2 : Déployer le backend API @@ -65,58 +64,58 @@ jobs: environment: production steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup .NET SDK 9.0.x - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '9.0.x' - - - name: Publish the app - run: dotnet publish -c Release --property:PublishDir=publish - working-directory: ./backend - - - name: Login 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: Checkout repository + uses: actions/checkout@v4 - - name: Deploy backend to App Service - uses: azure/webapps-deploy@v2 - with: - app-name: ${{ needs.deploy_infrastructure.outputs.appServiceName }} - package: ./backend/ParkNDeploy.Api/publish - - + - name: Setup .NET SDK 9.0.x + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Publish the app + run: dotnet publish -c Release --property:PublishDir=publish + working-directory: ./backend + + - name: Login 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: Deploy backend to App Service + uses: azure/webapps-deploy@v2 + with: + app-name: ${{ needs.deploy_infrastructure.outputs.appServiceName }} + package: ./backend/ParkNDeploy.Api/publish - #deploy front end + # -------------------------- + # Job 3 : Déployer le frontend + # -------------------------- deploy_frontend: runs-on: ubuntu-latest needs: deploy_infrastructure environment: production steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Build the app - run: npm install && npm run build - working-directory: ./frontend - - - name: Login 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: Deploy frontend to Static Web App - uses: azure/static-web-apps-deploy@v1 - with: - app_location: frontend/dist - action: upload - skip_app_build: true - skip_api_build: true + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Build the app + run: npm install && npm run build + working-directory: ./frontend + + - name: Login 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: Deploy frontend to Static Web App + uses: azure/static-web-apps-deploy@v1 + with: + app_location: frontend/dist + action: upload + skip_app_build: true + skip_api_build: true From b64f73d9e573c427efb1f3a8d6330e3d15719779 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:37:49 +0100 Subject: [PATCH 14/72] review yaml workflow --- .github/workflows/deploy-infra-and-apps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 49315c6f..0727516f 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -21,7 +21,7 @@ jobs: # Exposer le nom de l'App Service pour le job backend outputs: appServiceName: ${{ steps.bicep_deploy.outputs.appServiceName }} - staticWebAppName: ${{ steps.bicep_deploy.outputs.staticWebAppName }} + staticWebAppName: ${{ steps.bicep_deploy.outputs.swaName }} steps: - name: Checkout repository @@ -37,7 +37,7 @@ jobs: - name: Get Static Web App deployment token run: | - SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) + SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.swaName }} -o tsv --query properties.apiKey) echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV - name: Create resource group if not exists From 663e67a1132818708aa3842260cf1af2997a0267 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:50:33 +0100 Subject: [PATCH 15/72] review yaml code --- .github/workflows/deploy-infra-and-apps.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 0727516f..a8a030c6 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -21,7 +21,7 @@ jobs: # Exposer le nom de l'App Service pour le job backend outputs: appServiceName: ${{ steps.bicep_deploy.outputs.appServiceName }} - staticWebAppName: ${{ steps.bicep_deploy.outputs.swaName }} + staticWebAppName: ${{ steps.bicep_deploy.outputs.staticWebAppName }} steps: - name: Checkout repository @@ -37,7 +37,7 @@ jobs: - name: Get Static Web App deployment token run: | - SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.swaName }} -o tsv --query properties.apiKey) + SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV - name: Create resource group if not exists @@ -115,6 +115,7 @@ jobs: - name: Deploy frontend to Static Web App uses: azure/static-web-apps-deploy@v1 with: + azure_static_web_apps_api_token: ${{ env.SWA_DEPLOYMENT_TOKEN }} app_location: frontend/dist action: upload skip_app_build: true From 37cd7a23fd5026966c6a5679599df7ad979c5b88 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 16:58:55 +0100 Subject: [PATCH 16/72] correction workflow yaml --- .github/workflows/deploy-infra-and-apps.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index a8a030c6..f3728091 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -35,11 +35,6 @@ jobs: subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} enable-AzPSSession: true - - name: Get Static Web App deployment token - run: | - SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) - echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV - - name: Create resource group if not exists run: | az group show --name ${{ env.AZURE_RG_NAME }} || @@ -111,6 +106,11 @@ jobs: 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 + run: | + SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) + echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV - name: Deploy frontend to Static Web App uses: azure/static-web-apps-deploy@v1 From dc927efddbf7a3aff71cc6e651810dff476c1dd1 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 17:07:24 +0100 Subject: [PATCH 17/72] troubleshooting --- infrastructure/modules/appService.bicep | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/infrastructure/modules/appService.bicep b/infrastructure/modules/appService.bicep index 740e0841..dbe7a75b 100644 --- a/infrastructure/modules/appService.bicep +++ b/infrastructure/modules/appService.bicep @@ -19,4 +19,5 @@ resource app 'Microsoft.Web/sites@2022-03-01' = { } } -output appServiceName string = app.name // Export the App Service name for deployment \ No newline at end of file +output appServiceName string = app.name // Export the App Service name for deployment +output appServiceId string = app.id From 0d7907cda61c9e26cc1276c414b53d01898727a9 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 14 Jan 2026 17:07:45 +0100 Subject: [PATCH 18/72] troubleshooting frontend & backend --- infrastructure/main.bicep | 16 +++++++++++++++- infrastructure/modules/staticWebApp.bicep | 7 ++++--- infrastructure/modules/staticWebAppBackend.bicep | 11 +++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 infrastructure/modules/staticWebAppBackend.bicep diff --git a/infrastructure/main.bicep b/infrastructure/main.bicep index 4b1e64e9..1b58b1b6 100644 --- a/infrastructure/main.bicep +++ b/infrastructure/main.bicep @@ -40,6 +40,20 @@ module staticWebApp 'modules/staticWebApp.bicep' = { identifier: identifier } } + +// Previous resources +// ... +module staticWebAppBackend 'modules/staticWebAppBackend.bicep' = { + name: 'staticWebAppBackend' + params: { + backendBindedResourceId: appService.outputs.appServiceId + swaName: staticWebApp.outputs.swaName + location: location + } +} + +// Outputs +// ... // Export App Service Name output appServiceName string = appService.outputs.appServiceName -output staticWebAppName string = staticWebApp.outputs.swaName // Export StaticWebAppName in order to deploy the Frontend late \ No newline at end of file +output staticWebAppName string = staticWebApp.outputs.swaName // Export StaticWebAppName in order to deploy the Frontend late diff --git a/infrastructure/modules/staticWebApp.bicep b/infrastructure/modules/staticWebApp.bicep index cd780056..949c3043 100644 --- a/infrastructure/modules/staticWebApp.bicep +++ b/infrastructure/modules/staticWebApp.bicep @@ -6,9 +6,10 @@ resource swa 'Microsoft.Web/staticSites@2024-04-01' = { name: '${project}-swa-${identifier}' location: location - sku: { - name: 'Free' - } + sku: { + name: 'Standard' + tier: 'Standard' +} properties: {} // Even empty, it's mandatory ... } diff --git a/infrastructure/modules/staticWebAppBackend.bicep b/infrastructure/modules/staticWebAppBackend.bicep new file mode 100644 index 00000000..4e902770 --- /dev/null +++ b/infrastructure/modules/staticWebAppBackend.bicep @@ -0,0 +1,11 @@ +param backendBindedResourceId string +param swaName string +param location string + +resource staticWebAppBackend 'Microsoft.Web/staticSites/linkedBackends@2022-03-01' = { + name: '${swaName}/backend' + properties: { + backendResourceId: backendBindedResourceId + region: location + } +} From 7ded8b347f68e7ab5f24afbc8fd5e9a51b5798aa Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 09:25:09 +0100 Subject: [PATCH 19/72] ci: trigger deployment on semantic version tag --- .github/workflows/deploy-infra-and-apps.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index f3728091..1fc54729 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -1,5 +1,10 @@ # Déclenche le workflow sur push ou déclenchement manuel -on: [push, workflow_dispatch] +on: + push: + tags: + - 'v*.*.*' + workflow_dispatch: + # Permissions pour OIDC + lecture du repo permissions: From 07a64b3c09af4939e2fb900d0bfcd2ea0348ec49 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 09:58:05 +0100 Subject: [PATCH 20/72] tag deployment --- .github/workflows/deploy-infra-and-apps.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 1fc54729..aa936c02 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -2,7 +2,8 @@ on: push: tags: - - 'v*.*.*' + - 'v[0-9]+.[0-9]+.[0-9]+' + workflow_dispatch: From 6c9a846491288131bb2fd794bb001189ceae56f4 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 10:17:22 +0100 Subject: [PATCH 21/72] Add CI workflow for frontend and backend jobs --- .github/workflows/ci-pr.yml | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/workflows/ci-pr.yml diff --git a/.github/workflows/ci-pr.yml b/.github/workflows/ci-pr.yml new file mode 100644 index 00000000..4a7ddfeb --- /dev/null +++ b/.github/workflows/ci-pr.yml @@ -0,0 +1,54 @@ +# Déclenche le workflow uniquement sur Pull Requests vers la branche main +on: + pull_request: + branches: + - main + +# Permissions pour le workflow +permissions: + contents: read + +jobs: + # -------------------------- + # Job 1 : Frontend + # -------------------------- + frontend: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' # ou la version utilisée dans ton projet + + - name: Install dependencies + run: npm install + working-directory: ./frontend + + - name: Build frontend + run: npm run build + working-directory: ./frontend + + - name: Run linter + run: npm run lint + working-directory: ./frontend + + # -------------------------- + # Job 2 : Backend + # -------------------------- + backend: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Build backend + run: dotnet build -c Release + working-directory: ./backend From 8d841e298977f3620c347b78ccf9028d2ae68ae9 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 10:23:43 +0100 Subject: [PATCH 22/72] Refactor CI workflow for pull requests --- .github/workflows/ci-pr.yml | 56 ++++++++++++------------------------- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/.github/workflows/ci-pr.yml b/.github/workflows/ci-pr.yml index 4a7ddfeb..d28ee18e 100644 --- a/.github/workflows/ci-pr.yml +++ b/.github/workflows/ci-pr.yml @@ -1,54 +1,34 @@ -# Déclenche le workflow uniquement sur Pull Requests vers la branche main on: - pull_request: - branches: - - main - -# Permissions pour le workflow -permissions: - contents: read + pull_request: # Ce workflow se déclenche uniquement sur les MR jobs: - # -------------------------- - # Job 1 : Frontend - # -------------------------- - frontend: + ci_merge_request: runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '18' # ou la version utilisée dans ton projet - - name: Install dependencies - run: npm install - working-directory: ./frontend - - - name: Build frontend - run: npm run build - working-directory: ./frontend - - - name: Run linter - run: npm run lint - working-directory: ./frontend - - # -------------------------- - # Job 2 : Backend - # -------------------------- - backend: - runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 + # Backend - name: Setup .NET SDK uses: actions/setup-dotnet@v4 with: dotnet-version: '9.0.x' - name: Build backend - run: dotnet build -c Release + run: dotnet build --configuration Release working-directory: ./backend + + # Frontend + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + - name: Build frontend + run: npm install && npm run build + working-directory: ./frontend + + - name: Lint frontend + run: npm run lint + working-directory: ./frontend From 1362fbb1928bb116a39306d33ad4e02798d1ea1c Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 10:30:49 +0100 Subject: [PATCH 23/72] Test CI pipeline --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index 0a5274f1..19171662 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy + ParkNDeploy Testing CI
From e5c2d998fb9558fa83bb58377da78d840233ccae Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 10:58:44 +0100 Subject: [PATCH 24/72] Add CI release pipeline for frontend and backend --- .github/workflows/ci-release.yml | 67 ++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/ci-release.yml diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml new file mode 100644 index 00000000..1bbcd738 --- /dev/null +++ b/.github/workflows/ci-release.yml @@ -0,0 +1,67 @@ +name: CI Release Pipeline + +# Déclenche le pipeline sur push sur main ou manuellement +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + # -------------------------- + # Job 1 : Build frontend + # -------------------------- + build_frontend: + runs-on: ubuntu-latest + outputs: + frontend_artifact: ${{ steps.upload_frontend.outputs.artifact-path }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: 21 + + - name: Install dependencies + run: npm install + working-directory: ./frontend + + - name: Build frontend + run: npm run build + working-directory: ./frontend + + - name: Upload frontend artifact + id: upload_frontend + uses: actions/upload-artifact@v3 + with: + name: frontend-dist + path: ./frontend/dist + + # -------------------------- + # Job 2 : Build backend + # -------------------------- + build_backend: + runs-on: ubuntu-latest + outputs: + backend_artifact: ${{ steps.upload_backend.outputs.artifact-path }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Publish backend + run: dotnet publish -c Release --property:PublishDir=publish + working-directory: ./backend + + - name: Upload backend artifact + id: upload_backend + uses: actions/upload-artifact@v3 + with: + name: backend-publish + path: ./backend/ParkNDeploy.Api/publish From 6113315622bce98ce7242a6198eb1ff645f98be3 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:06:57 +0100 Subject: [PATCH 25/72] Refactor GitHub Actions workflow for deployment --- .github/workflows/deploy-infra-and-apps.yml | 23 ++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index aa936c02..3f4fc0e9 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -68,14 +68,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Setup .NET SDK 9.0.x - uses: actions/setup-dotnet@v4 + - name: Download backend artifact + uses: actions/download-artifact@v3 with: - dotnet-version: '9.0.x' - - - name: Publish the app - run: dotnet publish -c Release --property:PublishDir=publish - working-directory: ./backend + name: backend-publish + path: ./backend-publish - name: Login to Azure uses: azure/login@v2 @@ -88,7 +85,7 @@ jobs: uses: azure/webapps-deploy@v2 with: app-name: ${{ needs.deploy_infrastructure.outputs.appServiceName }} - package: ./backend/ParkNDeploy.Api/publish + package: ./backend-publish # -------------------------- # Job 3 : Déployer le frontend @@ -102,9 +99,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 - - name: Build the app - run: npm install && npm run build - working-directory: ./frontend + - name: Download frontend artifact + uses: actions/download-artifact@v3 + with: + name: frontend-dist + path: ./frontend/dist - name: Login to Azure uses: azure/login@v2 @@ -122,7 +121,7 @@ jobs: uses: azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ env.SWA_DEPLOYMENT_TOKEN }} - app_location: frontend/dist + app_location: ./frontend/dist action: upload skip_app_build: true skip_api_build: true From 7f2494597698107d06ee53acd04d88e0e7379b52 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:09:59 +0100 Subject: [PATCH 26/72] Add workflow_run trigger for CI Release Pipeline --- .github/workflows/deploy-infra-and-apps.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 3f4fc0e9..ce80cc11 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -3,6 +3,10 @@ on: push: tags: - 'v[0-9]+.[0-9]+.[0-9]+' + workflow_run: + workflows: ["CI Release Pipeline"] + types: + - completed workflow_dispatch: From ed9df4b89f00a98bcabff1dd7eacb4e8b599abd5 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:16:52 +0100 Subject: [PATCH 27/72] Upgrade download-artifact action to version 4 --- .github/workflows/deploy-infra-and-apps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index ce80cc11..bdceac48 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -73,7 +73,7 @@ jobs: uses: actions/checkout@v4 - name: Download backend artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: backend-publish path: ./backend-publish @@ -104,7 +104,7 @@ jobs: uses: actions/checkout@v4 - name: Download frontend artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: frontend-dist path: ./frontend/dist From 0a8d382977d0c0574a23198863c830caff4560a5 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:17:22 +0100 Subject: [PATCH 28/72] Upgrade upload-artifact action to version 4 --- .github/workflows/ci-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml index 1bbcd738..d2ef7679 100644 --- a/.github/workflows/ci-release.yml +++ b/.github/workflows/ci-release.yml @@ -34,7 +34,7 @@ jobs: - name: Upload frontend artifact id: upload_frontend - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: frontend-dist path: ./frontend/dist @@ -61,7 +61,7 @@ jobs: - name: Upload backend artifact id: upload_backend - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: backend-publish path: ./backend/ParkNDeploy.Api/publish From d8443cf2d905fefba25c0d833fadb27b2bd4a863 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 11:22:36 +0100 Subject: [PATCH 29/72] CI Release Pipeline --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index 0a5274f1..3c275104 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy + ParkNDeploy CI Release Pipeline
From 08383dc30d89e14d452b61ecaa61c14de17f0d55 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:45:20 +0100 Subject: [PATCH 30/72] Update workflow to remove tag push trigger Removed tag trigger for push events in workflow. --- .github/workflows/deploy-infra-and-apps.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index bdceac48..62be984b 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -1,8 +1,6 @@ # Déclenche le workflow sur push ou déclenchement manuel on: push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' workflow_run: workflows: ["CI Release Pipeline"] types: From 0669f317a924faa2a2e382872b304140e5e847dd Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:46:48 +0100 Subject: [PATCH 31/72] Update CI workflow trigger to version tags Change trigger from push on main branch to tags matching version pattern. --- .github/workflows/ci-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml index d2ef7679..80bbe40b 100644 --- a/.github/workflows/ci-release.yml +++ b/.github/workflows/ci-release.yml @@ -3,8 +3,8 @@ name: CI Release Pipeline # Déclenche le pipeline sur push sur main ou manuellement on: push: - branches: - - main + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' workflow_dispatch: jobs: From b918464eaa37550127dfc3a6a0c3f2d08ff23b71 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 11:47:49 +0100 Subject: [PATCH 32/72] CI RELEASE TEST --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index 3c275104..e9253416 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy CI Release Pipeline + ParkNDeploy CI Release Pipeline Test
From 8354964980e94dfaf60bcbc5931e2bc82241845c Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 11:51:07 +0100 Subject: [PATCH 33/72] Update workflow to trigger only on CI completion Remove push trigger from deploy workflow. --- .github/workflows/deploy-infra-and-apps.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 62be984b..83b213f2 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -1,6 +1,5 @@ # Déclenche le workflow sur push ou déclenchement manuel on: - push: workflow_run: workflows: ["CI Release Pipeline"] types: From bd0a64434673a330ec4297c74b2b6178aec94af7 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 11:51:47 +0100 Subject: [PATCH 34/72] CI CD WORKFLOW TEST --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index e9253416..cfac8f02 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy CI Release Pipeline Test + ParkNDeploy CI Release Pipeline Test
From 22fcd614fdf5e4a65f5ba6e8dac2950a66c80ca4 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 11:53:03 +0100 Subject: [PATCH 35/72] CICD PIPELINE --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index cfac8f02..f3ca30ed 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy CI Release Pipeline Test + ParkNDeploy CI Release Pipeline Test
From 8d8b62b697ee15752ddecd504d7ead643eb4fbf5 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:03:34 +0100 Subject: [PATCH 36/72] Remove unused workflow_dispatch event --- .github/workflows/deploy-infra-and-apps.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 83b213f2..8f064e86 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -5,9 +5,6 @@ on: types: - completed - workflow_dispatch: - - # Permissions pour OIDC + lecture du repo permissions: id-token: write From 892d6002f96a8dfec78ac19be990e8574bbd6bfd Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 12:04:29 +0100 Subject: [PATCH 37/72] CICD TEST --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index f3ca30ed..3103d584 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy CI Release Pipeline Test + ParkNDeploy CI Release Pipeline Test v1
From 4851934f56c393e712332901a73f923a2f0b90ab Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:17:57 +0100 Subject: [PATCH 38/72] Refactor GitHub Actions workflow for CI/CD --- .github/workflows/deploy-infra-and-apps.yml | 121 ++++++++++++++------ 1 file changed, 85 insertions(+), 36 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 8f064e86..a58778e2 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -1,9 +1,11 @@ -# Déclenche le workflow sur push ou déclenchement manuel +# -------------------------- +# Pipeline CI + CD unique +# Déclenche uniquement sur push d'un tag vMAJOR.MINOR.PATCH +# -------------------------- on: - workflow_run: - workflows: ["CI Release Pipeline"] - types: - - completed + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' # Permissions pour OIDC + lecture du repo permissions: @@ -15,36 +17,85 @@ env: AZURE_RG_NAME: rg-${{ vars.PROJECT_NAME }}-${{ vars.AZURE_RESOURCE_IDENTIFIER }} jobs: + + # -------------------------- + # CI Frontend : build & artifact + # -------------------------- + ci_frontend: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + - name: Install & Build Frontend + run: npm install && npm run build + working-directory: ./frontend + + - name: Upload Frontend Artifact + uses: actions/upload-artifact@v3 + with: + name: frontend-dist + path: ./frontend/dist + # -------------------------- - # Job 1 : Déployer l'infrastructure + # CI Backend : publish & artifact + # -------------------------- + ci_backend: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Publish Backend + run: dotnet publish -c Release --property:PublishDir=publish + working-directory: ./backend + + - name: Upload Backend Artifact + uses: actions/upload-artifact@v3 + with: + name: backend-publish + path: ./backend/publish + + # -------------------------- + # CD : Déployer l'infrastructure # -------------------------- deploy_infrastructure: runs-on: ubuntu-latest - environment: production # Utilisation de ton Federated Credential + needs: [ci_frontend, ci_backend] + environment: production - # Exposer le nom de l'App Service pour le job backend outputs: appServiceName: ${{ steps.bicep_deploy.outputs.appServiceName }} staticWebAppName: ${{ steps.bicep_deploy.outputs.staticWebAppName }} steps: - - name: Checkout repository + - name: Checkout uses: actions/checkout@v4 - - name: Login to Azure + - name: Login 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 }} - enable-AzPSSession: true + enable-AzPSSession: true - - name: Create resource group if not exists + - name: Create resource group if not exists run: | - az group show --name ${{ env.AZURE_RG_NAME }} || + az group show --name ${{ env.AZURE_RG_NAME }} || \ az group create --name ${{ env.AZURE_RG_NAME }} --location ${{ secrets.AZURE_REGION }} - - name: Deploy bicep + - name: Deploy Bicep id: bicep_deploy uses: azure/arm-deploy@v2 with: @@ -55,67 +106,65 @@ jobs: resourceGroupName: ${{ env.AZURE_RG_NAME }} # -------------------------- - # Job 2 : Déployer le backend API + # CD Backend : télécharger artifact & déployer # -------------------------- deploy_backend: runs-on: ubuntu-latest needs: deploy_infrastructure environment: production - steps: - - name: Checkout repository + - name: Checkout uses: actions/checkout@v4 - - - name: Download backend artifact - uses: actions/download-artifact@v4 + + - name: Download Backend Artifact + uses: actions/download-artifact@v3 with: name: backend-publish path: ./backend-publish - - name: Login to Azure + - name: Login 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: Deploy backend to App Service + + - name: Deploy Backend to App Service uses: azure/webapps-deploy@v2 - with: + with: app-name: ${{ needs.deploy_infrastructure.outputs.appServiceName }} package: ./backend-publish # -------------------------- - # Job 3 : Déployer le frontend + # CD Frontend : télécharger artifact & déployer # -------------------------- deploy_frontend: runs-on: ubuntu-latest needs: deploy_infrastructure environment: production - steps: - - name: Checkout repository + - name: Checkout uses: actions/checkout@v4 - - name: Download frontend artifact - uses: actions/download-artifact@v4 + - name: Download Frontend Artifact + uses: actions/download-artifact@v3 with: name: frontend-dist path: ./frontend/dist - - name: Login to Azure + - name: Login 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 - run: | + subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + - name: Get Static Web App Deployment Token + run: | SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) - echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV + echo "SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN" >> $GITHUB_ENV - - name: Deploy frontend to Static Web App + - name: Deploy Frontend to Static Web App uses: azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ env.SWA_DEPLOYMENT_TOKEN }} From f49454b3c1bcccee911c5911cc61eb146ecabac1 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:18:22 +0100 Subject: [PATCH 39/72] Delete .github/workflows/ci-release.yml --- .github/workflows/ci-release.yml | 67 -------------------------------- 1 file changed, 67 deletions(-) delete mode 100644 .github/workflows/ci-release.yml diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml deleted file mode 100644 index 80bbe40b..00000000 --- a/.github/workflows/ci-release.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: CI Release Pipeline - -# Déclenche le pipeline sur push sur main ou manuellement -on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' - workflow_dispatch: - -jobs: - # -------------------------- - # Job 1 : Build frontend - # -------------------------- - build_frontend: - runs-on: ubuntu-latest - outputs: - frontend_artifact: ${{ steps.upload_frontend.outputs.artifact-path }} - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: 21 - - - name: Install dependencies - run: npm install - working-directory: ./frontend - - - name: Build frontend - run: npm run build - working-directory: ./frontend - - - name: Upload frontend artifact - id: upload_frontend - uses: actions/upload-artifact@v4 - with: - name: frontend-dist - path: ./frontend/dist - - # -------------------------- - # Job 2 : Build backend - # -------------------------- - build_backend: - runs-on: ubuntu-latest - outputs: - backend_artifact: ${{ steps.upload_backend.outputs.artifact-path }} - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '9.0.x' - - - name: Publish backend - run: dotnet publish -c Release --property:PublishDir=publish - working-directory: ./backend - - - name: Upload backend artifact - id: upload_backend - uses: actions/upload-artifact@v4 - with: - name: backend-publish - path: ./backend/ParkNDeploy.Api/publish From c5f3cbb9dacfb8df74a063f6fb93fcd4192177b5 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:19:33 +0100 Subject: [PATCH 40/72] Upgrade GitHub Actions artifact upload/download to v4 --- .github/workflows/deploy-infra-and-apps.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index a58778e2..a122f04a 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -37,7 +37,7 @@ jobs: working-directory: ./frontend - name: Upload Frontend Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: frontend-dist path: ./frontend/dist @@ -61,7 +61,7 @@ jobs: working-directory: ./backend - name: Upload Backend Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: backend-publish path: ./backend/publish @@ -117,7 +117,7 @@ jobs: uses: actions/checkout@v4 - name: Download Backend Artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: backend-publish path: ./backend-publish @@ -147,7 +147,7 @@ jobs: uses: actions/checkout@v4 - name: Download Frontend Artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: frontend-dist path: ./frontend/dist From 6f0943bed065a1c315de8be2a91dac1e8406c59d Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 12:20:02 +0100 Subject: [PATCH 41/72] TEST CICD PIP --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index 3103d584..5b013455 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy CI Release Pipeline Test v1 + ParkNDeploy CI Release Pipeline Test v2
From 0ab2256be12cd96c3c4b8802906b046c0faecf21 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 21:05:58 +0100 Subject: [PATCH 42/72] REVIEW PIPELINE --- .github/workflows/deploy-infra-and-apps.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index a122f04a..c9c00a61 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -110,7 +110,7 @@ jobs: # -------------------------- deploy_backend: runs-on: ubuntu-latest - needs: deploy_infrastructure + needs: [deploy_infrastructure, ci_backend] environment: production steps: - name: Checkout @@ -140,7 +140,7 @@ jobs: # -------------------------- deploy_frontend: runs-on: ubuntu-latest - needs: deploy_infrastructure + needs: [deploy_infrastructure, ci_frontend] environment: production steps: - name: Checkout From 18df1802087e460b77c01d8db6d7e1e0340a2b77 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 21:14:05 +0100 Subject: [PATCH 43/72] REVIEW PIPELINE --- .github/workflows/deploy-infra-and-apps.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index c9c00a61..01b9f526 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -52,19 +52,22 @@ jobs: uses: actions/checkout@v4 - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 + uses: azure/setup-dotnet@v4 with: dotnet-version: '9.0.x' - name: Publish Backend - run: dotnet publish -c Release --property:PublishDir=publish + # On définit explicitement un dossier de sortie nommé "myapp" + run: dotnet publish -c Release -o ./myapp working-directory: ./backend - name: Upload Backend Artifact uses: actions/upload-artifact@v4 with: name: backend-publish - path: ./backend/publish + # Le chemin est relatif à la racine du repo, + # donc : dossier_working_dir / dossier_output + path: ./backend/myapp # -------------------------- # CD : Déployer l'infrastructure From 0be06f6125383c0e7795df1ae735e5dee7db57cd Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 21:17:15 +0100 Subject: [PATCH 44/72] REVIEW CICD WORKFLOW --- .github/workflows/deploy-infra-and-apps.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 01b9f526..8989a89c 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -52,12 +52,11 @@ jobs: uses: actions/checkout@v4 - name: Setup .NET SDK - uses: azure/setup-dotnet@v4 + uses: actions/setup-dotnet@v4 with: dotnet-version: '9.0.x' - name: Publish Backend - # On définit explicitement un dossier de sortie nommé "myapp" run: dotnet publish -c Release -o ./myapp working-directory: ./backend @@ -65,8 +64,6 @@ jobs: uses: actions/upload-artifact@v4 with: name: backend-publish - # Le chemin est relatif à la racine du repo, - # donc : dossier_working_dir / dossier_output path: ./backend/myapp # -------------------------- From f707bbeef6bd4989297109c59b82ae2ae75c4b88 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 22:23:02 +0100 Subject: [PATCH 45/72] feat: display app version --- .github/workflows/deploy-infra-and-apps.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 8989a89c..c2185468 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -34,6 +34,8 @@ jobs: - name: Install & Build Frontend run: npm install && npm run build + env: + VITE_APP_VERSION: ${{ github.ref_name }} working-directory: ./frontend - name: Upload Frontend Artifact From c6de362b602c75e5e5732795520a5a6f10c05771 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 22:23:10 +0100 Subject: [PATCH 46/72] feat: display app version --- frontend/src/App.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 986ff9bb..f885b20f 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -8,6 +8,7 @@ import { LoadingSpinner } from "@/components/ui/loadingspinner"; import ParkingListFilters from "@/components/ParkingList/ParkingListFilters"; import { useParkingSearchStore } from "@/stores/parkingSearchStore"; +const APP_VERSION = import.meta.env.VITE_APP_VERSION || 'local-dev'; function App() { const { parkingName } = useParkingSearchStore(); @@ -32,6 +33,11 @@ function App() { {isError && Something went wrong with the backend ...} {data && } + +
+ release: {APP_VERSION} +
+ ); } From 1fc0c7a754e001752d5f07f7a5dc735a25a009f6 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 22:25:47 +0100 Subject: [PATCH 47/72] feat: display app version --- frontend/src/App.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f885b20f..fa26e17b 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -32,12 +32,12 @@ function App() { {isPending && } {isError && Something went wrong with the backend ...} {data && } - - -
+ +
release: {APP_VERSION}
+ ); } From 6b1c7bcbe5fa8ef2bf73e6e2460a790bd0950a05 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Tue, 20 Jan 2026 23:10:22 +0100 Subject: [PATCH 48/72] Update code version --- .github/workflows/deploy-infra-and-apps.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index c2185468..4a17d537 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -23,15 +23,34 @@ jobs: # -------------------------- ci_frontend: runs-on: ubuntu-latest + permissions: + contents: write steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '21.7.1' + # 1. On change la version dans le fichier package.json localement + - name: Update package.json version + working-directory: ./frontend + run: npm version ${{ github.ref_name }} --no-git-tag-version + + # 2. On sauvegarde ce changement sur le dépôt GitHub + - name: Commit and Push version update + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add frontend/package.json + # Le [skip ci] est crucial pour ne pas relancer le pipeline en boucle ! + git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" + git push origin HEAD:main + - name: Install & Build Frontend run: npm install && npm run build env: From a5d98bc349e3c62c28338ecb6bdb74bf73d06c2f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 20 Jan 2026 22:11:11 +0000 Subject: [PATCH 49/72] chore: bump version to v7.7.7 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index a0946957..fa08982a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "0.0.0", + "version": "7.7.7", "type": "module", "scripts": { "dev": "vite --port 5175", From c8628c6ef85e4802f31deb39698b0a7ef86eb379 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 14:03:40 +0100 Subject: [PATCH 50/72] PIPELINE REFACTORING --- .github/workflows/deploy-infra-and-apps.yml | 38 ++++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 4a17d537..76688e1c 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -23,8 +23,6 @@ jobs: # -------------------------- ci_frontend: runs-on: ubuntu-latest - permissions: - contents: write steps: - name: Checkout uses: actions/checkout@v4 @@ -35,7 +33,25 @@ jobs: uses: actions/setup-node@v3 with: node-version: '21.7.1' + + - name: Install & Build Frontend + run: npm install && npm run build + env: + VITE_APP_VERSION: ${{ github.ref_name }} + working-directory: ./frontend + - name: Upload Frontend Artifact + uses: actions/upload-artifact@v4 + with: + name: frontend-dist + path: ./frontend/dist + + package_version: + runs-on: ubuntu-latest + permissions: + contents: write + needs: [ci_frontend] + steps: # 1. On change la version dans le fichier package.json localement - name: Update package.json version working-directory: ./frontend @@ -51,18 +67,6 @@ jobs: git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" git push origin HEAD:main - - name: Install & Build Frontend - run: npm install && npm run build - env: - VITE_APP_VERSION: ${{ github.ref_name }} - working-directory: ./frontend - - - name: Upload Frontend Artifact - uses: actions/upload-artifact@v4 - with: - name: frontend-dist - path: ./frontend/dist - # -------------------------- # CI Backend : publish & artifact # -------------------------- @@ -92,7 +96,7 @@ jobs: # -------------------------- deploy_infrastructure: runs-on: ubuntu-latest - needs: [ci_frontend, ci_backend] + needs: [ci_frontend, ci_backend, package_version] environment: production outputs: @@ -131,7 +135,7 @@ jobs: # -------------------------- deploy_backend: runs-on: ubuntu-latest - needs: [deploy_infrastructure, ci_backend] + needs: [deploy_infrastructure] environment: production steps: - name: Checkout @@ -161,7 +165,7 @@ jobs: # -------------------------- deploy_frontend: runs-on: ubuntu-latest - needs: [deploy_infrastructure, ci_frontend] + needs: [deploy_infrastructure] environment: production steps: - name: Checkout From e9e1b09d01e70f23b3c634876d85cb3b41919b85 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 14:06:43 +0100 Subject: [PATCH 51/72] PIPELINE REFACTORING --- .github/workflows/deploy-infra-and-apps.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 76688e1c..25af9956 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -52,6 +52,16 @@ jobs: contents: write needs: [ci_frontend] steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + # 1. On change la version dans le fichier package.json localement - name: Update package.json version working-directory: ./frontend From 2a439d972bf4b5859aa923c6d8f39711dd286f8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Jan 2026 13:08:06 +0000 Subject: [PATCH 52/72] chore: bump version to v7.7.8 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index fa08982a..93750466 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "7.7.7", + "version": "7.7.8", "type": "module", "scripts": { "dev": "vite --port 5175", From e537ee67f5eb50bba08d8533358d5031d953ddbb Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 14:36:28 +0100 Subject: [PATCH 53/72] Split CI and CD pipeline into two workflows --- .github/workflows/ci.yml | 89 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..0cf4771c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,89 @@ +name: ci_pipeline +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +jobs: + # -------------------------- + # CI Frontend : build & artifact + # -------------------------- + ci_frontend: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + - name: Install & Build Frontend + run: npm install && npm run build + env: + VITE_APP_VERSION: ${{ github.ref_name }} + working-directory: ./frontend + + - name: Upload Frontend Artifact + uses: actions/upload-artifact@v4 + with: + name: frontend-dist + path: ./frontend/dist + + package_version: + runs-on: ubuntu-latest + permissions: + contents: write + needs: [ci_frontend] + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + # 1. On change la version dans le fichier package.json localement + - name: Update package.json version + working-directory: ./frontend + run: npm version ${{ github.ref_name }} --no-git-tag-version + + # 2. On sauvegarde ce changement sur le dépôt GitHub + - name: Commit and Push version update + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add frontend/package.json + # Le [skip ci] est crucial pour ne pas relancer le pipeline en boucle ! + git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" + git push origin HEAD:main + + # -------------------------- + # CI Backend : publish & artifact + # -------------------------- + ci_backend: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Publish Backend + run: dotnet publish -c Release -o ./myapp + working-directory: ./backend + + - name: Upload Backend Artifact + uses: actions/upload-artifact@v4 + with: + name: backend-publish + path: ./backend/myapp \ No newline at end of file From d013b7fef618030d0dc097f9e8d847e29e7f4e97 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 14:36:42 +0100 Subject: [PATCH 54/72] Split CI and CD pipeline into two workflows --- .github/workflows/deploy-infra-and-apps.yml | 93 ++------------------- 1 file changed, 5 insertions(+), 88 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 25af9956..d27275bf 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -2,10 +2,12 @@ # Pipeline CI + CD unique # Déclenche uniquement sur push d'un tag vMAJOR.MINOR.PATCH # -------------------------- +name: cd_pipeline on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' + workflow_run: + workflows: ["ci_pipeline"] + types: + - completed # Permissions pour OIDC + lecture du repo permissions: @@ -17,96 +19,11 @@ env: AZURE_RG_NAME: rg-${{ vars.PROJECT_NAME }}-${{ vars.AZURE_RESOURCE_IDENTIFIER }} jobs: - - # -------------------------- - # CI Frontend : build & artifact - # -------------------------- - ci_frontend: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '21.7.1' - - - name: Install & Build Frontend - run: npm install && npm run build - env: - VITE_APP_VERSION: ${{ github.ref_name }} - working-directory: ./frontend - - - name: Upload Frontend Artifact - uses: actions/upload-artifact@v4 - with: - name: frontend-dist - path: ./frontend/dist - - package_version: - runs-on: ubuntu-latest - permissions: - contents: write - needs: [ci_frontend] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '21.7.1' - - # 1. On change la version dans le fichier package.json localement - - name: Update package.json version - working-directory: ./frontend - run: npm version ${{ github.ref_name }} --no-git-tag-version - - # 2. On sauvegarde ce changement sur le dépôt GitHub - - name: Commit and Push version update - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add frontend/package.json - # Le [skip ci] est crucial pour ne pas relancer le pipeline en boucle ! - git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" - git push origin HEAD:main - - # -------------------------- - # CI Backend : publish & artifact - # -------------------------- - ci_backend: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '9.0.x' - - - name: Publish Backend - run: dotnet publish -c Release -o ./myapp - working-directory: ./backend - - - name: Upload Backend Artifact - uses: actions/upload-artifact@v4 - with: - name: backend-publish - path: ./backend/myapp - # -------------------------- # CD : Déployer l'infrastructure # -------------------------- deploy_infrastructure: runs-on: ubuntu-latest - needs: [ci_frontend, ci_backend, package_version] environment: production outputs: From 5306b92b9e2b0a8bc5851fa69cec8fca623ef370 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 14:43:26 +0100 Subject: [PATCH 55/72] Split your CI and CD pipeline into two workflows --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index 5b013455..0a5274f1 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - ParkNDeploy CI Release Pipeline Test v2 + ParkNDeploy
From 823c0f8668bb8ab339ac939205db9d5db3d59394 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Jan 2026 13:44:38 +0000 Subject: [PATCH 56/72] chore: bump version to v7.7.9 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index 93750466..e19ffa95 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "7.7.8", + "version": "7.7.9", "type": "module", "scripts": { "dev": "vite --port 5175", From dea3b3fd36cd7e495b0b943cf5d4cac8dd9caa07 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 15:36:16 +0100 Subject: [PATCH 57/72] Least Privilege Principle --- .github/workflows/ci.yml | 89 ---------------------------------------- 1 file changed, 89 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 0cf4771c..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: ci_pipeline -on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' - -jobs: - # -------------------------- - # CI Frontend : build & artifact - # -------------------------- - ci_frontend: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '21.7.1' - - - name: Install & Build Frontend - run: npm install && npm run build - env: - VITE_APP_VERSION: ${{ github.ref_name }} - working-directory: ./frontend - - - name: Upload Frontend Artifact - uses: actions/upload-artifact@v4 - with: - name: frontend-dist - path: ./frontend/dist - - package_version: - runs-on: ubuntu-latest - permissions: - contents: write - needs: [ci_frontend] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '21.7.1' - - # 1. On change la version dans le fichier package.json localement - - name: Update package.json version - working-directory: ./frontend - run: npm version ${{ github.ref_name }} --no-git-tag-version - - # 2. On sauvegarde ce changement sur le dépôt GitHub - - name: Commit and Push version update - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add frontend/package.json - # Le [skip ci] est crucial pour ne pas relancer le pipeline en boucle ! - git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" - git push origin HEAD:main - - # -------------------------- - # CI Backend : publish & artifact - # -------------------------- - ci_backend: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '9.0.x' - - - name: Publish Backend - run: dotnet publish -c Release -o ./myapp - working-directory: ./backend - - - name: Upload Backend Artifact - uses: actions/upload-artifact@v4 - with: - name: backend-publish - path: ./backend/myapp \ No newline at end of file From 42eb0bf6d721ad3ea8edee122c5f4c1046d89f45 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 15:36:44 +0100 Subject: [PATCH 58/72] Least Privilege Principle --- .github/workflows/deploy-infra-and-apps.yml | 107 ++++++++++++++++++-- 1 file changed, 97 insertions(+), 10 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index d27275bf..f1dd2eb9 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -2,28 +2,115 @@ # Pipeline CI + CD unique # Déclenche uniquement sur push d'un tag vMAJOR.MINOR.PATCH # -------------------------- -name: cd_pipeline on: - workflow_run: - workflows: ["ci_pipeline"] - types: - - completed + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' -# Permissions pour OIDC + lecture du repo -permissions: - id-token: write - contents: read # Variables globales pour le workflow env: AZURE_RG_NAME: rg-${{ vars.PROJECT_NAME }}-${{ vars.AZURE_RESOURCE_IDENTIFIER }} jobs: + + # -------------------------- + # CI Frontend : build & artifact + # -------------------------- + ci_frontend: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + - name: Install & Build Frontend + run: npm install && npm run build + env: + VITE_APP_VERSION: ${{ github.ref_name }} + working-directory: ./frontend + + - name: Upload Frontend Artifact + uses: actions/upload-artifact@v4 + with: + name: frontend-dist + path: ./frontend/dist + + package_version: + runs-on: ubuntu-latest + permissions: + contents: write + needs: [ci_frontend] + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + # 1. On change la version dans le fichier package.json localement + - name: Update package.json version + working-directory: ./frontend + run: npm version ${{ github.ref_name }} --no-git-tag-version + + # 2. On sauvegarde ce changement sur le dépôt GitHub + - name: Commit and Push version update + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add frontend/package.json + # Le [skip ci] est crucial pour ne pas relancer le pipeline en boucle ! + git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" + git push origin HEAD:main + + # -------------------------- + # CI Backend : publish & artifact + # -------------------------- + ci_backend: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Publish Backend + run: dotnet publish -c Release -o ./myapp + working-directory: ./backend + + - name: Upload Backend Artifact + uses: actions/upload-artifact@v4 + with: + name: backend-publish + path: ./backend/myapp + # -------------------------- # CD : Déployer l'infrastructure # -------------------------- deploy_infrastructure: runs-on: ubuntu-latest + permissions: + id-token: write + contents: read + needs: [ci_frontend, ci_backend, package_version] environment: production outputs: @@ -123,4 +210,4 @@ jobs: app_location: ./frontend/dist action: upload skip_app_build: true - skip_api_build: true + skip_api_build: true \ No newline at end of file From 97e281e837ae9b466bc7344ddb78af9ed6920d19 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 15:39:50 +0100 Subject: [PATCH 59/72] Least Privilege Principle --- .github/workflows/deploy-infra-and-apps.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index f1dd2eb9..ff34ff7c 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -150,6 +150,9 @@ jobs: deploy_backend: runs-on: ubuntu-latest needs: [deploy_infrastructure] + permissions: + id-token: write + contents: read environment: production steps: - name: Checkout @@ -179,6 +182,9 @@ jobs: # -------------------------- deploy_frontend: runs-on: ubuntu-latest + permissions: + id-token: write + contents: read needs: [deploy_infrastructure] environment: production steps: From bfd3c87ef01295c730620c069e18bbbf432a4029 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Jan 2026 14:40:44 +0000 Subject: [PATCH 60/72] chore: bump version to v8.0.0 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index e19ffa95..3862339e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "7.7.9", + "version": "8.0.0", "type": "module", "scripts": { "dev": "vite --port 5175", From 6a1cec9c5ecbc97bba08718009a73dfa4ac29c2a Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 16:08:20 +0100 Subject: [PATCH 61/72] Split CI and CD pipeline into two workflows --- .github/workflows/ci.yml | 98 +++++++++++++++++++ .github/workflows/deploy-infra-and-apps.yml | 103 ++------------------ 2 files changed, 107 insertions(+), 94 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..8577cadd --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,98 @@ +# -------------------------- +# Pipeline CI +# Déclenche uniquement sur push d'un tag vMAJOR.MINOR.PATCH +# -------------------------- +name: "ci_pipeline" +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +jobs: + # -------------------------- + # CI Frontend : build & artifact + # -------------------------- + ci_frontend: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + - name: Install & Build Frontend + run: npm install && npm run build + env: + VITE_APP_VERSION: ${{ github.ref_name }} + working-directory: ./frontend + + - name: Upload Frontend Artifact + uses: actions/upload-artifact@v4 + with: + name: frontend-dist + path: ./frontend/dist + + package_version: + runs-on: ubuntu-latest + permissions: + contents: write + needs: [ci_frontend] + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '21.7.1' + + # 1. On change la version dans le fichier package.json localement + - name: Update package.json version + working-directory: ./frontend + run: npm version ${{ github.ref_name }} --no-git-tag-version + + # 2. On sauvegarde ce changement sur le dépôt GitHub + - name: Commit and Push version update + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git add frontend/package.json + # Le [skip ci] est crucial pour ne pas relancer le pipeline en boucle ! + git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" + git push origin HEAD:main + + # -------------------------- + # CI Backend : publish & artifact + # -------------------------- + ci_backend: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '9.0.x' + + - name: Publish Backend + run: dotnet publish -c Release -o ./myapp + working-directory: ./backend + + - name: Upload Backend Artifact + uses: actions/upload-artifact@v4 + with: + name: backend-publish + path: ./backend/myapp \ No newline at end of file diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index ff34ff7c..69bfd3b7 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -1,11 +1,12 @@ # -------------------------- -# Pipeline CI + CD unique -# Déclenche uniquement sur push d'un tag vMAJOR.MINOR.PATCH +# Pipeline CD +# Déclenche uniquement sur la complétion du CI pipeline # -------------------------- +name: "cd_pipeline" on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' + workflow_run: + workflows: ["ci_pipeline"] + types: [completed] # Variables globales pour le workflow @@ -14,103 +15,15 @@ env: jobs: - # -------------------------- - # CI Frontend : build & artifact - # -------------------------- - ci_frontend: - runs-on: ubuntu-latest - permissions: - contents: read - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '21.7.1' - - - name: Install & Build Frontend - run: npm install && npm run build - env: - VITE_APP_VERSION: ${{ github.ref_name }} - working-directory: ./frontend - - - name: Upload Frontend Artifact - uses: actions/upload-artifact@v4 - with: - name: frontend-dist - path: ./frontend/dist - - package_version: - runs-on: ubuntu-latest - permissions: - contents: write - needs: [ci_frontend] - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '21.7.1' - - # 1. On change la version dans le fichier package.json localement - - name: Update package.json version - working-directory: ./frontend - run: npm version ${{ github.ref_name }} --no-git-tag-version - - # 2. On sauvegarde ce changement sur le dépôt GitHub - - name: Commit and Push version update - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add frontend/package.json - # Le [skip ci] est crucial pour ne pas relancer le pipeline en boucle ! - git commit -m "chore: bump version to ${{ github.ref_name }} [skip ci]" - git push origin HEAD:main - - # -------------------------- - # CI Backend : publish & artifact - # -------------------------- - ci_backend: - runs-on: ubuntu-latest - permissions: - contents: read - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '9.0.x' - - - name: Publish Backend - run: dotnet publish -c Release -o ./myapp - working-directory: ./backend - - - name: Upload Backend Artifact - uses: actions/upload-artifact@v4 - with: - name: backend-publish - path: ./backend/myapp - # -------------------------- # CD : Déployer l'infrastructure # -------------------------- deploy_infrastructure: runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} permissions: id-token: write contents: read - needs: [ci_frontend, ci_backend, package_version] environment: production outputs: @@ -162,6 +75,7 @@ jobs: uses: actions/download-artifact@v4 with: name: backend-publish + run-id: ${{ github.event.workflow_run.id }} path: ./backend-publish - name: Login to Azure @@ -195,6 +109,7 @@ jobs: uses: actions/download-artifact@v4 with: name: frontend-dist + run-id: ${{ github.event.workflow_run.id }} path: ./frontend/dist - name: Login to Azure From 7300c13682e03766846198f6b6c0fd3fd7ca6846 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 16:14:15 +0100 Subject: [PATCH 62/72] Split CI & CD worfklows --- .github/workflows/deploy-infra-and-apps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 69bfd3b7..532c9565 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -6,7 +6,7 @@ name: "cd_pipeline" on: workflow_run: workflows: ["ci_pipeline"] - types: [completed] + types: completed # Variables globales pour le workflow From d1b52ca7d482055d7eb7339c6cdd07bcaca4a475 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Jan 2026 15:15:07 +0000 Subject: [PATCH 63/72] chore: bump version to v8.0.1 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index 3862339e..da286d1e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "8.0.0", + "version": "8.0.1", "type": "module", "scripts": { "dev": "vite --port 5175", From c3d02748106d5112d5b62a2f5372cb4b9ae81227 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 16:24:28 +0100 Subject: [PATCH 64/72] Split CI & CD Workflows --- .github/workflows/ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8577cadd..0f8fb3c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,7 @@ jobs: with: name: frontend-dist path: ./frontend/dist + retention-days: 1 package_version: runs-on: ubuntu-latest @@ -95,4 +96,5 @@ jobs: uses: actions/upload-artifact@v4 with: name: backend-publish - path: ./backend/myapp \ No newline at end of file + path: ./backend/myapp + retention-days: 1 \ No newline at end of file From d566c89f0cf6a957e6eb6d0744a150af65fda523 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 16:27:47 +0100 Subject: [PATCH 65/72] Split CI & CD Workflows --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0f8fb3c1..2d08e956 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,7 @@ jobs: with: name: frontend-dist path: ./frontend/dist - retention-days: 1 + retention-days: 2 package_version: runs-on: ubuntu-latest @@ -97,4 +97,4 @@ jobs: with: name: backend-publish path: ./backend/myapp - retention-days: 1 \ No newline at end of file + retention-days: 2 \ No newline at end of file From 7d78f0333a9fa91e40739234b303fe86235d114d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Jan 2026 15:30:15 +0000 Subject: [PATCH 66/72] chore: bump version to v8.0.2 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index da286d1e..cf5766bd 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "8.0.1", + "version": "8.0.2", "type": "module", "scripts": { "dev": "vite --port 5175", From db4f15899377197e4aa4ca1a04d4d2b3d3860021 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 16:41:42 +0100 Subject: [PATCH 67/72] Debug: List Artifact for CI Run --- .github/workflows/deploy-infra-and-apps.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 532c9565..01824e1f 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -71,6 +71,16 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Debug CI run id + run: echo "CI run id = ${{ github.event.workflow_run.id }}" + + - name: List artifacts for CI run + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "Listing artifacts for run ${{ github.event.workflow_run.id }}" + curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}/artifacts" | sed -n '1,200p' + - name: Download Backend Artifact uses: actions/download-artifact@v4 with: @@ -105,6 +115,16 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Debug CI run id + run: echo "CI run id = ${{ github.event.workflow_run.id }}" + + - name: List artifacts for CI run + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "Listing artifacts for run ${{ github.event.workflow_run.id }}" + curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}/artifacts" | sed -n '1,200p' + - name: Download Frontend Artifact uses: actions/download-artifact@v4 with: From 25fc32269da04f0d16890d3699b83f80cb2e647f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Jan 2026 15:42:38 +0000 Subject: [PATCH 68/72] chore: bump version to v8.0.3 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index cf5766bd..96673bc6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "8.0.2", + "version": "8.0.3", "type": "module", "scripts": { "dev": "vite --port 5175", From 64209f763675d0ffbd84ca820047fdc5939564d1 Mon Sep 17 00:00:00 2001 From: Khalilelk20 Date: Wed, 21 Jan 2026 16:54:22 +0100 Subject: [PATCH 69/72] Refactoring After Debuging (Split CI & CD on 2 Workflows) --- .github/workflows/deploy-infra-and-apps.yml | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/.github/workflows/deploy-infra-and-apps.yml b/.github/workflows/deploy-infra-and-apps.yml index 01824e1f..487a7fa2 100644 --- a/.github/workflows/deploy-infra-and-apps.yml +++ b/.github/workflows/deploy-infra-and-apps.yml @@ -66,20 +66,12 @@ jobs: permissions: id-token: write contents: read + actions: read environment: production steps: - name: Checkout uses: actions/checkout@v4 - - name: Debug CI run id - run: echo "CI run id = ${{ github.event.workflow_run.id }}" - - - name: List artifacts for CI run - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - echo "Listing artifacts for run ${{ github.event.workflow_run.id }}" - curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}/artifacts" | sed -n '1,200p' - name: Download Backend Artifact uses: actions/download-artifact@v4 @@ -109,22 +101,13 @@ jobs: permissions: id-token: write contents: read + actions: read needs: [deploy_infrastructure] environment: production steps: - name: Checkout uses: actions/checkout@v4 - - name: Debug CI run id - run: echo "CI run id = ${{ github.event.workflow_run.id }}" - - - name: List artifacts for CI run - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - echo "Listing artifacts for run ${{ github.event.workflow_run.id }}" - curl -s -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}/artifacts" | sed -n '1,200p' - - name: Download Frontend Artifact uses: actions/download-artifact@v4 with: From 78e526089017715e8b3d89f89a0c2a6b7a7fa541 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 21 Jan 2026 15:55:27 +0000 Subject: [PATCH 70/72] chore: bump version to v8.0.4 [skip ci] --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index 96673bc6..9cbaa13d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "frontend", "private": true, - "version": "8.0.3", + "version": "8.0.4", "type": "module", "scripts": { "dev": "vite --port 5175", From 8663957ad3a46fa6a8a6666c2a75da10c846cea6 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Mon, 2 Mar 2026 20:59:34 +0100 Subject: [PATCH 71/72] Update README with course description and resources Added a brief overview of the course and additional resources. --- README.md | 111 +----------------------------------------------------- 1 file changed, 1 insertion(+), 110 deletions(-) diff --git a/README.md b/README.md index 735e2405..57640204 100644 --- a/README.md +++ b/README.md @@ -1,111 +1,2 @@ # Description -`ParkNDeploy` is an introductory DevOps course designed to guide you through deploying a basic Parking Finder App on Azure. - -It follows [GitRDone](https://github.com/jraillard/gitrdone), a hands-on course to get you up to speed with version control using Git. - -This course covers continuous integration and continuous deployment (CI/CD) pipelines, as well as infrastructure-as-code (IaC) practices. - -## Prerequisites - -### Tools - -- An Azure Account in order to deploy your App :rocket: - - [Azure Students](./doc/azure_students.md) - - [Classic one](https://azure.microsoft.com/pricing/purchase-options/azure-account?icid=azurefreeaccount) (you will be ask to put a credit card even if nothing is debited) - -- A GitHub account in order to fork this repo and start to work :wink: - -- A source code management tool : - - Git Bash for CLI guys :sunglasses: - - [Fork](https://git-fork.com/) for GUI guys :star: - -- **[Optional]** IDEs to build the app locally : - - Visual Studio Community with .Net 9 SDK (Backend) - - Visual Studio Code & Node JS >= 21.7.1 (Frontend) - -### Knowledges - -- **[Appreciated]** Basic repository management (commits, push, merge-request) -- **[Optional]** Basic understanding of APIs -- **[Optional]** Basic understanding of SPAs - -## Build the App locally - -[Getting the project](#getting-the-project) is mandatory. -[Backend](#backend) and [Frontend](#frontend) build step will only be mandatory at the end of this workshop. - -### Getting the project - -First of all, you'll need to get the source code :grin: : - -- Fork this project on your personnal GitHub account - -:warning: Keep `Copy the DEFAULT branch only` option checked (to avoid conflicts between branch names). - -> If you never made a fork, just follow the steps mentionned [here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo#forking-a-repository) :eyes:. - -- Clone the project on your local machine - -> Again, if you never did it, just follow the steps mentionned [here](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo#cloning-your-forked-repository) :eyes:. - -- And that's it ! :sparkles: - -> :bulb: The repository will contain the `main` branch as you're starting point. -> You're free to use `feature branches` or not. -> -> If for some reasons you're blocked during this workshop, you can check -> `solution-` branches on the main repository.:smirk: - -### Backend ---- -Easiest one : -- Open the `ParkNDeploy.sln` file with Visual Studio -- Hit the `Run` button using the `Project Https` profile (default one) -- Wait the Swagger API to launch on your default navigator -- You can start to play with it to see what it does :video_game: - -> Some details about how the API is made and what it does could be find in the [backend README file](./backend/README.md). - -### Frontend ---- - -Follow the next steps : - -:one: Open the `./frontend` folder with Visual Studio Code - -:two: Open a command line terminal using `CTRL+ù` hotkey or through the `Terminal menu` on the top of Visual Studio Code - -:three: Run the following commands : - -```bash -# This will download all the dependencies for the frontend -npm install - -# This will compiles and run the frontend app under a Vite developpement server -npm run dev - -# If it works, you should see a localhost URL link -``` - -:four: Show the app in browser, here you have two possibilities : - -- Without Visual Studio Code debugger : just `CTRL+Click` on the localhost URL that is being displayed on the terminal you just launched before - -- With Visual Studio Code debugger : - - Hit `CTRL+SHIFT+D` hotkey or click on ![debug icon](./doc/assets/vscode_debug_icon.png) in the left navigation bar - - - Click on ![play button](./doc/assets/vscode_debug_play_button.png) - - → Basically VS Code will run the [launch.json config](./frontend/.vscode/launch.json) which launch a Chrome navigator and attach the VS Code debugger to the frontend app process. This will allow you to debug through breakpoints and so on inside Visual Studio code (instead of spamming your source code with `console.log()` :stuck_out_tongue_winking_eye:). - -> Some details about how the Frontend App is made and what it does could be find in the [frontend README file](./frontend/README.md) - -## Let's dive-In ! - -:rocket: Buckle up, folks! It's time to blast off to the [first step](./doc/step0_studying_devops.md) of our course. Ready, set, deploy! - -## Additional Resources (for DevOps enthusiastics) - -First of all, I hope this initiation gave you interest into DevOps concepts and that you understand how it could help you in your day-to-day tasks in real-world project. - -Now for a treasure trove of additional resources to dive deeper into DevOps concepts, check out the [**to go further section**](doc/to_go_further.md). :eyes: +Deploying a basic Parking Finder App on Azure. From 85076b25d8afd76472daf7c41da70a85db4b0b88 Mon Sep 17 00:00:00 2001 From: Khalilelk20 <139553035+Khalilelk20@users.noreply.github.com> Date: Mon, 2 Mar 2026 21:00:25 +0100 Subject: [PATCH 72/72] Delete doc directory --- doc/assets/app_service_default_page.png | Bin 74383 -> 0 bytes doc/assets/azure_portal.png | Bin 43601 -> 0 bytes doc/assets/backend_swagger.png | Bin 38535 -> 0 bytes doc/assets/final_deployed_app.png | Bin 72381 -> 0 bytes doc/assets/react_app_no_backend_error.png | Bin 12533 -> 0 bytes doc/assets/swa_default_page.png | Bin 70762 -> 0 bytes doc/assets/uai_role_assignment.png | Bin 44633 -> 0 bytes doc/assets/vscode_debug_icon.png | Bin 674 -> 0 bytes doc/assets/vscode_debug_play_button.png | Bin 1282 -> 0 bytes doc/azure_students.md | 25 -- doc/step0_studying_devops.md | 102 ------ doc/step1_deploy_backend.md | 427 ---------------------- doc/step2_deploy_frontend.md | 236 ------------ doc/step3_troobleshooting_connexion.md | 109 ------ doc/step4_further_improvements.md | 85 ----- doc/to_go_further.md | 13 - 16 files changed, 997 deletions(-) delete mode 100644 doc/assets/app_service_default_page.png delete mode 100644 doc/assets/azure_portal.png delete mode 100644 doc/assets/backend_swagger.png delete mode 100644 doc/assets/final_deployed_app.png delete mode 100644 doc/assets/react_app_no_backend_error.png delete mode 100644 doc/assets/swa_default_page.png delete mode 100644 doc/assets/uai_role_assignment.png delete mode 100644 doc/assets/vscode_debug_icon.png delete mode 100644 doc/assets/vscode_debug_play_button.png delete mode 100644 doc/azure_students.md delete mode 100644 doc/step0_studying_devops.md delete mode 100644 doc/step1_deploy_backend.md delete mode 100644 doc/step2_deploy_frontend.md delete mode 100644 doc/step3_troobleshooting_connexion.md delete mode 100644 doc/step4_further_improvements.md delete mode 100644 doc/to_go_further.md diff --git a/doc/assets/app_service_default_page.png b/doc/assets/app_service_default_page.png deleted file mode 100644 index ef5d6ec99a0571964a9c6570ee890d5e4704dd70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74383 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�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 diff --git a/doc/assets/azure_portal.png b/doc/assets/azure_portal.png deleted file mode 100644 index 4ed362e0a1ae33d961ab18b6123b6d4c36f62c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43601 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

qEJDl z{=6!C$6sZfeD6kTm<5%WcLV}8lu`%5bUKx!zWrO>rV1>k;vRf;jTt1TmUup zm`_`2gu+gkDF*j12G*-U>X8 zvII*aoDS(wqExCwVS-+B8`p(JPbq8MT4h=S394JDPM(&9_1Puu*skzA+LdY>Ae+kB zLmUr$?hFN6zS2VQBHD75I7|4JAkSuvvXIYTioykr(&SME-Tvl0H%;or$g;cArGKm) zISx=HgHM52XhKj3zoksTq z_||sk3Nsh01MODB#Grc$x@cEDKGwL7fMa_%dfMXt-;Lzrf8Dd$`~MIA#=j3T{9h71{*S*=@O4oM``l#d+qALM z0q`W_&>J3q*axX|Gtwvb_*=n#u}kx&2)EOkP_&FFe~ES@cj29m8Vjcs4W3(MnhYkdX0ttVG5nFU(-2{ExQ`PZl4`Q8xcBuE(!2;R> z9=S1+!mvKCoHWG|82%$Jem@X%760PM=4mdJ(70{sA zwR<*D7%&039}FS*@L^H478C)YRr* zB+Fk=m^ARCq6x$96vgx{e$az-FI#x1pQ}-~VjM7JY;B~q($tI}^I zD4H_s(`%gPXkiI30Olcp0)=~np@6K<#HZJjth#&dLF3QHq}m{Skn&dUWTFd7<_suK z2YS~N6N{oL`}uogX{3;G)s{Fnf~5o+Yc21u9mosmq&QM>TmJzYJ&iyZ%TS+dd&Tpt z+G9~QmUqd~Rf-e4`vnn~I#=zt&!2MJ64ay@z5|L)W@qQ zVuz=K4}LW5_0o@!j`i3B)JIWgVxk33rErqSOUtxx5n)|dwZfVemhhm*v+MV_#h>-( z5gPOKeIT4ZA|XCyWeDPY91*>^M4Jxkz2-kErzQhOJBYi|YD71#!BTLbR$DliX?X4! zjE!E1KRVf@cq1)kdAU%`3Z7O43Wk>cD>=+X)0H3?i$4;{rZHEK5hR0x{vM{+%r~+f zcG;CT`!6BA@ioyntE}Hm-=0s(rH>{29@WP-V1&D^h>Od6dwgjrq*|Z-jk(GSDG$=f!XTN z!SS@zM;D0(ic@Yl(_i;dkPPTEv=5R^bHF16?-)n+6_jaC-yTz2fdZoP zdcxM9{uvD$E8c`*87pz9pj&XHLuGo0A01G)6_xZ$qegUV`~VxM#yOeH1_~SN2ZwrC zJBe`Khs{-6|8n>em?-DDc=w$yx0r-iF+568h{0#6K21;}71h-C^S7|DSL&#GIQ)V> ziyDh+^UX?3%$pBB89MMP1tP2?o_E_TW9QaKo{ko|5ajzFp1%Mtw&F(HwQxCu_kys0vjl=N`Ei-au>@t{@jt42�!FC|o#zfPjF4fOL>1U8PB= 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 KB{v^F`#%7vAuy%@ diff --git a/doc/assets/final_deployed_app.png b/doc/assets/final_deployed_app.png deleted file mode 100644 index 6739521e6aa7aca14f45dc9909a2e9656ed8043a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72381 zcmd4&XH-*P^frpdf+#46s3=NN5CjBNnh*gI=@0}2q>D%|p@vQb1O%jmNbkK#4J|}L zKza{CfJi5VB-8{5At(O+?>o-@bU&Ok#=Y+zBO`0CvBzF*uDRy(Jab3B2B}=S2a4bDu9>pw$qWQLD7SGakAsF9FrVcQLe^^R^0F3IITD9OH>49qs;- ztE!O)0KnAs?{}sbT>1e3pcbjUQh4KIzBSJnaQy&IrFvida4G((S_q%QMemEcvJW4c z|9z_y{nq4>>}OeS*&??6jk0b%1wrFSFHOeus*HuQ@1K;9>tfJRZ^GQSFGT6?gqWTW zIa_wsPL=!KVj?xb7LhUN0!h-UW4z-d%N3^u5dqRJa@tYQ8kqtbH)`>nI!o&t0HFH1 zY76>b>EowYyZ=+iE1t;qUln&=Li>LOz@?a#e`BFNZ^ug;KJ9w(lE?SVf2C{eeT@GV z;zw1@|0{g_r2K!%t9aWtHy!l#^*2X

7i{`NIrjdlDzR-oe5od1%3px^V*H7u3` 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

Z@=d_O-pSe~-r2?;@)dnl+S4R=#n;QX5|_V)k2} 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 E2iA16asU7T diff --git a/doc/assets/react_app_no_backend_error.png b/doc/assets/react_app_no_backend_error.png deleted file mode 100644 index d301d74e2f6f2df7ef450500cf3bf799e8bafcc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12533 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

#BI89Cc905VzVCz}I_ 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%0Dc=}MZ&znS0gu;V^h zCdFC%fq!Pyx(@|I z=Ne)jMt-x@B4LBb$o5UU$ew(9Rur?rqSRCh(&iQ{a-{Z>xhz>87W}%zvT1!7@?4jW>vR`8fx^jljKo{u^@ zNCyGSBH8F;g&^_+rP^e>z{_KipYR?=%B{z)y{B7>)nkDUdTR}bRp};XvTz?z;ID^@ z#e=#m;G0K~&m;B+x33L6!nuL{b1KW5wv)>`SFdwjImj4IS@Ua#Bmihf1|&6PEtiyt z3ig4HEH6fa$1${0I%KHLkCFXcJ?|4GFl)CS7Cnl}kJ88yT3B6j5jRSV`~eIu>neCL zdCdT~zzG@+_=F+-Y&9#uB14)TL!*o0)nKv1xE{AIML*0%B%YXJsp*J%0DN*HNA)>T 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 diff --git a/doc/assets/uai_role_assignment.png b/doc/assets/uai_role_assignment.png deleted file mode 100644 index 2c1c1dde915e29c1fdcdf2932485efa45da609aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44633 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

0SYNGHIZFR}|9(eKhX3mp53ZThS(|J>N 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⁣<*h4s3cB;a$GnirbO?2lHVZp4%o7l7@m}!6UlP4T%ad@B zFUh&+XzU%*-`!qcviX#Mlc&CyTNY1@nUg4+(r;(IU?9k$ytVjpBek$cMTDa>?cw9z zuMP1HbCZ@m3E-TqWvoOQw}%~z&Qh9>*2DUy4xOlngBVQjXyWVy`@jGE7I!HT5}vq+7}GIPrFjC^76LOP%gIGGaJ#f zlu9xy&t;F`jYSdY?AvePKZA}uX(D}E=Sz<~xnoPSeP2P^0Y)@F-y(X28y3htmzni& z>PK8q$tJ=~Nt=Is^NqYZ1}D|SMroIM_^!!!aAkMJPyOD@z+k!M-5Z|IWe5`TpKd$2 zrfve;HqRv*{2GlRVT4mvN87zou3p@t-gmC|qRRH;iT-Ti&YzMuol^u;Wo9=VN$TI* z?ZcNB+W?mGk0a}!88))FNWiod+*Zc6J-*Jj{#KW(;aF;xpT z`5FcPih-Rl%l^Z*dOQ*7apf7SCeNPy*VmiXS;LGXfiu%DCI)JCF@3KZrPqJ=syVv7!{XXQh!dh>uQ`or^40bIVk0XHs>oT%R-njt#+99?pMb zI;GCK`xG!1doF3aCsD(1+m77&^GW$jEnPaRxJa#?^sV}^)vw3f9LNcqFsf;$L(I|k z)HW4!>48+xozjX7zusS|T6z%R#MA8VpyQPTl6gTu{*0X(FBbCIJOBVXrm65lw=OS` z^#sf7bA2SJihrlFELTE++-~9M-6=ip*2e?arHXi3>w{V{;&Y%$ny_b|#+ptk7gh&9 zU#)c-p=OJcM{NQHXH<{`-LkegVk`K@WX`sI<(3SOT44+@Wo^N zF8_s8vS5#O3@ky`ln#3c zpz+(zxH&Q6c%E%vGCSs3w0kAMpgDX)*y_}z!y=wu?ga))T8=^5l84SvJPn5Gal=M^=Y zj?h0au}RGfe}G`XZlCfPJ11%>WiYo|ySNsSLkLp^;6Tw0uJBG?qP=GvQpPAk zE%T$LTK<}XIJD{}+PR<{!F{IXN9X4-qb1fel%cBI4gjbyb)CAUqZ8jjrkb*^%ij9_ zJ;{L_+fnV8utU23?|3m1k2(*VQI`*v`R-Drr@x+WBF)5VxSKdF5)MvFE_dK@dh72! z>|gDKWpta!zgGqa=r_wiT?|xPj3bV3$2Df2P_|@0Rif=mW64Gpl-?rgaBK_N!Jb}F zu$mqVq#wifn`~~qGnsyS!s(CXRqQ|lMU#Q;Oun4P|LeusZ%Jt|$R6ORS%NFTz>H}* z4CU>7iUNSOMkgC}gMyCN#U}KEQ`x>gB0SB95st<}U$GCCG) ztgm8@Uab$6FO--=emY(15MP?^k)$MC%KBelwMlE;vc8q33l^NxlUJ!21|D+nWcbkf z+&t~BbzCmDETVlM`;C-)el5(c+Xdqj2$`iz0G$>T1ZmvrQ7u|#F=3G^)If_zNuYRYP|qq$BM&SefCPCw~%xJv@= zh|KLdwGnD9BW;)s`?s#qyqkTig~0DVQxq>--$+nvOO(^pOlW$Fb9jmhIM5de;QVdC zbjhye;BlAsfHU+TKh}=mdnYjKOFY)gy5Yt9ME4@9AT!3Rmsdv1e}2*J@;Nu?Fy&_v z{+dZrtpSku*#VpCWj80!0Lj=$(Zab_IWdpKwxSb`rx}a^=U)NS--C$JIg#KqdU(9i z4L#GuM1D;1sxY#Na^~}WFF`%`z{u$1Hqt)?SMDpy;~Y|u@f;kzUmnTK-f{LmD_VBy zcOTkM^aHQGhQ`p49DGq(rc*Mm=7(JYGrN9& z)>+MeDa6f9S+^3=9%k;tf+y5Xpa+@#0t1)Q?>9vcU7UVEESJv*${~$1#n&|*;#4wI z{Ia8YzdfBhZD%j?_Jy~}N9XN|e|USq#KeFe{I~sMpA3)5e+wJ>Wd3J`45+iEk0$P> z9P2HvG}ecNwdME@k4(eLUv!r_zO@FlRm1gBs`;C#fdqqp*16|QR-lll@4UaZ`kHBZ zj@-S44WG-%&vr~A;0%WIfyGAaD6HbwGHD?D4y9IPk{%EthobjIn%77D({1*9w@W!S za5r8M_Jbp%oR3Bx3FG;<|GEHXZ1!M=qQ`^shTd=%{!qlEE^KQy22!XCzZDpznEiIo z`3R&hoQ92kkd@KSUrM-kH>L2B@0dg9N$ogc3Ev8<#-g!Xq88v}egJp=iXFB|<#nwl z`o{B{+gCdhx|>3Y6;oZUQqLu?mmYAGM#bmE-rqfwL7P3><8Jvg4-xRhP1(T7i`q`E zYmF-~+*oWAbyS`j4G#K-{oUP+lR(&=q!r;tkI5yyyN-CIq-xh$ZCP6}AX6O03dFLe z9(yd}=+Qb^p;!9pu)k!8Rgyi6KhV4qhM@>bT_1?#kld zof^E~sqFVnu@#O<#gCy*v2D?*%79x)(O9ayi=H!PN4Rga?9D(I>0y|Bu2%mOOkl#f;{K=Kc)G(8r9M^b8HR;f<-7Ci};ChCSTGWE|=)4MU@hPnudpAK`0S6j)`A z=@fJ23L)(-a`FecYBQJFFnBiMx46f-J|-J+#rurpU!M^>pqSj3Rle%hR&bo4^%N<0 zr$7l-p2`1AX5wk7Rt$g1KMN(yAVNl{iQ9Sf<%Lp3ECBcrJFbF|QVSMYoW}&Ss8NE2 zhuBo_h+9<;19XDSpP^Qxwf{WCKKNECXS2kI*y`(|l*)^rLdsNg+pj9~sox`905r;^ z+BX9WPsdXnFJp6$hqnE`3ZuC{|145@N7X5W+w`u58YNLxi{TN^IR2*QNb77IU>9=t zk)m%*4(NG#rY<)==8l1Bm89nGnHD|k3WHk*v){futDnq$z5h{uNWcF_No5m)f`sw# zh^4QOMb+{u{E48*KM&J5xSta6sCqouK4n}mavH(eS^bln=<8PSOpE?g@G)6jAbs@E zINCLf4Er!qLWBn-IjMsgLBO0v>!Z>LgBiUpAonowsD+{_`Ma;#KV;lQ0#k@KP-);T z6YO%sgcp`_Q%52BY;T3~biVJhpOa7jz@*pj07K@%zGmluyc&g_ov*1;vyZ?fN^1q86%lo{ej>D-6Zn3-4vij|O!=I71jVsC~PS-!rQE7abTLsSVi05~Rci{onfc(vMnH~vb$#r6tN8$dGYNAx2XACFg9F=Mz z>=<+b9a#W*^>l^}&lmd>>O+&&=?vCV?M6NVaM}NgyeK9=e ziflILeCLB1R;EETVBeXeY4hiWRm1v@W2e?okm1TBX|6-s)=R z36qnzLFsn$#I4C`k|WnKu)YSgGG@;$(r6qpbb2_6g+6Nv8Yqx})m~T&{8`vg@w1R) z5`Am(2v&u?NVdI6#hm-iu`j0=o}|gGkpfwpX30t=Hp=_@iRX>u;Tsg$y*bSM_6Mx` zukb)4TDRuZY8&9rwtts5-m)oHKVY~FwRxMM6c z<9w}d_pza`AoPB_bbc{P0CEp*;-Jd-#UK zb&rs!mg%W@4!Hx}ea{@?i8C)DS|wD0h>E>F+Od55;zWn4Awb=EW$%w%=I4Wn=d~&3RZSysEPVS@Y>@5Ph5Wl7C(L!04HQ zg#oEph1P*FiH)jF8e5+cQO&y5?YVbYTitX(BkioU`{-elaibO(eMBfs-xHc3(*@WA zqzr^ER`Hcq?@G~k8gIXN|?8DK=t@%bJOZRTIB%#8>I(9yQ6pB`IOp=aS*wg2s#*z0-p{=UcWt=+#wU*8;v)&kuaRpd6b3fcf$shzmhDAX^}QD z0+L(Ai{he}(Lt<)pgzKhA>>boHRax1rO3FCr>2n zJtlAKQyfsW(x>b$(4D{hVV11nF0vL_)c1A{bhF}LOJ0^MIrl@**B~E<=v#4h3rjjk zmB84NI_hQS)l9U3%C<)Ror7^edcb3j!?<}`BqcxAWhU*KAXm=R$_fRDkvSEnpy*?a zuwva-ol9`XkchByFFa>nGdF5zsc0_lu^f{s_X0@_0@4u1Zt>&lhd4HO&xFf%qqjNQ zEZSo}(xT1_2U{HVseElJG@qb#feX%tvqLi+!W6hS;77^KfXA~DLjR1oJ+&IwLip+t zn7wcx?6dvq*xa;w)?8+U0Z!L9rHDOJ=|N)<#;Q<_;1pk!Jm)JnPD|#&o-~@NKX4*? zqfVy!b}Qtliw9=z9eRm2id=0dZ-Xs|AORD~oZ|SMCP#O>QrQE%(r@28;h%mFpL?H4 z*KNyJv9PV}z0FQ79$#{+_A#-v5UhZfF?*AsQ%BzLG$K&ciG;*<@X2Y(le9B@SZilO z_xZ%Hsvdm_SZ*F~M8kzLb2CL-OV2*%jv&&LO==+Fy7=7j(?%;EFMep?^&r!hw~D7R^3*F^@Ch9Z5xn&~v%Smh+Gsn9Al9YS^NIIr{mS==^FGspKF&|=i>D^_w!ki4$%qZd6ctd5i#Lato>>yRa!70z_TRcDK(M7=Ie5N4)WR-YHYL=oTa(PGLXm2r6K#;N1-IU^B z>yGWgvSADW%p}p=>p~4R0L2cd>cC^3Qy%NYSC}DXYJ-FI6Zq!1uk7O;KW4zstN+m* zCbb$I0mn0`V4Hy5$1u?<-Cl6vT@=DGx9<^v6u}Txh1Z52)kRwdk4Pqzlih>6RF8dg z?n;3NxVY+1bact&RQybiwQr+@gc&ti_F9t;3rBzrda43+q9<6 zzQ9_**wK-JgnKKF`D5v$yCwRdt&f)212Ee5F}Ap1Hb}ee{!rqTW)d9!c5~arFp5cm zYx+cFH|Ct!uE&SQmBQR<|szk|tNaul?;(p&?!c+td7wT|!7Uhy3&iv{>(4Cca! zc{yIa98(IDbDkc1m^2JB_#qT}Eb=rXyp_C+WQ4KjYDNeY! z;N^#lKn6}T6Sjv>bXz8^GbZNHfGbl~0H7%Q@z=_KoW@5q`#xNMK3-7nnW1y+bl!2; zK0dPw<`C zCs+RV*$-Di?W`}oy?nusuw@b(;yzuM+9fFajnD!bvA3XD$D~~o4Vvbt?s-bsw}9X5 zx$@v|rd_iD0MkAn&oc_!Jqv0nO}gNqm8KFKHx1I#pK;ATp(PoE5|*wkYZz#2S#4T+ z|6sZLPWHo_y?-x*!!I*$zUX_z{>EMJ51DO+P9){2w#_?L3}MX8-Weh9QeViZ0%H04 zcgIJtscX-340>?;ibz1I<(uRs$^DD*x^N#zKSmJyi}&ibE-RaqL{HEA;4-c&GSgAa zCT{e$n%rnci=!U*WZC5%mAf2$EVDBzvn)hRTCJ@p?O{z@X-wc3Kk&6~5?W?a@EtuCy z)|<7t?Za-8-^^RYj_^P_=>}Ae&IUBIDd#l5xShV%(rvmEy&-n$Tc>r-&BD)8e(cw^ z-OBaiXUs;_oRJy5$~-na!x0cdGF+gC2?!bcpoex!P+I{Z%y9HfB@^ddVK|V4-1REp~JzdsNFfkr@t7~ zrN?ys#`0wdl@01H-8I&KJCe{i0;!uS3ff*?Hsw`&g;u zjWlXES>^97trWb^z~f`#S^OVtYT$1p#6%5T!g(7Y5f=FVPVmDkQss&exSVB zrc>;%d@c`y&j>S6CtnZ}IlRf{di788M)Q!ZPLWd9JWDXqwf9es6U4)A^f zvbo=u@j!}$&;*Fm#HR6#keifCQm#?TD=bKu)71-%VP(Ntf^x5UM=%~lsXMejRj53o zc-&&22~Fys9hmDZ*Z;R;N>QK(X+V=0le6Cj+S_6G2JYKr6%(uQrxqiXb)v?0JsO+V zFE6^7e3-r=?3YZk7^|*w2U9cUCx4GPGva}Eq*T3pOPKv$3KQQ5J^NKa3tlT)_ z?QDY_h;h}{55qoMDjGfzuHq}`!evPiH-waR5EpXFyFe%u|&oy19o=_eit2uV?UiUCM zEJ>~sBV|~<`ErRV`*;OA#>Q@Jxl=i#PJ7)so-fKV9+WR75*FllR#A{8$rh+&X+0|x zcZF`@<=}D(gV++)`M*Lpa9~5zH-~r|-rNv=kc?Wl=l(gMn9*(JU>dgOC7D%zX-Ctg z;906H#qSpJTa){Ng|ck}V8OIC=?_t?%R{dnSWF7!Fem!6l%j}|OD|%Rym6|c)1=cE z;t({ogo2A~%4A3EV%c{cZ>#dPg>{UuD9-wi=G~>_+dT}hwPR{>!4Hi1!>LyGahVxA zN71^nWTdy(PFT)S|A+EUeCP%(QNN=aWv{#N?Rj zJ8{uHst#nAfb_hJJ@z~YKY4HdzRhX;_eHCr`CPfc?QesjvYvOG`A42PA4Er@IYfQc zK0{B%-Lh@E5n~C~xfH*@r~L^7ShJF4Q{S(?I<;VGRrOFu=e3c+V#dwZK&%K_-lV)G z8NJb%D@%JqHE-h{uLFO}x^4QEvAVRzk;M6^ig7{TvWgNMc8o>27z>}A+CLHjZl_#f zXi;Set=*YAI%+52YdZ5Ti29~+USBlHD>lG)E$9Q^hYU{B)qG)MOI*>Kl#RA)=QtDU z)blL4^4ZcodL5joT+yp)H7C(%%3=7nk}+36x_q*-yoB(;QjM;bR=nap#T2d`P)yT} z1w|24C_9tXm5_F3Gmd7Zz(}sVoh%lDL&nPf0GS@%lS=@5<~GXZ`r;?+cHLP(mxb8QMF444(C1Y^i- z=yr0T)7sFc|JmlI+-;8OD7clWYHr@_=v*gvLh(Y==qf9+B;S05kOUnUb7flJoSz8C zl52h>!5>M!+g($}iq!l`RkN53yd;x$91cpV-IF*!V>Y+gqBp_b;gL&ygq|E$R$Evx2(uNA^OedRo`0XYGj@ViUS3uD zx|xL&@bhhx0HetSblpIbriWKTJ&F+baZ0RH|>H&$?$ z&4y)!eaN3JrKq#X+hmCQYm4`P8cae^P! zP>~j{UV5KNzHZ!);RLzm%BMiJKuxRxgQy1{d{UaIm^hHDVg8dPQywWME3{#STbzlP z>REy(to7RD&*wj09dE*p_Pz<2nurpumon58=G5A0mH+(xkj(efX`)ntOvRgGYo;JD zgR=hR896Y{(40mNOS;iP*RDr`w@!-5{``Jd^gQ8Vtl=r+nLdurI;!BRVdwDh^i-_f z?BaOi(KiI}LWulE+nPh{ykP!CX$NKvTeE;ea1EQ5GQ2e0$8!ntCN!HSYC0?VaNaRA zHgN$RqeiQgv!Q3bj#K?qNKo4RN?CfCpZKsHdZ4sAe_%)CL@WVQJ)mrtQHU)W{FI&1 zD}Iv-9TJoApLHu%_6UD%i!ijtf9a-ON7rD#UvqXPo>)%^6$U>W-ddtye;G=J_ zEALF(W3dRIr$5Q+ER34?ouq0-)7EgCEIHbm;a`WT93%`!>n@~bgmK4gWAN&<%JwU4 zV&ylwimbM!De5XL!_WBmop1`JC;vN%i^7N;KxN0qQ@%UCk*Ouiap*T_ z2dSkU0OS{!3dF62DCIZDeY#&2qoEWz`NH8-PK3(pk;J!z{kp%BjU`M9IxAguxLo?D zK7O#&pH$v*wgVSy_Aq1JfFH@-a`s!xMu1<}p^-Iltm$wR)|~pLy|AHIS~Lmz!6;>> zQ)tcP5wf_f+Agay=3KTDDgAgn+H`1wlkhhDhNNn-zbSWTZNFs|R4m&z@IyeJ(cQ04 zM-Gj&4nf&s3^TQnnK8qVp+)kc7+agXPkTDa7`coPeZtnL9NH~9qjb&sj7%((v$@MoKovI{q<`K(CVBCIFn9dFc$2?j`bc1p*fxXFjAF|a$< zXhp1uonh`=SC9Lo&^P&R#dsR_W&&jrIEv<`L8zhrLqhrsER$4gOOaFB+bFrUZHjHE zG;y>vk zerBD$o|67p)-LJD-Ep?i%?~cQwi*4QN_A`FjFCDWQ>8TAd|mIIJ!Mr$A8Xy%VFjMg z%uRSfICD6#N%vuAJ{KsYLXv}l4sj7Loygm1-ciU-mg-htesX`=_B+$MzgDnz;)u>P zwy}G(ZqvUQ-;?CJ$Az*49Ttdw^N3j>XbN$@=nR7ThRL68*ovIem1Xce zb?@e|ieF|sdSD@nhu>6IC=%7M;l}U#j90#}ikTl#i&M7Qt|=SlbXoTy%O&U^6)!dC zRnQjlz!dDfxMoEkYz=7LoiF2O>ui@6F5IAz?Zx z{^Qs`5dEl_Olaj=DaiN}lUZp*oK*E4=M8YEsAzQWS6z=OT!)Zb;v%FpJ#gZ8p$LYH z*aSZ=mPu0OS-V$THEL$Qf1uBkhG$1gAcn5@=OUcTa!6u#l*>I9~ z+HuB}>AVNib#+u}j%jSe%ivsP;!E_RlHXoX)TzFN$(P6VJT9GN9r4JjlFz^ynHH_& zWC{hMUe+BmjY+nL)QYC?niIHz@{C_3XYuVR)|gq}nBq&3*^j2Zu&gX^k*|vcW&;n_ zZUB1ZGKhqeT3aP?96J*{QIFEg!A+AVvpii}{ypEsI6vv!>DN(=u+KlZ&iC~-+- zKq@8JqG>Zy=d;>#Q;4UUC)yB-@i`fvvnMWu7<5MjyW_rV?;I&fLwN|=C)vEX!n^mD}rd|_h-s`b%Pm<(XL8UvA z|J_%5L`A;M*)mmgZAHP>!I^UHOOahBD*3U4XNun$8n2d{25g?^C@P0U4kU)k{9KZp zW=usVVRrO;1YDeDV!Tc5HC&au9cnOV?J+RPF!6rk9WWvV;) za_Ok1{7>59c|GMTJX3BWpS|*zn1xxF2JN2oAg&w$LK-7uq&Q}?sS~`EZH+E=Qn{I* zt3>q0V!qsYE^d5!qIPB8g+1axY49v8Qp&WXom}Lp&bUjgh2JeO!ezZSeH<25?V;b$ z_4+C+J@PEeSu_q*Dy+c>4mE@%sk!oIMdXAd?wtyHaJV$;-cnA#yt8iC(%|5yVx2|l zJBb}(NdZJ$!3|~t$3$j_p_|dRq{Qp3OI@)54N6W-mQj5~)Yg1D&`->~f4!ae!Rym3 zNtWxXH{j0))8R`LyHMV+o=}}LxNAwz7Ppi-R8A#&>viE+dr0&D% zv6W8A5+7>lng>Sv>$RM7o??=-@2}Iz-DV)u?AO#L<26e6BL(fIH$AjAm(M?*QJVss zU%XBUUUykor02Rj(e)KR1LP^Fg*JmI8ys`ge|GOtx#0{q)SV3Wo=V(SWxm zrjZuz9qDgxU7P|=s?`K@>P-KW-5_dr1*9GCxx3{?C>>> z>V@rBq;94Tk0_r+_SW0lH9>8-Sl}Oigjv-nYL1TPs5rmoR}!sv2KEe%yIAJ6nMU`; zsU)c>4pYT7Ykq&dh3jQMrDGGP$Fv2KibASemo6VKpr}R9xGCHX(yt%tmfjp7$|%D` z-mf5iKZIwQxMHbDcqM(a-a9ZF>8(?{b;&WpvG~A9yJA|u@K2{a*OnU_m_fQP@yBfr zrO;salC~tljD^9*PnlA^P&I4uPMpP>KV)32GtDnJMGgEebdYv~{CHYSv_xui{2uG} z{u~(8lYMg_JqWTLg-gJiCIvH?qN>}Mdi(-Yu#aR-)o@XxH!wyXfksh}xG$?0K-u(z z0zgn!A`Z#VAt2>-Re)H;Vuh4X+{(E z+M&TJ_bS+GZ<`N|Vl2cQnZs_V*ti**Z)a0)lwppb1Q7tj1vvdABelNG^#neWpm!fD5p3-H`|HBR# z_BX|%fva8+_q1&9PX%AIot&mD2lE_{tZfe~-3B)GGSD(XeoJ~PnJNgw_COWUmm zua6oA-%%8ab0K^si!tyhKxUnWUKxa@%_$i~>2=1%y^ZM|(~XuKcppx)OdivpN~<&1 z{744X&^H-j#-@n~R4N@3HPYhD!YHcD=*^oY@j=H_?2O&{^82wj=w&)+L*FF@Wq;JH z+{{D$B_R&dY@ltuXO)c0J^mL%=Qf&FpJfL34l;?EhkT^RFX-P)f5G3Pu-y#B^@ z`uLiz4bCoI&YtrS#ds`(wQ{haw%y0Nlz7xZ`WmwEK^9|J&=lQv+T zu>a|Cp^&GOf{9d9zc16B9m4UaG;pGI@PySj4MvL`cQ;*jieil>x~4Dhqrj!w|FJaC z@CKBx7s)hy%tvWidjIixPBR_>mZZ=9+8(AE)}NVybgdp-j(6_2U}rhUaDa40`}2P} zJO1bKf42cJLok#N(sL3o6;zU%KCk?n*71Bs^f=;fHq{6_RGp6pf$L8~?Kj{`l{=h5romvY-*y*3m3tu19zuzt4!^Lr zdvA6BSkPwq>0O^VD+IIXAl7HqH(M!dNAB7((k38ytz4LSRTq;~O){W5O_Y4xBPCkZ zwHf^WQY<5vWfd&olky&ULvcbnu8CJnkNGrL+s&sNlEvuBtUB8zzypNmnjs#ALv3NO zcj0hm$*$6#wj~dGS(+H~7lM&$)*WmX<_O238G4cv-pFmzMmh5L(6P`EzyZ3#N19?k zW^0^u-db0lV^?2A1iozMF)Ze1O~tg#{p1PF{LM)X=8kE4ku8 zR%w?Ztt9(GGYmblX}itfUks4(;wW$c5C5trM7^fsqt%sbbMFtGbHUwyQI&BKsPO4w>G`djypi8dUAJ$+~6(1Btv|Fc{!_5BLuu_^<+CUR`IGtq{QrkWA_qNB2J&g?PciJY9HgSK1!VZuW(5N*gq|9~IILQlM;m)PGT>0nGpo z8))`(rca{F@pHS*t|ea$OH%Ujq3v8_!)aV|a=z-=m5Gh=CM)(7>_Bre7f2s%LwXbs zU-a6o!306gKd5<=htO#o0hh>Udt`doK6)*wY>wcsO=4yT|O z!c1YQJ~Y-|P|HNa<0q)Nfs95U#!Ep$?S|hT6hWZ&2CUez&6Q7)`fV_Lxk8Itvn$zM z>-aP6pg9PB?nP;{XV#@g#PT`uUGopZsUnRCs-(LIl!3I4v6-MJf;{#;F84ibFBnLuPoGIz&SAJAe`HPk9Tr+jo zkPhNo*;PBa->}Cm(OXcYUsu`&en;2G=&PL%xuH*1K8_QS)v~!`DIK1Y6_v`L+l2AA zRBxC<1q8aqRW-)s9(&zT;f3ldpIWDA$IqojMLnqhyuxGqC&6riS?OJczyu}Eyrreg zs#Rm?Edi=4_4lm^PI&^pSjb9uhEh{NVLj{bk+HYye`#NQ?w)Hg>U3HT)hadr3OQKk z*eJ8h)=gV_$)x}|ZT<&C9P5gKLjkv#c2K6riyPc+ZfP4O40GU=i*r@gV?Gk?gh ze;9pvnG|Ft0LvmIm_O;#93yY`#U-QZ*3JQIx!XS0V*CXE_a#*PH~eouf0oh+R{*yB zBQLuN6itb|W`A^!(kcShe$#er$c)M4E*?;>1D9UgOwNAc+jtpanwO0t9(n6wH;iOY z?XR+(T2HoLmOT?uWqPB8@$f4g8*C1m$tDG1_xcsYWu>c<_r44mK~7g?Qifek(LMpr z>{XSKDn{3^t>(!<2b)tGrGV6RQ?|92YA5uy^K3Dxs5-3&mnSCK--~FJae4*u_32D3 zNbV&TiD=uUr|qn}_5>m-d_3daYbj^5cSH>1H|3^dTRYDjgS_-A>Y&}!D|{+>%En=1 zJBg)G%oQ1JP}%FX`eHxH?J8hM<|~?S@_jA=H8S%1@8f6Q8AtU5_vfW;7)^jb>q!5* znJ``gJ|yonjKt=;_y?*F$X~^~u0_KP92zd~?QAG9>(ucvN^(Nss6CRC>e{1Hw`Hfs zopu%akS?b2TA}dP{Ad9+k%Iod!mW~_U(R1@_85SGk_9OvN^}2;_qy3X4DB1Dk9A?2ZR9J zMd)|v?t5=`Yu9`0=tUa=KjbUc%W;9TmUzl{j3h2(=OonSVQLWd5#|r=YVSym0AKym zHER%H4|4K`{Bd$!0s^_4Oup2Mo;=G>74N?xLc=c_O5oH5d2=ho_C7tV=;r>feuxCT zk^rac=Bnpo#3_%9&?uB?kvkO8MGR?2Sh4OP-$sQk*-FN)B~R=-4&-RPUDl z6k{$Ih(QTez3ZdS*yY%YwP*ulk>Y+_u*86NTJeWH(lL(Ix7J;jqw|Pa<$$Nad$4`9 z0x25+oP0iSo7=`VT|apbA>&aX;D>0eFWD1t4%SX8$2?5Tbj=kQMXnEp)I-UuvP&yL zCbYM^m07UbX+w2si1<)B+FMbKt7A_PHSR}$aevj^4JP5u%MVRpeTaf<`Kqqhsd<;^ zcC{M2y_&h&kxMD^&XQeQ8fJII`kP%JpaL8sX9!NgdK5vJUDRG({|j!ThD$PcnolfU zdx?rABuGR~1lgd1ov>?;s>_VKRt~Ae&?uASJGwUi_8I&G^3<@-{Rzb=BC;J~^ae#* zCGbA}>fJkAI3)#z!HM?#!Dcy;D2V~~H+I9B#_@B~?49)#E}pH5lMUZf@mVyk`5AEU zK$YXv#@d_q`HdpGf@&M}oY3IBWM@*k^zh#OObJ-kO_#rx3f;1&78bTs)K(vlt1WA& zO3$1npAX7l4DVS~t1B3&pNi8t?Y$%93nolzZhSsRO+bAUAB=X)klz*NCpYS-NxR$ksV9Ail*RR~dMyQpPJb1bu!}v_cAinF4zf;rwY@kw z+dX-Cnz5)_cYQ;(r(x!xjSmGpztTlO49mTX+x|Xcx!p4-IM+XsKza5ee7xFLoL#3- z)kuApet{p;AEUa2s<&0tIaZvOosvcyFg$A5M*$o~rM2#mFCAhj-8*g~F%TKNj*sM$ zFtTT=|5K`d-e@|I%d38RWaX%C!LCt6quf1L|K~*1T%5zR%IT4dFbUe7G*vkAC}~JX zes58L9$EQrM3O)8*;^p=U0^*Zcw8zWy=>)snxpwQD=-00rPA*PYqqfkbl8JBHI97BogNv z;alxpnyWCMS8TNc2kt&yt(x1Tem=Lo-TCX%6u@U#@H!}{n%~SrUW=noA?{h2{-qfe zYqjto{im68;@v7Q;D~`%cZBXW?2QF|Vx>sH8X|iK)QJ4g4*P?cFZB(O9|L*Hb5%S0 zR^x$r;`owq%+FKDDq|vfu9^mmLw4#b$3ca#IAUs6)>{=JesgCO^WD>fS*8J$c9GeM zMz(55j|1Rif^7W$hbdF4E^Sv!>edh@5G;~q(Bdt#*kv_~PBs{L1+xuJ*qBgxnj7Uk znnoJW1!vQ>e3%>?DFL&z0Q(w_?U$?J67Kz#6KPUzZ4{qRM| zKvggDRSw!|jvP?9)-qsi=kg8$Hb6#tM`mBEd0{ozp^SYHtDKT9cJ9R3!4demca)+Q zZ?Q!aW9y8vIixJ$^5k~G+l_n5Y~&h?i|fWjW(^zA{R{MOMMr4H3_GXdc5A;HP(Q!?4M zg;~a03YYb#Pxfq2X%BF;>qaHE_aSgS&kz}e{<1;Xul_^NlEFal^ zbC)Xd^HnsH2QXp`Xjdc_Or?YbJIvItr8v~wsgnsLdSN9KuI*$MEGS+9e`Hj5xb11` z?+jLQ!;ptd*h|f=|FMb#1pYd!0VA)r^e$Z5mjDYUxmqXb0{%%0*#i&vH9>NJ&&>yH zfWUOYDP#9&<99$m?F|d3m+y{c+l}N~5I|V|hjxSVMoh-R=SVJvb)O^MBIrX0PgLp{ zr7s@9zF$xka1tb5(G^GfcVMNQMqBG@C~}EWm_7&B;@x(El3nL}?D2nXKUOXC4ez-J z4c9##7wMWQa`rmDem-omZls8OR2_*qNuQW~-QNPaAHVAbExt~&#i(eamz)qF2-NK~F`8$s zP&RcjpY8&ZGJ9VsbyrFeAR=`|G!>>OyKtG^Kk&Tq5FoCqkLq|*K3YuT>cQTq3roGU ze4GV+g74v?x1cZHAtink&CPbrce`h>$)-tpa&>6oJc=9sFuXXR z7v-&^uQAft=GDuzhpHA>dAOHGH#g<2u{ipcPDK`FD6T$p)KBbv#8EpX5UtN^NvjxR z9K11pYQKmrr`*l;+!k(ftq;&{!|D;fqh3c~);T>3%7C|CQ-elmC}k+{yUWbRK&2Ew zbQu(|`7|o7&4V^Hd0Ck{td2Vuz znSBXb2#ODA*VmGG{+E!DSpL+b{0(k*nwwEQr;gIDhVvhAH{W!h_iJ8DrAs>VQe7n@ zCc~8c@~1ZaL!?Y3VdyBY?QD*h>DXcp*^eT0ttoWx2(JR40|HJMNh_l7u8q30l($lV7 zl@0f&&&z!RnqoXEo;hcOtOR*I0r@g%_ka~}PBOStG+ATu4^S1vE{WGH(Z1z&eepi& z>7r1QTx%i(pFDoeuN$yC^GR&;i3_Yq@$Wr)sOO^a1*yQHn!YlH>c#J8Muol;Q!h`1 zJbt$%#?{=EUA~NbF#Q4`R%kEWc_8~kz&!u6X$Jh~!iykQa>OMT*hRZtK4^+s0ah^a z&Yp(Qc7#VLx#SPV2irmBjVCri&kx#D_a$9RD>L|{;FxRKpj_}u=e?%sIQV+GyS`x1 zhn60XMm3i4w_|bxCj~*n?PWT5tsE!rnI}NLigH*Mzv{{o31KJ&RA5Usb+;7&6$Jvx zysfJWsy3CaLko1VNm3UUz@ffldj_R@rFVS}>i#jdCt-SZpRfrpXpE@S{M0frn@;AkLf^EsiK>V` zzIHGp)WPYri2c-Xso>T62Ej2DLi-IFjsp{9C0v?nEC5q#UX7V2ht61`x$Yt z%n~1Eyd4sDJn&4-ZRs4bCpMc3=m-B_ao-))WY+b|jN>q`APgO;j*dDs5s{)aM^RLo zNa#&q5FxbCAtXT^M3lfFQl!p+fb<#ygaivkK?uDhBtasC7D5Yw6u1w9_xtWz@BQan z-~I0SgSE)>tka&ee`oLC*?XTjEjQc8ffyjtqiF5Oc}u=b=He>&Ub2F> zjqMbF5`!d%EMueGSq->av>=~(NqljZ;wZApMQDOL*~9))TDZNM&AIyAYi%2PZF1-x z;+53)NwN9>d$bG+F3ryetvZxscJaEPpdg3Rue#8!U+4Afdyd}HNC|RdRLb2gR*}NO0OQ-P{cX}v<=1c4U5x+z7jQaGvDs2bSKh>h_9b15 zT%qT?yj`pxf|94aTrU?ml~T*-?yh%hefhV4VVkq5O_xP@1CV7XTYcd~or?0;AQ5>| zLhjHn<_UqF4%#Pv@=K~WE}98Hf6K8%5MW(DKNxpkBaYrU{hspUZ#nM1mPF_LmFFub zJpzyMWr6VX0b$SWXZ}*5&Gr}tS&SQ~+FUG*SyLC{{iV(|iC#`Nv$bi;KZXr^5C6*p zJ}F8yf%4UyIZ+RYfLK}-$Tala7%w;mnuFt*m73}i#1~Wz9P$Yc&Ls*N6==iaFB-9@ zpATQTX|gl8X`B6J$MU9s+KWpaFUf}$X*rxR&wPc7XJD^S1ity_%z$m`cJcJ@=24Wp zrL6E4W>?wA4_Gsk`-4_wf`&Zw`3~%6&l5qiagPX#T~wL)vvZ(>05;s(14hdm=lqO4 zhO-ol6tXo7;^3H#i)pe|i#fpVJ*OSrlYYjcnF)508}+7JLI56C1I zo?OwoHS^by-Zhx+`LsKJmm4KD@kuR`(Fy7 zYGw4|YspI^7Rz_^P}PJ9^Zh(Jch;mYTi<%#_`}97ofPP2;{#V*$&X0wM_}r2+EzA( zJ^3E#1&(oRj+OB&~*dS9XwFQKSCGj}nf0+|v2t9kMbez*CL59X6`C zX~u-6Ri);Ya0N~E-RN0r_^eKljLCXSX?0j@@d!@Q{+^ScVkG9BFZ`m~YdJVY8 zxq`a#i*a*5k1yBE=KiRx(~ejufp*~ZQ^&TKDEJp61oX#*|{$h<_N=F`Sju^ z{9BQqEaO{i*22~{AGTTP@Ze_Ya61Dt%Uu*#%1MUkB8y?b=_DV-Cd!LsYqbv8EN#d3$U-ay^J@B%j{d{6W0W=PB*N3`GFB`pUPl6PT7sU|Rh3#ZMMd?68dX z7Msy<1qEa(npWOlwrE!`uyQ}@(wD;bV$FqH*oJcT=(7q+yi>RdX+<@-9(^K@XlhD9 zo+=CbE-zF*B(7C>WsBFhn}pw;b)#MXe8$K+tM0t{YG(0B#Ugvqve!;%Z`OO6Zc0fG0N z--$5|8v>%SX2>@e#VRVm-i$q9Y2Zw&^P=PO^AYLjOnXm{J) zq;?lJn=PewMeR0tkE)HkD7!^$2%kcIC+L;(h1im=-UrLCmmS{9H1Z{P_$4y*6g28q zD20PdF4GO{nyh@J5fO3rQXVI?omapR;4h?l!%=X#*e)}B0eyci`Fp-dnM@!v z!j#WBJ1&F2W0&{$R;!Mk-!%#iXKw_Y#h5F-GPjm3@kLqvuEzI9%)$%!J2dr(lEB%e zN)=K$EYIaY-VK<{7d%4g($4%#U`#-nDlM#&1S(y5Nq&;Q<*mUg%um|dasI?ZF3)Xs zRnI)yd+E*4jjy#$7q%sGbc7}K@{=t6dB`VB@PB8FU72mR7!<>4KV@ECI6ThI=(w1Z0Pqd-$KdN@ZoT< zeqMkNl8z-GGT?Y}Edq@0<;GKaNUv?m;v9&SVb7-bXT^h z$INld-Z<)w$S{Wi1+ zK29l%83iq9bqhwRF*7$V?HSYODHKeMxpogLs>8}ClXqe(zMiVE>(WkAZ2IeTm-(1_ zu3b4d$Ed{hW_I7iv8&c1Bc9g~K8_?ulvfW^rke_n>{Z&X|iJh$4s_4&)Skl zcRW<=VvE5jv%@*$t5nSPw)(~xZY<`p_*tE59mH-CnKMXLQ|dd`Y@cvT$afJBE8Os| zTZvMT8!KR0db*q&fwY9P>&tU@UqjBu7@@q?4X%b9S?n9PNszwe)S|FI)`~ZE?+G9T zbT>X^^}UB_zK>~$dkJ!<9h#q8i!~VyQko638(Q zHO|)!FjOR*3LUkW!hugikUKpvD-!7^(n4D8NH;2`a^0$wiO#~Z;h?iLMzT#ov?|QV zJS|4eBHRQtXusCbqV$tKKpZivt`)Ut#$yD!ToS4FTJrXTUxFZ%&;U9?XL@+qv zR~eUJ+L}CRM507Cmg-8GNdDO+tSNF8&GDr`*MnC7P|DGl>}5q3?QXMu1jrn&fn;Jt zux{f>+knUBLQ&=s&I472G*_nXa0Ql%@UOkdJ#tcAxym7yL2K7-x-Ar zhr~=cmZ_mlycouyYVCrWzVS&34TJjQGDL37h8b2-v)MsMmRdOSIx+3xJ7oNHJJ}ax z9UD#a1$iF7erL|E-atr;MGI3<$jhJBj*E?A{jTE?syqGV8PW%7J>nGzs~E$#--c9E zduxKAISNkfTQ@CtdwL;wSLuWWvREbcwE;tvagq|aGjXC3tNU}uGv|A+$DN{+)LrM$r9rRHNS`3EE22R3bXLw~ngfM$!eYcKSbJJ{?&DH7WfG)3mvkUQ$;%kIWlYJ*OQu!xzTp zWiAnh1=;E8#T0+DROqh?uEKgES241*@GgP(Vi)yQRTo`_A*(mmTbPhx6$2@l;>UNK z%1a=#&tD!fYX8wb8tUm>>eyuKMK~5uHdIVW9w~pOcp(IOf}vKVaNX$BG^?5)%~Wcz zeyukoYKXR9z-m9Fh%ZDiJN|Kjb)Z7@@{-NB7Y_y_*&_trC40k9yAs%n(?$Lrjm#J> z(Vs>wL2wmO4MVGrZl$?N>Xv05IroqDhYNRp8NQpSeW*?RhhiUa&yb*0xFFiX%V{yD zrbYAcpV>My((5ThW5s`m{~Db&w0+jlX05fG`=SR~sc~xkA+)!zLRFitWbWfkk+D`# zUp168B<8-%Tz2*U&;&~J3(WDuWw*{K{R19(kHU!)(#P_0GajzTLnCi<`#EF9{Wx(Q z@MmAQC0`K!Y|R&_e++`n8_y}$w{VXLF!8d3U*8{J$@-`LEU$0st31#4dbJ9+ zu}F;ew%zJB`@m3fr`1ZT9=>x9C6!HoHOitq#SPlvcL#SrK}|6i`{hr%j7|5(fxF1S zu7gp(HnVoWJt24f?KF9v**&tzV=4uK@1VR27cLxzbHGC)V@2I#gEEb%?uqSEq>86C zB-*4fs}YV&2hL=SXFMRTR2d{ET(~{W@frW?9_?UN-LuiSU! z&%zkR8x|JgXf+q`EAVk`Vc}Uu`fjVF;@C6`k0j`2N3GC4ZzgQB8s?ytisiXZbg&_q zH+g^iSoBmhzNu}C93QnGQyts3{t`cnEmG5~$lXRz5~^L;aUSZqu9n_z@Xy(h+3xBK z#QF6Zsm`Z3&)#r0H@S_A={VDH%N-nMX>ix&!Yg<|QP57LP;;S_ zxqJUCe9P(+qK_2lFO|1$<3XmYhdJ>KsrNyy#&Fn`{rFbCH)U#= zI_;M`R0>itCbZh&2FE&|@zjXBOb>SV=MGy+!Vr!dGn*lZ_4U;_#od<$-r|E0^A%1afb8uzO))Fu1Y)lT%NdJR@nfj_#X5M6t8@&muZJ?&0b zSXb#{vqKZGxcSe1GO7O$9qQohuYs5~TH!MGM*A@8>xu`NnT?`DTr`1OLB2K1Bn1-h$@WK*=7zwiB(f(znZ@P7- z$sxxk`^RRhBBye)8oQdMqY~L;(^Sd&NJ~?Wu^w5TrW|y^9;X!#wD3ctY{a!wKT_ka zl^9xB%PS^G_t>B_I0Y?whii${jV~zO33;oVU1a!0S2$F;kB*$1Z?nzOlOwK4INDI> z^kCbLheY0Yg=}G_3{yK`Nj6~0jXQJD3w<(yCzF_nYn%InX%`#=AlIOet+-O66D zqrMk5{D4&%I2M1WU&dr1t$e0`ll@Zq=>uKdNwjqh(Lihn6&t3d3<(H=!qDNB37I)( zH>JpD;@*0uwYnt+4HZ8j7T-H?xf%^1y(2(b%N;7!F{fOibnxl~Ew2Zwg7&X*ML7!i zvygcHLhDDXS3;tvFEAlO_G1;A+7UCPS72+Og_*)V{c zXI;}%Z`He`&;h+zaJ~PEV@{$e1O?z=1f2c3GrYy&J4})!sIRZ@(-&+@-}}IkWfuW| zsoc7QgdtM{qjIBFPPd_0BMTQi=VNZURc<#&k6jSFdSh|5>lc!@@44&QtY#6wLX2ul zQ%X7b`Y3yAdrXxC>Z>i=d7-PLk#h%hwoM{l8%Wkp-I#fhX=r!^bcB}J{X<8ahLNijOq{6O!n5z z7vB@aG-Lu5B==4<_R6BSxjP-oz)Cqa`h7IWzZ}s?y=)q%zW?wI+dj;m^D*?K1ye4; zH{euSZK*Eyq|W|BzR`sL5NN|Rqy53~ZAt&@zh8R)zX3vu9u@MpHzJYpk*?JO$T#+o zPVj*NH#Kl+_DB?>W0{1JQpZNB3Mp`dV<3y8lNiT(4ICh`9haS>IJZM*$x%AfAbd*Z za+_qJ0(@m|VT7R<6{Bpy_~3FdlgSeRKKvgjQ~It^C)(rO^=jI^k4teWuV-QVuf~>; zvfdH?z#byrDiR%ukhD;WIe9%^r{m)ed9u%U=vahFAX&&cvzLFtT1>Gi=wv5LD~Z+B z8&k1^9kv*0(eu2oTo7HM>rIKgP<1<-&=f`IZ_|UjBk1F$i%955+r?})f4~b|+ufF# zwajN6l4_rNvh04-k=hj(E6hi=YDmoBoK}ND(V)>XU)E+v)npY$qy*5%W@}3`GtG#o z*Pw{ecSDaqeolFk!d?x5mP0lkgn6O6=BJ@&FejDgFGaCu#G4eb20z>Rj;S@)J}E3Z zu2bO1)pXQr1g=VxN;VF&qhWWqm*bC??W z_mh;g6`rQVjlA3M!y8Tae+xq8Ls47CptG)JmIg6AGr_R5@B5zTRrN-x@0ld35+8~^ zqgVsl9kc12u+G^k0OtC7)5h(cRT!s*6Axe{@^q!CefC2_hO53LzcBnFt|<(>?DC8b zX+@mAKA2Tss3{B@(KaKy{*`CZrkLuIJ*(nj=YP7mXYo^~pBZHtnHToKK`JR~w$bOW zeW9FkXqc@D=RG2{Tz~}$Dkkjlg3mxBqs3CV$X5;5>3)gHwt&&OdN*RbanG3Y$(^`T zw(Q~|r(&fT;$uM8qiO_eFb?np{{q;nl2u+;PDK7@v4ngrr(P-VWGjbQU%PCkxR^xF zYoI57q*@ng`DLh7hht zY8`;a)XQNFyAK?dHTy>d?+^Q2llg}OM-2VmQSnh6iwv#x>Peq`|I~$%O!gF^osRc( zT0X$DyrbnpV23zBZ11w}n$6xb4$Nug+R8an9h(k5+|YkgQ}Vm>_kZP!N&KJJN&YLS zW-C8R#zJ)hNG)kj2VJjdFMCf&N=n+A9iQ0R#4u(R76RH!^OkkP40H}aS+aJaCj9;5 zqpQez&(%&@iX-by_~yHvIr@BZb~9EVz^m$`zs%>Z>h_->r9+~F_rS?~zxvo~6+XR$ zF0pa)lY!6XRufLhvIWroqbV_8b9eu` z=_u5rO5-Cs`$5J``-qKE_CkP=I6be^wk)<+qLzwMCWra~`04{<_Mv5GIi_RHWJN57 z-}8JKq+zZ)Sq)jl#3akS?+wk3X`R_V=#yo|o;DNxW1|kG^tu-wNaO~yYStYTjXtYp zZm>^vbQXI|)2|LVY!t^b=jacb&O2-r`KwOfSNec_ExDUGn&dK{EKMNEpXsKHAw#^W z3v}FUSRcKzbKrq&hjhH>^xEYO<5PVSyg&tu2!B+Lh8(P<8eY+4E2!u;`^_QHvL4VJ zQpLw{JM1y)h+UhEB7EidWtV^U1g2IrjSyW;EUb$-QD$f7tvgQ3J{heSroiOh0S5@2k*;!7&V&CJkdO8T-xXlS8#NWfXUBfcj2>gHaplih?ray$1cG+m}1`xzkdv6gZq>VJBQ&GH*;S#Gnw}{5u7!$ynE)9h> zOuT&gq{_UvG;yecI9;AyZe@2V_ZU&gFk)z*-4GOGHdW6R;W_| z)lH;|bnzFIz#aejswy$Vy9?03870n_$33IIv>wGDjQ!cN|Cg z$!|aZKQ?auD?sw^;O-G%5JfP^NGEi_4B%zG5G?$R}(1oV~ zKl2S;^6mndtK&ERGeuWVGO%^EGVF+-H$X0XxPyiEO7`&%?81{VyEnOL!r$=zv_*ecC z(6jlaGUXHi1D+;9+}lq4FL~{EeClJ(zqLWM0EUZJes7ToXjO$iJi@@|C#mWIcsfAR z&Lihvc9esmY!hmK=j8ZmaLy8NzLs$J!04W$HUzlS0W)$s%?>A8jon0TErsA`$Y~46 z)Qpf*ej$2_X)z5|TKzEh$P=dnEoq*@L&vf)YX|9dFK7RoeI4ek45>QxNv-ki^&PL-&9H1L^Nd_svfy&qNCN*Hho&NZ!tVd6}TJyn*e{-uMTIO3i tBilgpq2mW)QFG~kngp2glv>^W?l{a^2Ia0-wb$jF*DQ>yuH1e2zW^H`0Y3l$ diff --git a/doc/assets/vscode_debug_icon.png b/doc/assets/vscode_debug_icon.png deleted file mode 100644 index 596857a87649121907fa46ce9f1d30fcb43ddeac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 674 zcmV;T0$u%yP)X1^@s6+90*i00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0yjxSK~zXf?Ug@h z6JZ#KpE#sYOi^f|cu+OV8KpypWHEG7Bp9d$!0IQT8Ee+M(|G-YYR7}MM$7vDCi}*A+f1Rgbs=i9LN3MkKeubzTdr{p}oER z2YbXm{k|vsv*t3>Z{oaoAmi-Nr3R>BzMq!nEV+Z{7>&*oy6HsFBlS>6S#rGdcnL&R z1kWfl(GjHMdZ-3<)?8)r-ZfmF0CV5$$d8tZ-H~d3MPm(JUu691X)cYwhOS%07DC9* z-Cxm|xlVd!0C(3##?u1QaE$qhUPL`s&L5eVNTbLu+(Qbg*vIU`7*2yhkCmuluJB}L zg;o7&CnAoM4lD=qsB5ciQaMSgm<#mWpC_J3l1x0N_fUpcdZZlDJ3?%E7TKC%Zpe+x zKf&8yrc~MBk_awc!L*jcax9N>_lB0Y#8|(C@$)B4hjTnUa~-9_i99GHS({LoCg~qk zv;tM9Vk(Nh5MjTarmri!{E#hbEhkRlIP#s;l#k2dvrNZ(Ft0yn^7a7A$KsM*sVGZ2 ztg=C#?6!bKv=lF4JF6)hdxY*QPA< zVcgaTsVx(2-MUnuyA9J;ib#XT1uDuS`Z_T;w_^7P>9Yw4wmyPd4_ceebo#3OCckIL zZZSTcB5mu{c7uRXtG1d{h$KY(7xJauQd(RW|Ig5>{H^Bj6X?*j&tXPAVgLXD07*qo IM6N<$g4a1W4FCWD diff --git a/doc/assets/vscode_debug_play_button.png b/doc/assets/vscode_debug_play_button.png deleted file mode 100644 index d9975add7887d8a3a3b9d73bd32fd27c2ad8cb70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1282 zcmV+d1^xPoP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1eZxfK~#8N?b}~y zTU8tf@NWl$a#I>IJ7^ib#ioV0E{juGTZqV}rfm2ivbMOPFWH4nN((~-(ade}Nujl4 zFfr|ubWj80!N&|tmZnXcG^aBjejm8x+&|og z=G))--9uB;*x2|F2vOKB@k)rYYC1YPsFD+b`FSx~ujG)2-Jgj)ISx&|DMo};#$vI^3%RUd&h&f%clZpF$)q?! z$o6d&a_Y&6@+jm)c@%P@yvjrV%s%Y*?n9j>_6eyn6^Fd_jcy!#p&PFbzli-^Pi|u9 zJs-g6K&RLvq&PXLe6)fD_Tu1~*KzzEnN__PzCZwh+~#9P2q}-8kpKNVemwULews_7 z{(z*a-tS|f_5jlc3`1<=%WzQjR)S`$$L6(AL%mH-wXArZy!Fxv9NuGMYG4Kr+5WDh z2k=Ut1GZWqG50gRABiE6%3PbZ^*TAP;BG9B58?7nai{=qSKJRmFzp^V>-dor?q;v= z8pNpA3NzXOr%OYO{h|0LfzE+XaoT0!7c+U+GnxC{#gfYjogavYU|a%wAD+DZARlF< ze}+?hP%(rIKl09!O+AOR9~;o;Cg2Z**(Xs*gZphiPBs6Ez-mA7)kkCDyZxlcnl+Ku?&66bX2i=5hm*nJOQOYjAq9gBv+468#F{;9CULCU_w|bl`5&Rz4s%@GYZ~y341(sEQr*VY3lms$ zoPy7A7gY32z8}#RG;zSu9E+Qg^#iXLwa+NrE zF9z6}@`4sa_)7K;ofz!W5ug6(akag98R57NM=rShej#x_h}ro1{f51nyLS$_p~u6I zXPL=a#Okb>icdS>0Gx*_i z-pG_`O<+r~u)M*vmoJ6o1u+z24^p|{mMvZBvk%0)rD;G@mpDgCBZ3}lXEUR51V;=u zv$p;wHQ=1wkZTsSynhU@_1R%#9s2y2*Kz%#iNDHy!|BRsN2k=#Xt1`3p`h>4u=K}P z^Toze(XmXclG}t<8 diff --git a/doc/azure_students.md b/doc/azure_students.md deleted file mode 100644 index 9a3144f2..00000000 --- a/doc/azure_students.md +++ /dev/null @@ -1,25 +0,0 @@ -# Azure Students account - -If you are a students, `Azure` make you able to get a free Azure account with some credits without the need of giving your credit card (used as insurance in classic Azure Account if you spend too much computes on Azure). - -In order to create an Azure Students account, follow the next steps : - -:one: Go the [AzureStudents WebSite](https://azure.microsoft.com/free/students/) - -:two: Click on `Start free` - -:three: Put your student email address - -:four: Connect on your school authentication page (if there's one) and follow the steps - -→ You might receive a mail saying that your account has been created or that you should validate it before. - -:five: Therefore you should be able to connect to [Azure Portal](https://portal.azure.com/#home) and have a screen like this : - -![azure_portal](./assets/azure_portal.png) - -:six: Through the search bar, look for `Subscriptions` service - -:seven: There you should have your `Azure for Students` subscription displayed - -Tadah ! :sparkles: \ No newline at end of file diff --git a/doc/step0_studying_devops.md b/doc/step0_studying_devops.md deleted file mode 100644 index 894d9146..00000000 --- a/doc/step0_studying_devops.md +++ /dev/null @@ -1,102 +0,0 @@ -# Preamble : Studying DevOps a bit - -This part aim to describe some technical terms we'll use a lot and express what will be exactly the purpose of this workshop. - -## ***How would you define DevOps ?*** - -→ I kinda like the [Microsoft one](https://azure.microsoft.com/resources/cloud-computing-dictionary/what-is-devops) which says that it's the union from processes, and technologies from developpement (Dev) and operational (Ops) teams in order to accelerate the delivery of high-quality products to their customers. - -That means that `DevOps` is bound to all the application lifecycle : -- `PLAN` : Ideate, define features and track progress and bugs using agile development, kanban boards and KPI dashboard -- `DEVELOP` : Develop code in teams (write, test, review, integration), build artifacts (application packages), use automations (tests, formating, security checks) -- `DELIVER` : Deploy your application consistently and reliably, configure managed infrastructure, be able to deliver frequently -- `OPERATE` : Maintain, control and get feedback on your application through monitoring, alerting and troubleshooting on production environments - -Embrace the `DevOps` is in vogue; it is a proven methodology. :star: - -In this initiation course we will focus on : -- `DEVELOP` : Be able to package both frontend and backend into deployable artifacts -- `DELIVER` : Provision an Azure Infrastructure and deploy your artifacts in it to be always able to find a parking in Angers :sparkles: - - -## Infrastructure as Code - -Infrastructure as Code or `IaC` means that we will be allowed to create our Infrastructure, in Azure for our case, using code. - -There's two ways of doing IaC : -- `imperative` : you'll have to describe each steps to end with the desired infrastructure (think like an algorithm) -- `declarative` : you'll have to defines the desired state and the tool you're using will be responsible of executing needed steps - -> :bulb: Most of the time, you'll looking for declarative instead of imperative as it is more easy to read / maintain and evolve ; but sometimes you'll not be allowed to do such a thing. - -Here's a non-exhaustive list of IaC tools : -- Ansible (imperative, declarative in some ways) -- Terraform (declarative) -- Bicep (declarative) - -## Continuous Integration - -Continuous Integration, or `CI`, is a process that allow developers to gather all their works into a single or multiple deployable artifacts. - -You'll likely hear about ***CI pipelines*** as it could be schematized as a pipe starting with an event (Pull Request, git tag, deployment button, etc.), passing through integration steps : check for the application to still be buildable, running automated tests (unit, integration, security), code formating and ending with one or more packages. - -Packages can be of different shapes : zip files, images, docker images, vm images and should be made in order to be directly (or simply) deployable without any modifications. In that way, CI pipelines are usually followed by `CD pipelines` (Continuous Deploymoyent pipelines). - -Platform that are hosting your code usually offer a way of writing CI/CD pipelines : -- GitHub Actions → GitHub -- Azure Pipelines → Azure DevOps -- GitLab Pipelines → GitLab - -But you can also find some other third-party tools such as : -- Jenkins -- ArgoCD -- BitBucket Pipeline -- RunsOn -- Quirrel -- etc. - -## Continuous Deployment - -Continuous Deployment, or `CD`, is a process that allow to deploy an artifact to an environment (dev, test, stating, production, etc.). - -***CD pipelines*** could be directly triggered at the end of a CI pipeline or you could had some `guards` such as : manual validation, tests on artifact, wait for a schedule, you could think about **almost** anything (time will brake your imagination :stuck_out_tongue:). - -CD pipelines are usually split into two main parts : -- provisionning the environment infrastructure -- deploying our artifact - -... but they can be chained ! :smirk: - -You could think about the following process : - -:one: Developers are pushing their code to the main branch with some nice new features - -:two: An artifact is made by running a CI pipeline on this branch - -:three: A first CD pipeline deploy this package to a QA environment so that UI & Functionnal tests are made - -:four: Testers put their stamp so a second CD pipeline is triggered to a staging environment - -:five: Team is agreeing that our new version is now ready and a last CD pipeline is triggered to push our package to production environment - -Et voilà ! :sparkles: - -> :bulb: CI/CD pipelines conception is hardly-bound to the team / application size and the time-to-deliver a feature : every project could have a unique one. - -## What will we do with ParkNDeploy then ? - -The next steps of this workshop will aim to : -- make you write IaC scripts to host both Frontend and Backend App -- make you write CD pipelines to execute IaC scripts and deploy our apps -- trigger your pipelines each time you push to your remoted branches - -We'll use : -- `Azure` to host our infrastructure (in the cloud :cloud:) -- `GitHub Actions` as CI/CD pipeline tool -- `Bicep` as IaC tool (recommended one to provision Azure resources) - -CI pipelines will voluntary not be covered as we want to focus on deploying : we don't need any artifact checking process or anything else as the ParkNDeploy is already written and ready to go. - -Nevertheless, you'll be suggest to create CI pipeline at the end as bonus exercices to match with much real-world process :smirk:. - -Still seems confusing ? Don't worry, and [let's deploy our backend API](./step1_deploy_backend.md) :sunglasses:. \ No newline at end of file diff --git a/doc/step1_deploy_backend.md b/doc/step1_deploy_backend.md deleted file mode 100644 index 5f3115db..00000000 --- a/doc/step1_deploy_backend.md +++ /dev/null @@ -1,427 +0,0 @@ -# Step 1 : Deploy ParkNDeploy API - -## State about Azure resources - -Before talking about `Bicep`, let's first talk a bit about Azure resources we will provision. :eyes: - -We need to deploy a basic API, the Azure resource that best fit our needs is the [Azure App Service](https://azure.microsoft.com/fr-fr/products/app-service) as it is a simple Saas resource to use in that case. - -An App Service should always be deployed under an `App Service Plan` : think of it like a wrapper, it allows you to do many things such as App Service instances scale or defining [deployment slots](https://learn.microsoft.com/azure/app-service/deploy-staging-slots?tabs=portal) (way too advanced for this course and therefore will not be covered :wink:). - -Finally, in Azure, ***every single resources*** should be created under a `resource group`. Usually we associate it with an environment as it is, by default, ensuring compartmentalization. - -Resource groups are also bound to a subscription (you're Azure Student one for example), also bound to a tenant (in your case, the one bound to your microsoft email adress). - -That being said, our Azure infrastructure will look like this : - -``` -tenant <- no need to be provisionned (but authentication required ...) - └── subscription <- no need to be provisionned (but authentication required ...) - └── resourceGroup - └── appServicePlan - └── appService - └── ** Your Wonderfull Backend ** -``` - -## Create API Infrastructure - -Finally, we'll start writing code ! :star2: - -As we mentionned before, `Bicep` is the tool that will allow us to provision our infrastructure in a declarative way. - -We'll going into a quite straightforward way of doing it but keep in mind that way more complex bicep projects could be made following the [official documentation](https://learn.microsoft.com/azure/azure-resource-manager/bicep/). - -First of all let's create an `infrastructure` folder at the project root that will look like this : - -``` -├── ... -├── infrastructure <- folder dedicated for infrastructure - ├── main.bicep <- bicep project entrypoint - └── modules <- bicep modules (reusable components) - ├── appService.bicep <- bicep module dedicated to provision an Azure App Service - └── appServicePlan.bicep <- bicep module dedicated to provision an Azure App Service Plan -├── ... -``` - -As the previous schema induced, a bicep project should have an entrypoint : the `main.bicep` file. - -It will be responsible of : -- **defining the scope** : [multiple values](https://learn.microsoft.com/azure/azure-resource-manager/bicep/deploy-to-resource-group?tabs=azure-cli) are allowed but we will use `resourceGroup` as everything will be provision in a single resource group. -- **taking some parameters** : variables to help you name your resources for instance -- **create your resource** : through modules or directly -- **export some outputs** : each resources exposes data that can be outputed such as the App Service default host for example - -Add the following code to the `main.bicep` file : - -```bicep -targetScope = 'resourceGroup' // We'll deploy the resources in the provided resource group - -// Parameters to easily construct resource names -param location string -param project string - -// Here we'll add an identifier to create a unique name for the App Service Plan, for example your trigram, so that everyone could deploy his own parkndeploy instance -param identifier string - -// Create the AppServicePlan through the AppServicePlan module -module appServicePlan 'modules/appServicePlan.bicep' = { - name: 'appServicePlan' - params: { - location: location - project: project - identifier: identifier - } -} - -// Create the AppService through the AppService module -module appService 'modules/appService.bicep' = { - name: 'appService' - params: { - location: location - project: project - identifier: identifier - planId: appServicePlan.outputs.planId // Use the appServicePlan output to get its id back => an App Service needs to reference its App Service Plan - } -} - -// Export App Service Name -output appServiceName string = appService.outputs.appServiceName -``` - -Only one more comment on this, `appServiceName` is being outputed as we will need it in [Deploy Backend API part](step1_deploy_backend.md#deploy-backend-api) :wink:. - -Then fill the `./modules/appServicePlan.bicep` file with the following code : - -```bicep -param location string -param project string -param identifier string - -resource plan 'Microsoft.Web/serverfarms@2022-09-01' = { - name: '${project}-plan-${identifier}' - location: location - - sku: { - name: 'F1' // We use F1 pricing plan (free one) as we don't need specific features - } - - kind: 'app,linux' // Allow to deploy on an App Service using Linux OS - - properties: { - reserved: true // Specifity of App Service with Linux OS - } -} - -output planId string = plan.id // Export the App Service identifier -``` - -Pay attention about the `name` property. ***Resources names should be strictly unique in Azure***. As a best practice, every resource name should contain the [resource type abreviation](https://learn.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations). Some are placing it as prefix, some as suffix and some in middle : there's no restriction on it, it's **just better to be consistent on your different projects** (in order to apply rules on resources inside an organization for instance). - -So for each of our resources we'll follow the following rule : projectName-resourceType-**identifier**, where identifier could be your trigram for instance (as every people in the course should have a unique resource name). - -`location` is interesting too, as Azure is a cloud provider, you'll always have to specify ***where your resource is deployed***. The choice count a lot : -- it could impact resource response time (if too far from where you are) -- every resources are not allowed in every locations -- resources doesnt have the same price depending on where they are located - -Finally, add the code for `./modules/appService.bicep` file : - -```bicep -param location string -param project string -param identifier string - -// App Service Plan identifier that will host our App Service -param planId string - -resource app 'Microsoft.Web/sites@2022-03-01' = { - name: '${project}-app-${identifier}' - location: location - - properties: { - serverFarmId: planId - reserved: true - - siteConfig: { - linuxFxVersion: 'DOTNETCORE|9.0' // Specify to setup the .NET Core 9.0 runtime (used by our backend API) on the Linux machine under the hood - } - } -} - -output appServiceName string = app.name // Export the App Service name for deployment -``` - -Well done friends, our bicep project is ready to be run, let's continue with our CD pipeline. :eyes: - -## Create infrastructure deployment pipeline - -Pipelines in Github are created with GitHub Action tool. - -What a better way to understand the main concepts (workflows, events, jobs, actions) than read the official [getting started first page](https://docs.github.com/actions/about-github-actions/understanding-github-actions) ? :mag: - -Seems clear ? Then checkout the `.github/workflows/deploy-infra-and-apps.yml` file will be using for our entire workshop : - -```yaml -on: [push, workflow_dispatch] - -env: - AZURE_RG_NAME: rg-${{ vars.PROJECT_NAME }}-${{ vars.AZURE_RESOURCE_IDENTIFIER }} - -jobs: - deploy_infrastructure: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Login 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 }} - enable-AzPSSession: true - - - name: Create resource group if not exists - run: | - az group show --name ${{ env.AZURE_RG_NAME }} || - az group create --name ${{ env.AZURE_RG_NAME }} --location ${{ secrets.AZURE_REGION }} - - - name: Deploy bicep - id: bicep_deploy - uses: azure/arm-deploy@v2 - with: - subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} - region: ${{ secrets.AZURE_REGION }} - template: ./infrastructure/main.bicep - parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} - resourceGroupName: ${{ env.AZURE_RG_NAME }} -``` - -Let's take a time to explain the syntax a bit : -- the `on` keyword allows you to defined events - - `push` means every push on any remoted branch will trigger the workflow - - `workflow_dispatch` means that you can trigger manually the workflow on GitHub Action tab on your GitHub repository (only work if the workflow is on the repository default branch or if you trigger it using Github CLI) -- the `env` keyword allows for defining workflow scoped environment variable, here we use it to define the resource group name we'll use multiple times -- `deploy_infrastructure` is our first job responsible of provisionning our Azure infrastructure (as its names implies) - - `runs-on` define the **runner** where our job steps will be executed, [many are available](https://github.com/actions/runner-images) depending on your needs - - each steps have a `name` that will be displayed on workflow run logs to easily follow the execution - - `id` could be specified to identify a step an reference it (for getting outputs for instance ... :smirk:) - - `uses` is used when you want to need to execute a custom action - - you could pass parameters to an action using `with` keyword - - `run` allows you to simply run commands on your runner -- multiple variables are used and [allowed by GitHub actions](https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables): - - `env.xxx` : mentionned before - - `vars.xxx` : organization (on github enterprise instance) / repository / environment scoped variables defined in your `GitHub Settings` under `Secrets and variables / Actions` - - `secrets.xxx` : organization (on github enterprise instance) / repository / environement secrets defined in your `GitHub Settings` under `Secrets and variables / Actions` - - → ***Secrets are masked by default in every logs***, variables could also beeing masked by [applying one](https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#masking-a-value-in-a-log). - - - > **Note** : In this workshop we're using GitHub secrets functionnality for simplicity but GitHub also allows you to store them in any third party tool such as Azure Key Vault or HashiCorp Vault for instance. :wink: - -:bulb: If anytime you're looking for workflow syntax, look at the [official documentation](https://docs.github.com/actions/writing-workflows/workflow-syntax-for-github-actions) :eyes:. - -Now talk about actions that will be executed : - -:one: Checkout the repository - -→ Get the source code where the event was triggered on (tag, branch, repository, whatever) - -:two: Login to Azure - -→ Resources will be bound to your tenant & subscription, so we'll need to log in. The `enable-AzPSSession: true` option only allow us to open a PowerShell session in order to runs some az cli command right after - -:three: Create resource group if not exists - -→ Name is clear but why are we doing it ? Basically bicep doesnt allow us to both create resource group and provision resources inside. It is a known limitation and therefore one solution could be to provision it but using `az cli` instead of bicep scripts - -:four: Deploy bicep - -→ Finally, execute our bicep project ! - - -You surely notice that this workflow is using a lot a variables, let's provision it :eyes: : -- Variables : - - **AZURE_RESOURCE_IDENTIFIER** : put your trigram here or whatever a unique id (alphanumerical) - - **PROJECT_NAME** : parkndeploy -- Secrets : - - **AZURE_REGION** : select one of this [list](https://gist.github.com/ausfestivus/04e55c7d80229069bf3bc75870630ec8) depending on when you are (for instance **francecentral** for frenchies) - - → For the following variables, you'll need to follow the [next part](./step1_deploy_backend.md#provision-azure-identity) :clipboard:. - - **AZURE_CLIENT_ID** - - **AZURE_SUBSCRIPTION_ID** - - **AZURE_TENANT_ID** - -## Provision Azure Identity - -To deploy resources on Azure, you need to create an identity that will be allowed to do it. - -There are many [ways](https://learn.microsoft.com/azure/developer/github/connect-from-azure) to do it, we'll use a `user-assigned manged identity` using **OpenID Connect** (OIDC) as it is the recommended way : -- for PoC (proof of concept) situation → more simple to create -- more secured than a basic secret using service principals - -How to do so ? - -:one: Create a user-assigned managed identity following this [doc](https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/how-manage-user-assigned-managed-identities?pivots=identity-mi-methods-azp#create-a-user-assigned-managed-identity) - -→ For the resource group name, name it as : rg-uai-**yourIdentifier** -→ for the uai itself name it : uai-parkndeploy-production-**yourIdentifier** - -:bulb: **rg** for resource group and **uai** for user assigned identity - -:two: Copy the values for Client ID, Subscription ID, and Directory (tenant) ID to use later in your GitHub Actions workflow. - -→ **AZURE_CLIENT_ID & AZURE_SUBSCRIPTION_ID** could be find in your **UAI** ; **AZURE_TENANT_ID** could be find by looking for ***"Tenant properties"*** in the search bar. You can add them as GitHub secrets as you did before with **AZURE_REGION** - -:three: Assign an appropriate role to your user-assigned managed identity by going on its `Azure Role Assignement section` and using its `Add role assignment preview button` - -![Add UAI role](./assets/uai_role_assignment.png) - -→ Set `scope` to **subscriptions** (means you can do things on your subscriptions services) and **contributor** to `role` (meaning you have full access despite Role base access assignement, azure blueprint management and so on => we dont need that at all) - -:five: Configure a federated identity credential on a user-assigned managed identity to trust tokens issued by GitHub Actions to your GitHub repository **under your UAI / Settings / Federated credentials** tab - -→ Here you have some options to set : -- `scenario` : GitHub Actions deploying Azure resources -- `organisation` : your GitHub account storing your forked project -- `repository` : your repo name -- `entity` : environment -- `environment` : production -- `name` : parkdndeploy-gh-fed-cred-env-prod-yourIdentifier (the name should reflect your use case as you might need to create multiple one for the same uai) - -:bulb: `issuer` is auto-generated and allows OIDC to recognize the caller as a GitHub action. `subject identifier` will be generated by GitHub when we'll try to connect and provision resources on Azure. Here we created a Federated Credential for when we're executing a Github Action in `production environment`. - -Et voilà :sparkles: - -> __TLDR__ : For simplicity here we basically create an **identity that is able to create anything in your whole Azure subscription**. This has been made for simplicity but keep in mind that it doesnt follow the ***least privilege principle***. In real-world use-case, you better would have create an identity in the same resource group you wanna deploy (to reduce impact zone). - -Let's come back to our CD pipeline now. :eyes: - -## Deploy Infrastructure - -Before running our workflow we have two last things to add. - -If you understood well when we'll connect to Azure through `azure/login@v2` action and a federated credential will be fetched. - -This one should be used when provisionning resources (whether using bicep, az cli, terraform and so on). - -Also our federated credential is only valid on a GitHub job executed in production environment : that's why we set `environment: production`. - -That being said, add the following code in your workflow : - -```yaml -# on -# ... - -permissions: - # Require write permission to Fetch an OIDC token (required for federated credential) and write it - # It will be automatically used on actions / cli that needs it - id-token: write - -# env -# ... - -deploy_infrastructure: - runs-on: ubuntu-latest - environment: production # bind the job to the production environment -``` - -Now push your work into your remoted branch (whether a feature one or main branch depending how you decided to do) and go to GitHub Actions tab on your GitHub repository, a workflow should be executing. - -If you did well, everything should be green at the end :heavy_check_mark:. - -You can now come back to your Azure portal and look for **"App Service"** in the main search bar. - -You should find yours and on the Overview page see the `Default domain` property being displayed. - -Click on it (this could take time) and .. tadah ! You're App Service is created and online :star2:. - -![Default App Service page](./assets/app_service_default_page.png) - -Now let's deploy our backend API on it. :rocket: - -## Deploy Backend API - -Quite simple, first of all let's create the job responsible of deploying the backend API : `deploy_backend`. - -Add the following code in your GitHub workflow file : - -```yaml -deploy_backend: - runs-on: ubuntu-latest - needs: deploy_infrastructure - environment: production - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup .NET SDK 9.0.x - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '9.0.x' - - - name: Publish the app - run: dotnet publish -c Release --property:PublishDir=publish # Publish the app to the API project publish folder - working-directory: ./backend # Specify where to find the solution file in repository - - - name: Login 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: Deploy backend to App Service - uses: azure/webapps-deploy@v2 - with: - app-name: ${{ needs.deploy_infrastructure.outputs.appServiceName }} # Access to the previous job output to get the appServiceName deployed with bicep - package: ./backend/ParkNDeploy.Api/publish # Path to the previously published app -``` - -Let's explain it a bit : -- `needs` clause allows you to wait a specified job before being executed, that way we ensure our infrastructure is provisionned before deploying our source code -- `Publish the app` is specific on your backend stack : for dotnet API, the dotnet publish is sufficient to create a deployable bundle -- `azure/webapps-deploy@v2` is the action that allows us to deploy our backend to Azure App Service - -:bulb: Notice the `app-name` property on the `azure/webapps-deploy@v2` action, we're specifying **needs.deploy_infrastructure.outputs.appServiceName** variable value. - -As its name implies, it is a value exposed by our `deploy_infrastructure` job. This trick allows us to pass value between jobs, but we need to expose those value. :smirk: - -Add the following code on the **deploy_infrastructure** job : - -```yaml -deploy_infrastructure: - runs-on: ubuntu-latest - environment: production - - outputs: - appServiceName: ${{ steps.bicep_deploy.outputs.appServiceName }} - - steps: - # ... -``` - -Through the `outputs` keyword we're exposing key-value pairs. - -Notice that here again we're using a value coming from a step, the `bicep_deploy` one : **steps.bicep_deploy.outputs.appServiceName** (that's the purpose of adding an **id** on this step :wink:). - -Well, our CD pipeline is finally ready so push the code and wait for our app to be deployed. :rocket: - -:bulb: In your GitHub workflow logs, you could access to the deployed API URL or you can also go through **Azure Portal** to your App Service instance and go click on **Default Domain** link. - -The app can take some time to launch, but when it's done .... WUT, we got a 404 Not Found ?! :cold_sweat: - -This is quite normal : it is a pure API that not exposing any endpoint on the root path, nevertheless ... - -For those who read the [backend readme file](../backend/README.md), you know that our API is exposing a Swagger UI right ? :smirk: - -Add `/swagger` to the url and you should see something like this : - -![backend swagger](./assets/backend_swagger.png) - -Congrats, our API is finally deployed ! :sparkles: - -Let's [add our UI](./step2_deploy_frontend.md) to visualize our parkings. :eyes: diff --git a/doc/step2_deploy_frontend.md b/doc/step2_deploy_frontend.md deleted file mode 100644 index 30299ec3..00000000 --- a/doc/step2_deploy_frontend.md +++ /dev/null @@ -1,236 +0,0 @@ -# Step 2 : Deploy ParkNDeploy Frontend - -## State about Azure resources - -In order to deploy a react application there's multiple ways of doing it : -- Azure App Service : quite a bit expensive (CPU wise) for an SPA -- [Azure Storage Account](https://byalexblog.net/article/react-azure-storage/) : basic storage resources allowing you to store and expose your html files (that's basically what a SPA is under the hood) -- Azure Static Web app : quite new resource created specially for static apps such as SPAs - -We will then go for this option : `Azure Static Web App`. - -This resource is offering tons of usefull [functionnalities](https://learn.microsoft.com/azure/static-web-apps/overview) but here we gonna stay simple : we just want to deploy our App on it. - -:bulb: For instance, we not gonna use [Preview environments](https://learn.microsoft.com/azure/static-web-apps/preview-environments) (but you can after this workshop if you are interested in :smirk:). - -Our new resource will be part of our previously created resource group, therefore our Azure infrastructure will look like this : - -``` -tenant <- no need to be provisionned (but authentication required ...) - └── subscription <- no need to be provisionned (but authentication required ...) - └── resourceGroup <- already provisionned - ├── appServicePlan <- already provisionned - | └── appService <- already provisionned - └── staticWebApp - └── ** Your Wonderfull Frontend ** -``` - -## Create Frontend Infrastructure - -As we did for our `App Service` resource, we gonna create a `Static Web App` bicep module. - -Create a `./infrastructure/modules/staticWebApp.bicep` file with the following code : - -```bicep -param location string -param project string -param identifier string - -resource swa 'Microsoft.Web/staticSites@2024-04-01 ' = { - name: '${project}-swa-${identifier}' - location: location - - sku: { - name: 'Free' - } - - properties: {} // Even empty, it's mandatory ... -} - -output swaName string = swa.name // Expose Static Web App name as we did for App Service for deployment purpose -``` - -Nothing fancy, it's quite a basic resource provisionning for our use case. -> **TLDR** : Do not miss the `properties` as the documentation doesnt make it mandatory, errors logs aren't telling explicitly to you, but it took me quite a time of debugging to figure out it is mandatory. :dizzy_face: -> -> Thanks this [post](https://github.com/Azure/static-web-apps/issues/868) for giving me the answer. :pray: - -Now call your module in your `./infrastructure/main.bicep` file : - -```bicep -param swaLocation string // Static Web App locations are limited, we need to add another variable - -// App Service & App Service Plan creation -// ... - -// Create the Static Web App through the StaticWebApp module -module staticWebApp 'modules/staticWebApp.bicep' = { - name: 'staticWebApp' - params: { - location: swaLocation - project: project - identifier: identifier - } -} - -output appServiceName string = appService.outputs.appServiceName // Export AppServiceName in order to deploy the API later on -output staticWebAppName string = staticWebApp.outputs.swaName // Export StaticWebAppName in order to deploy the Frontend late -``` - -You may have seen that we also expose the `staticWebAppName` to be able to deploy our code on it after. :wink: - -## Deploy Infrastructure - -Our CD pipeline for our infrastructure is actually almost ready to go. - -We first need to add our new bicep parameter : **swaLocation**. - -As we did with **location**, we gonna create a `AZURE_SWA_REGION` GitHub repository secret. - -Its value could be one of those : centralus, eastasia, eastus, eastus2, westeurope. - -:bulb: Take a consistent location with your resource group. :eyes: - -Then you just have to adjust our `bicep_deploy` step to use it : - -```yaml -- name: Deploy bicep - id: bicep_deploy - uses: azure/arm-deploy@v2 - with: - subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} - region: ${{ secrets.AZURE_REGION }} - template: ./infrastructure/main.bicep - parameters: project=${{ vars.PROJECT_NAME }} location=${{ secrets.AZURE_REGION }} swaLocation=${{ secrets.AZURE_SWA_REGION }} identifier=${{ vars.AZURE_RESOURCE_IDENTIFIER }} - resourceGroupName: ${{ env.AZURE_RG_NAME }} -``` - -Perfect ! Now just push your code and trigger the GitHub workflow. :grin: - -When it's finished come back to the **Azure Portal** and look for your freshly deployed **"Static Web App"**. - -On the **Overview** page, look for the `URL` link and click on it. - -:bulb: The URL is pseudo-randomly generated, to have a custom domain it requires [few more steps](https://learn.microsoft.com/en-us/azure/static-web-apps/custom-domain). - -You should face with the following page telling you that you're resource is ready to host your code : - -![swa default page](./assets/swa_default_page.png) - -## Deploy Frontend App - -You may know what we gonna do now right ? :eyes: - -We'll create another deployment job for frontend, `deploy_frontend` for instance. - -Expose the `staticWebAppName` for our `deploy_infrastructure` job so that we could pass it to the dedicated action for Azure Static Web App resource. - -Commit, push and go ! - -So let's do it, expose the `staticWebAppName` output : - -```yaml -deploy_infrastructure: - runs-on: ubuntu-latest - environment: production - - outputs: - appServiceName: ${{ steps.bicep_deploy.outputs.appServiceName }} - staticWebAppName: ${{ steps.bicep_deploy.outputs.staticWebAppName }} - - steps: - # ... -``` - -Create the `deploy_frontend` job : - -```yaml -# deploy_infrastructure ... - -deploy_frontend: - runs-on: ubuntu-latest - needs: deploy_infrastructure - environment: production - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Build the app - run: npm install && npm run build - working-directory: ./frontend - - - name: Login 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: Deploy frontend to Static Web App - uses: azure/static-web-apps-deploy@v1 - with: - app_location: frontend/dist - action: upload - skip_app_build: true - skip_api_build: true -``` - -> **Note** : You may have seen that now, two jobs will depends on **deploy_infrastructure** job. This will cause both **deploy_frontend** and **deploy_backend** to be run in parallel. :eyes: - -Commit, Push, run your workflow and ... what happened ? - -`azure/static-web-apps-deploy@v1` action is telling you that a deployment token is needed but ***what is that damn token*** ? :confused: - -→ Go on the [GitHub documentation](https://github.com/Azure/static-web-apps-deploy?tab=readme-ov-file) for this action and look for the file `action.yml` (it's basically the GitHub action entrypoint). - -You see that yes, an `azure_static_web_apps_api_token` is required. - -If you search a bit to find what it is you'll understand that when you deploy an **Azure Static Web App**, a specific deployment token is created. - -You then need to pass it to the `azure/static-web-apps-deploy@v1` action to be able to deploy your app. - -Here you have two options : -- Get it manually from your resource on **Azure Portal**, store it as a secret, and use it in your workflow -- Get it automatically during your job through `az cli`, assign it in a workflow scoped variable and use it directly - -To be consistent with the workshop, we'll go on the automated way (also to avoid push ing your secret on the web ...) but you could try the manual way if you want. :wink: - -Add the following step in your `deploy_frontend` job : - -```yaml - -# Login to Azure -# ... - -- name: Get Static Web App deployment token - run: | - SWA_DEPLOYMENT_TOKEN=$(az staticwebapp secrets list -n ${{ needs.deploy_infrastructure.outputs.staticWebAppName }} -o tsv --query properties.apiKey) - echo SWA_DEPLOYMENT_TOKEN=$SWA_DEPLOYMENT_TOKEN >> $GITHUB_ENV - -# Deploy frontend to Static Web App -# ... -``` - -and pass your freshly new `SWA_DEPLOYMENT_TOKEN` variable to your `azure/static-web-apps-deploy@v1` action : - -```yaml -- name: Deploy frontend to Static Web App - uses: azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ env.SWA_DEPLOYMENT_TOKEN }} - app_location: frontend/dist - action: upload - skip_app_build: true - skip_api_build: true -``` - -Now you can push your code again, trigger your workflow again and tadah. :sparkles: - -Our app is now deployed let see how wonderfull it looks ! - -Wait ... seems there's a problem with the backend no ? :disappointed_relieved: - -![react app no backend error](./assets/react_app_no_backend_error.png) - -Let's troobleshoot this [connexion problem](step3_troobleshooting_connexion.md). :eyeglasses: diff --git a/doc/step3_troobleshooting_connexion.md b/doc/step3_troobleshooting_connexion.md deleted file mode 100644 index bc85a790..00000000 --- a/doc/step3_troobleshooting_connexion.md +++ /dev/null @@ -1,109 +0,0 @@ -# Step 3 : Troobleshooting Frontend <==> API connexion - -## Find out the problem - -Let's open your navigator debugger, go on the **Network tab** and reload so that we could see the request made on the API. - -You see ? The Frontend is calling the Backend but using the Frontend URL, weird huh ? - -It seems our call is being redirected by a proxy or something similar. :eyes: - -Let's take a step back. - -What would happend if we deployed our app in a basic provider like OVH for instance ? - -You wouldn't have such a proxy (by default), and would have seen the API URL in the chrome debugger Network tab. - -You would then have to fix CORS error by adding a policy on your backend (whether on the App Service or inside the Backend App directly), et voilà ! - -But that's not how Azure Static App works. :grimacing: - -We'll have to use a what we call a `Linked Backend`. - -Of course Static Web App could be linked to multiple backend with differents [types](https://learn.microsoft.com/azure/static-web-apps/apis-overview#api-options) (depending on sku used). - -In order to link our Azure App Service instance, we'll need the **Standard** sku (which is not free :smirk:). - -> **Notes** : Some [constraints](https://learn.microsoft.com/azure/static-web-apps/apis-overview#constraints) have to be keep in mind : -> - need to have a `/api` basePath on your API, that's why it's mentionned in the [backend readme file](../backend/README.md). -> - backend will, by default, no longer be accessible elsewhere than our Static Web App - -## Frontend Infrastructure update - -Let's start by updating the Static Web App sku : - -```bicep -sku: { - name: 'Standard' - tier: 'Standard' -} -``` - -Then create a new bicep module `./infrastructure/modules/staticWebAppBackend.bicep` : - -```bicep -param backendBindedResourceId string -param swaName string -param location string - -resource staticWebAppBackend 'Microsoft.Web/staticSites/linkedBackends@2022-03-01' = { - name: '${swaName}/backend' - properties: { - backendResourceId: backendBindedResourceId - region: location - } -} -``` - -Notice that we need to pass our backend resource id in order to create our link. :eyes: - -So well, let's update our `./infrastructure/modules/appService.bicep` file to expose it : - -```bicep -// Previous outputs -// ... -output appServiceId string = app.id -``` - -And finally let's update our main bicep to create our new resource and pass the backend resource id :grin: : - -```bicep -// Previous resources -// ... -module staticWebAppBackend 'modules/staticWebAppBackend.bicep' = { - name: 'staticWebAppBackend' - params: { - backendBindedResourceId: appService.outputs.appServiceId - swaName: staticWebApp.outputs.swaName - location: location - } -} - -// Outputs -// ... -``` - -Perfect our bicep project now meets our goal. :heavy_check_mark: - -Push your code, trigger the workflow for the last time, and see the final result. :wink: - -## Final test - -If you followed every single steps, you should end with something like this : - -![final app](./assets/final_deployed_app.png) - -Congratulation you just ended this workshop ! :sparkles: - -You'll now have three options : -- Continue with [exercises](step4_further_improvements.md) to make some improvements on our project :eyes: -- Studying by your own following some [additionnal resources](to_go_further.md) :rocket: -- Leave it there, you heard enough about DevOps for now :dizzy_face: - -Whatever, I hope you enjoyed this initiation DevOps workshop as much as me to produce it. :metal: - -Feel free to leave me a comment on my [email adress](mailto:ju.raillard@hotmail.fr) or on my [LinkedIn](https://www.linkedin.com/in/julien-raillard/). :blush: - -You can also leave a star on the main project you forked to make it more visible. :pray: - -Thank you for following along, and happy coding! :computer: diff --git a/doc/step4_further_improvements.md b/doc/step4_further_improvements.md deleted file mode 100644 index d2eec117..00000000 --- a/doc/step4_further_improvements.md +++ /dev/null @@ -1,85 +0,0 @@ -# Step 4 : Further improvements - -Below you'll find some suggestions to improve our project. - -Those will be splited in two types : functionnalities, refactorings. - -As its name implies, it would be better to implement functionnalities before thinking about refactorings but the choice is yours. :wink: - -Stars number will indicate the difficulty. - -Every suggested improvements will be followed with clue(s) to achieve it. - -## New functionnalities - -:star: Trigger the deployment pipeline using git tag - -→ In Git, a tag is a way to mark our source code and associate a version on it. - -:bulb: You can restrict the tag to follow the semantic versionning : `MAJOR.MINOR.PATCH` , where MAJOR, MINOR and PATCH are a digit from 0 to 9. - -:star::star: Create a CI Pipeline specific for Merge Requests - -→ The pipeline should **only** be triggered when a merge request is created - -→ The pipeline would (in parallel or sequentially) : -- For Frontend app : - - build the react app - - run the linting script - - :bulb: See package.json file ... :eyes: - -- For Backend app : - - [build the dotnet app in release mode](https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-build) - -→ This aim to have a minimal check (the solution compiles) when someone is making a merge request on your repository before reviewing the code and merge it :wink: - -:star::star: Create the CI Pipeline for releases and connect it to our CD Pipeline - -→ At this step, CI release pipeline could just be single or multiple jobs (for both frontend & backend) executed before CD pipeline Jobs. Spliting into two distinct workflows is further refactoring step. - -→ The CI release pipeline would (in parallel or sequentially) : -- For Frontend app : - - build the react app - - create and push the artifact -- For Backend app : - - publish the dotnet app - - create and push the artifact - -→ The CD pipeline should be automatically triggered when your CI pipeline is ended - -→ The CD pipeline should download the previous uploaded artifacts instead of building it - -:star::star::star: Display the app version in the Frontend app - -→ You need to be able to trigger your pipeline by a tag, in order to get the version - -→ You not necessarily need to have a CI release pipeline implemented but you can - -→ You need to pass, somehow, the version to the App in order to display it, the [frontend README file](../frontend/README.md) might give your somes clues ... :eyes: - -:star::star::star::star: Your package version displayed should be consistent in your repository. - -→ Means we can see the version in source code somehow - -## Refactorings - -:star: Match the least privilege principle - -→ Refactor the permissions to be retrieve only when needed (not on workflow level here ... :eyes:) - -:star::star: Split your CI and CD pipeline into two workflows - -→ A tag should trigger CI workflow and this workflow should trigger CD workflow if it pass - -:bulb: Test the two possibilities and analyze pros and cons : -- workflow_run -- workflow_call - -When you're done, compare your finds with this [article](https://jiminbyun.medium.com/github-actions-workflow-run-vs-workflow-call-3f1a5c6e19d4). :eyes: - -:star::star::star: Allow developer team to trigger the CD pipeline manually by specifying artifacts - -→ You'll need to allow manual workflow trigger and retrieve the artifacts url using the GitHub API - -→ Remember that workflow_dispatch will only works if youre workflows are on default branch or if you're using GitHub CLI to trigger it. diff --git a/doc/to_go_further.md b/doc/to_go_further.md deleted file mode 100644 index cc09372c..00000000 --- a/doc/to_go_further.md +++ /dev/null @@ -1,13 +0,0 @@ -# Further Learning Resources for DevOps Enthusiasts - -Did you fall in love with DevOps in this course or just want go deeper ? :eyes: - -The following ressources might fit your needs as they cover all the DevOps concepts :grin: - -:arrow_forward: [John Savill's Masterclass](https://www.youtube.com/watch?v=R74bm8IGu2M&list=PLlVtbbG169nFr8RzQ4GIxUEznpNR53ERq) - -→ A comprehensive YouTube playlist created by John Savill, an australian Microsoft MVP. This masterclass covers a wide range of topics related to DevOps, cloud computing, and Microsoft technologies. John Savill has also created numerous playlists for almost every Microsoft certification, making his content a valuable resource for both beginners and advanced learners. - -:book: [Designing and Implementing Microsoft DevOps Solutions course](https://learn.microsoft.com/credentials/certifications/exams/az-400/) - -→ This course, available on Microsoft Learn, is designed to help you prepare for the AZ-400 certification exam. It includes a mix of hands-on labs and written materials that cover various DevOps practices and tools. By completing this course, you will gain the knowledge and skills needed to become a certified DevOps Engineer Expert. \ No newline at end of file