From 6d786d46b4e48d063967a883193d77efe621d4f4 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Mon, 30 Jun 2025 22:07:53 +0200 Subject: [PATCH 01/40] clenup rg-cleanup.yaml --- .github/workflows/rg-cleanup.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/rg-cleanup.yaml b/.github/workflows/rg-cleanup.yaml index ae22539..a57a543 100644 --- a/.github/workflows/rg-cleanup.yaml +++ b/.github/workflows/rg-cleanup.yaml @@ -15,8 +15,6 @@ jobs: runs-on: ubuntu-latest environment: dev env: - PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} - PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} steps: - name: Log in to Azure with OIDC @@ -27,6 +25,4 @@ jobs: subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} - name: Delete all resources in the resource group - run: | - echo "Generate Random PostgreSQL Server Name" - az resource list --resource-group $RESOURCE_GROUP --query "[].id" -o tsv | xargs -I {} az resource delete --ids {} \ No newline at end of file + run: az resource list --resource-group $RESOURCE_GROUP --query "[].id" -o tsv | xargs -I {} az resource delete --ids {} \ No newline at end of file From 9b9af30a1b173d911147eb4e108d188c3ec3f47b Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 20:45:32 +0200 Subject: [PATCH 02/40] Create Key Vault --- .github/workflows/pgdb-create.yaml | 50 ++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index c59159c..8710169 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -19,6 +19,7 @@ jobs: PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} + KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} steps: - name: Log in to Azure with OIDC uses: azure/login@v1 @@ -33,20 +34,43 @@ jobs: echo "Runner Public IP: $IP" echo "Create PostgreSQL Flexible Server" - PGDB_NAME="pg-rest-api-westeurope" - az postgres flexible-server create \ - --resource-group $RESOURCE_GROUP \ - --name $PGDB_NAME \ - --location westeurope \ - --admin-user $PG_ADMIN_USER \ - --admin-password $PG_ADMIN_PASSWORD \ - --tier Burstable \ - --sku-name Standard_B1ms \ - --storage-size 32 \ - --version 16 \ - --public-access $IP + PGDB_NAME="pg-rest-api-westeurope" + RESULT=$(az postgres flexible-server show --name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + + if [ -z "$result" ]; then + echo "PostgresSQL $PGDB_NAME does NOT exist." + az postgres flexible-server create \ + --resource-group $RESOURCE_GROUP \ + --name $PGDB_NAME \ + --location westeurope \ + --admin-user $PG_ADMIN_USER \ + --admin-password $PG_ADMIN_PASSWORD \ + --tier Burstable \ + --sku-name Standard_B1ms \ + --storage-size 32 \ + --version 16 \ + --public-access $IP + else + echo "PostgresSQL exists: $result" + fi echo "Check PostgreSQL server status" az postgres flexible-server show \ --name $PGDB_NAME \ - --resource-group $RESOURCE_GROUP \ No newline at end of file + --resource-group $RESOURCE_GROUP + + echo "Create Key Vault" + RESULT=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + + if [ -z "$result" ]; then + echo "Key Vault $KEY_VAULT_NAME does NOT exist." + az keyvault create \ + --name $KEY_VAULT_NAME \ + --resource-group $RESOURCE_GROUP \ + --location westeurope \ + --sku standard \ + --enable-soft-delete true \ + --enable-purge-protection true + else + echo "Key Vault exists: $result" + fi From e8f6dd010c07dd3adfb54a878e4d444d7e82474a Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 20:48:21 +0200 Subject: [PATCH 03/40] Fix variable namings --- .github/workflows/pgdb-create.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index 8710169..02b4615 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -35,9 +35,9 @@ jobs: echo "Create PostgreSQL Flexible Server" PGDB_NAME="pg-rest-api-westeurope" - RESULT=$(az postgres flexible-server show --name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + DB_EXISTS=$(az postgres flexible-server show --name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) - if [ -z "$result" ]; then + if [ -z "$DB_EXISTS" ]; then echo "PostgresSQL $PGDB_NAME does NOT exist." az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ @@ -51,7 +51,7 @@ jobs: --version 16 \ --public-access $IP else - echo "PostgresSQL exists: $result" + echo "PostgresSQL exists: $DB_EXISTS" fi echo "Check PostgreSQL server status" @@ -60,9 +60,9 @@ jobs: --resource-group $RESOURCE_GROUP echo "Create Key Vault" - RESULT=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + KEY_VAULT_EXISTS=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) - if [ -z "$result" ]; then + if [ -z "$KEY_VAULT_EXISTS" ]; then echo "Key Vault $KEY_VAULT_NAME does NOT exist." az keyvault create \ --name $KEY_VAULT_NAME \ @@ -72,5 +72,5 @@ jobs: --enable-soft-delete true \ --enable-purge-protection true else - echo "Key Vault exists: $result" + echo "Key Vault exists: $KEY_VAULT_EXISTS" fi From b64cef7dac01d1f6742568530644792c2632f0ab Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 20:53:32 +0200 Subject: [PATCH 04/40] commented out --- .github/workflows/pgdb-create.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index 02b4615..b201494 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -35,9 +35,9 @@ jobs: echo "Create PostgreSQL Flexible Server" PGDB_NAME="pg-rest-api-westeurope" - DB_EXISTS=$(az postgres flexible-server show --name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + #DB_EXISTS=$(az postgres flexible-server show --name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) - if [ -z "$DB_EXISTS" ]; then + #if [ -z "$DB_EXISTS" ]; then echo "PostgresSQL $PGDB_NAME does NOT exist." az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ @@ -50,9 +50,9 @@ jobs: --storage-size 32 \ --version 16 \ --public-access $IP - else - echo "PostgresSQL exists: $DB_EXISTS" - fi + #else + #echo "PostgresSQL exists: $DB_EXISTS" + #fi echo "Check PostgreSQL server status" az postgres flexible-server show \ From d372dc1f8c1c35d82ed65512b287a136ee7ed376 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 20:58:44 +0200 Subject: [PATCH 05/40] Try fix database exists check --- .github/workflows/pgdb-create.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index b201494..f80bebf 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -35,7 +35,7 @@ jobs: echo "Create PostgreSQL Flexible Server" PGDB_NAME="pg-rest-api-westeurope" - #DB_EXISTS=$(az postgres flexible-server show --name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + #DB_EXISTS=$(az postgres flexible-server db show --database-name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) #if [ -z "$DB_EXISTS" ]; then echo "PostgresSQL $PGDB_NAME does NOT exist." From 2de0d21c9be1b27c7e2ace690649b166c5fab6b1 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 21:01:41 +0200 Subject: [PATCH 06/40] uncomment fix --- .github/workflows/pgdb-create.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index f80bebf..347a71e 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -35,9 +35,9 @@ jobs: echo "Create PostgreSQL Flexible Server" PGDB_NAME="pg-rest-api-westeurope" - #DB_EXISTS=$(az postgres flexible-server db show --database-name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + DB_EXISTS=$(az postgres flexible-server db show --database-name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) - #if [ -z "$DB_EXISTS" ]; then + if [ -z "$DB_EXISTS" ]; then echo "PostgresSQL $PGDB_NAME does NOT exist." az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ @@ -50,9 +50,9 @@ jobs: --storage-size 32 \ --version 16 \ --public-access $IP - #else - #echo "PostgresSQL exists: $DB_EXISTS" - #fi + else + echo "PostgresSQL exists: $DB_EXISTS" + fi echo "Check PostgreSQL server status" az postgres flexible-server show \ From e32fa0b9763c0ab9037b1bb3f9efa9725a333177 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 21:10:34 +0200 Subject: [PATCH 07/40] fix --- .github/workflows/pgdb-create.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index 347a71e..00aa8f2 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -35,9 +35,12 @@ jobs: echo "Create PostgreSQL Flexible Server" PGDB_NAME="pg-rest-api-westeurope" - DB_EXISTS=$(az postgres flexible-server db show --database-name $PGDB_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + PGDB_EXISTS=$(az postgres flexible-server show \ + --name "$PGDB_NAME" \ + --resource-group "$RESOURCE_GROUP" \ + --query "name" -o tsv 2>/dev/null) - if [ -z "$DB_EXISTS" ]; then + if [ -z "$PGDB_EXISTS" ]; then echo "PostgresSQL $PGDB_NAME does NOT exist." az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ @@ -51,7 +54,7 @@ jobs: --version 16 \ --public-access $IP else - echo "PostgresSQL exists: $DB_EXISTS" + echo "PostgresSQL exists: $PGDB_EXISTS" fi echo "Check PostgreSQL server status" From 0508c8c88bbba386bc03a92c0037de42940475bb Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 21:15:25 +0200 Subject: [PATCH 08/40] fix key vault create --- .github/workflows/pgdb-create.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index 00aa8f2..1d84bbf 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -63,7 +63,10 @@ jobs: --resource-group $RESOURCE_GROUP echo "Create Key Vault" - KEY_VAULT_EXISTS=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query "name" -o tsv 2>/dev/null) + KEY_VAULT_EXISTS=$(az keyvault show \ + --name $KEY_VAULT_NAME \ + --resource-group $RESOURCE_GROUP \ + --query "name" -o tsv 2>/dev/null) if [ -z "$KEY_VAULT_EXISTS" ]; then echo "Key Vault $KEY_VAULT_NAME does NOT exist." @@ -71,9 +74,7 @@ jobs: --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location westeurope \ - --sku standard \ - --enable-soft-delete true \ - --enable-purge-protection true + --sku standard else echo "Key Vault exists: $KEY_VAULT_EXISTS" fi From b8242f0740c6b714e3b83c30cb634843f9783f6f Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 21:17:15 +0200 Subject: [PATCH 09/40] add echo "check if exists" for key vault --- .github/workflows/pgdb-create.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index 1d84bbf..fbaa3f6 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -34,7 +34,7 @@ jobs: echo "Runner Public IP: $IP" echo "Create PostgreSQL Flexible Server" - PGDB_NAME="pg-rest-api-westeurope" + PGDB_NAME="pg-rest-api-westeurope" PGDB_EXISTS=$(az postgres flexible-server show \ --name "$PGDB_NAME" \ --resource-group "$RESOURCE_GROUP" \ @@ -68,6 +68,7 @@ jobs: --resource-group $RESOURCE_GROUP \ --query "name" -o tsv 2>/dev/null) + echo "check if exists" if [ -z "$KEY_VAULT_EXISTS" ]; then echo "Key Vault $KEY_VAULT_NAME does NOT exist." az keyvault create \ From 97450dabf70f1b76f36f1d8a44676c008a5ae302 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 21:46:40 +0200 Subject: [PATCH 10/40] fix --- .github/workflows/pgdb-create.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index fbaa3f6..c04de25 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -34,11 +34,14 @@ jobs: echo "Runner Public IP: $IP" echo "Create PostgreSQL Flexible Server" - PGDB_NAME="pg-rest-api-westeurope" + PGDB_NAME="pg-rest-api-westeurope" + + set +e PGDB_EXISTS=$(az postgres flexible-server show \ --name "$PGDB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --query "name" -o tsv 2>/dev/null) + set -e if [ -z "$PGDB_EXISTS" ]; then echo "PostgresSQL $PGDB_NAME does NOT exist." From b2fc5083370b5b2ec9b161d69b6f020ab68823fe Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 21:57:16 +0200 Subject: [PATCH 11/40] fix --- .github/workflows/pgdb-create.yaml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index c04de25..f122700 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -65,20 +65,21 @@ jobs: --name $PGDB_NAME \ --resource-group $RESOURCE_GROUP - echo "Create Key Vault" + echo "Create Key Vault" + set +e KEY_VAULT_EXISTS=$(az keyvault show \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query "name" -o tsv 2>/dev/null) - - echo "check if exists" + set -e + if [ -z "$KEY_VAULT_EXISTS" ]; then echo "Key Vault $KEY_VAULT_NAME does NOT exist." az keyvault create \ - --name $KEY_VAULT_NAME \ - --resource-group $RESOURCE_GROUP \ - --location westeurope \ - --sku standard + --name $KEY_VAULT_NAME \ + --resource-group $RESOURCE_GROUP \ + --location westeurope \ + --sku standard else echo "Key Vault exists: $KEY_VAULT_EXISTS" fi From 907cdb83f338f0d4df08132b877195f1a8ced2b0 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 22:27:53 +0200 Subject: [PATCH 12/40] comment --- .github/workflows/pgdb-create.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index f122700..507fcda 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -66,12 +66,12 @@ jobs: --resource-group $RESOURCE_GROUP echo "Create Key Vault" - set +e + #set +e KEY_VAULT_EXISTS=$(az keyvault show \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query "name" -o tsv 2>/dev/null) - set -e + #set -e if [ -z "$KEY_VAULT_EXISTS" ]; then echo "Key Vault $KEY_VAULT_NAME does NOT exist." From 4c3eccb9cd070923509699f27ce7ddecd9ec196c Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 8 Jul 2025 22:42:58 +0200 Subject: [PATCH 13/40] fix --- .github/workflows/pgdb-create.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/pgdb-create.yaml index 507fcda..78bb50d 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/pgdb-create.yaml @@ -66,13 +66,14 @@ jobs: --resource-group $RESOURCE_GROUP echo "Create Key Vault" - #set +e + set +e KEY_VAULT_EXISTS=$(az keyvault show \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query "name" -o tsv 2>/dev/null) - #set -e + set -e + echo "before if" if [ -z "$KEY_VAULT_EXISTS" ]; then echo "Key Vault $KEY_VAULT_NAME does NOT exist." az keyvault create \ From a0da8a913f6b0a4325a881d65aec1c984cad864d Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 20:31:56 +0200 Subject: [PATCH 14/40] refactoring deployment pipeline with Key Vault creation --- .../workflows/{pgdb-create.yaml => cicd.yaml} | 64 ++++++++++++------- frontend_app/src/components/index.tsx | 16 +++++ 2 files changed, 58 insertions(+), 22 deletions(-) rename .github/workflows/{pgdb-create.yaml => cicd.yaml} (77%) diff --git a/.github/workflows/pgdb-create.yaml b/.github/workflows/cicd.yaml similarity index 77% rename from .github/workflows/pgdb-create.yaml rename to .github/workflows/cicd.yaml index 78bb50d..9eed473 100644 --- a/.github/workflows/pgdb-create.yaml +++ b/.github/workflows/cicd.yaml @@ -1,4 +1,4 @@ -name: "[PR] Create Azure PostgreSQL Server Pipeline" +name: "[PR] Deploy Pipeline" on: push: @@ -11,8 +11,8 @@ permissions: contents: read jobs: - create_pgdb: - name: Creating PostgreSQL Server + deploy_environment: + name: Deploy dev environment runs-on: ubuntu-latest environment: dev env: @@ -28,6 +28,33 @@ jobs: tenant-id: ${{ vars.AZURE_TENANT_ID }} subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} + - name: Create key vault + run: | + echo "Create Key Vault" + set +e + KEY_VAULT_EXISTS=$(az keyvault show \ + --name $KEY_VAULT_NAME \ + --resource-group $RESOURCE_GROUP \ + --query "name" -o tsv 2>/dev/null) + set -e + + echo "before if" + if [ -z "$KEY_VAULT_EXISTS" ]; then + echo "Key Vault $KEY_VAULT_NAME does NOT exist." + az keyvault create \ + --name $KEY_VAULT_NAME \ + --resource-group $RESOURCE_GROUP \ + --location westeurope \ + --sku standard + else + echo "Key Vault exists: $KEY_VAULT_EXISTS" + fi + + az rbac role assignment create \ + --assignee ${{ vars.DEV_GROUP_ID }} \ + --role "Key Vault Secrets Officer" \ + --scope "/subscriptions/${{ vars.AZURE_SUBSCRIPTION_ID }}/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME" + - name: Deploy PG Flexible Server run: | IP=$(curl -s https://ifconfig.me) @@ -65,22 +92,15 @@ jobs: --name $PGDB_NAME \ --resource-group $RESOURCE_GROUP - echo "Create Key Vault" - set +e - KEY_VAULT_EXISTS=$(az keyvault show \ - --name $KEY_VAULT_NAME \ - --resource-group $RESOURCE_GROUP \ - --query "name" -o tsv 2>/dev/null) - set -e - - echo "before if" - if [ -z "$KEY_VAULT_EXISTS" ]; then - echo "Key Vault $KEY_VAULT_NAME does NOT exist." - az keyvault create \ - --name $KEY_VAULT_NAME \ - --resource-group $RESOURCE_GROUP \ - --location westeurope \ - --sku standard - else - echo "Key Vault exists: $KEY_VAULT_EXISTS" - fi + echo "Add PostgreSQL secrets in key vault." + az keyvault secret set \ + --vault-name $KEY_VAULT_NAME \ + --name "pg-admin-user" \ + --value $PG_ADMIN_USER + + az keyvault secret set \ + --vault-name $KEY_VAULT_NAME \ + --name "pg-admin-password" \ + --value $PG_ADMIN_PASSWORD + + diff --git a/frontend_app/src/components/index.tsx b/frontend_app/src/components/index.tsx index 5371697..a62cf34 100644 --- a/frontend_app/src/components/index.tsx +++ b/frontend_app/src/components/index.tsx @@ -1,3 +1,19 @@ import TaskManager from './TaskManager'; export { TaskManager }; + + +const optimize = ( + fn: (input: any) => any, +): any => { + const cache = {}; + + return (input) => { + if (cache[input]) { + return cache[input]; + } + const result = fn(input); + cache[input] = result; + return result; + } +} From da56fa65b85bed400c6eb6fca8b80ee19938b98e Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 20:34:38 +0200 Subject: [PATCH 15/40] Fix role assigment error --- .github/workflows/cicd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 9eed473..58756be 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -50,7 +50,7 @@ jobs: echo "Key Vault exists: $KEY_VAULT_EXISTS" fi - az rbac role assignment create \ + az role assignment create \ --assignee ${{ vars.DEV_GROUP_ID }} \ --role "Key Vault Secrets Officer" \ --scope "/subscriptions/${{ vars.AZURE_SUBSCRIPTION_ID }}/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME" From ac39ce77210c92e0436d628763f875ee7f717dab Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 20:56:30 +0200 Subject: [PATCH 16/40] Assign Key Vault Secrets Officer role to the SPN --- .github/workflows/cicd.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 58756be..a8022d5 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -50,6 +50,13 @@ jobs: echo "Key Vault exists: $KEY_VAULT_EXISTS" fi + echo "Assign Key Vault Secrets Officer role to the SPN" + az role assignment create \ + --assignee ${{ vars.AZURE_CLIENT_ID }} \ + --role "Key Vault Secrets Officer" \ + --scope "/subscriptions/${{ vars.AZURE_SUBSCRIPTION_ID }}/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.KeyVault/vaults/$KEY_VAULT_NAME" + + echo "Assign Key Vault Secrets Officer role to the dev group" az role assignment create \ --assignee ${{ vars.DEV_GROUP_ID }} \ --role "Key Vault Secrets Officer" \ From 6e863a8da43f27d03ebc1c84a704ab66c5dfbe17 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:22:07 +0200 Subject: [PATCH 17/40] Build docker image and push it to GitHub Container Registry --- .github/workflows/cicd.yaml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index a8022d5..3f05ca1 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -110,4 +110,28 @@ jobs: --name "pg-admin-password" \ --value $PG_ADMIN_PASSWORD - + build_docker_image: + name: Build docker image and save in Github Container Registry + runs-on: ubuntu-latest + environment: dev + env: + PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} + PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} + RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} + KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Build docker image and push it to GitHub Container Registry + run: | + echo "Log in to GitHub Container Registry" + echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + echo "Build docker image" + docker build -t ghcr.io/${{ github.repository_owner }}/rest-api:latest . + echo "Docker image built successfully" + + echo "Push docker image to GitHub Container Registry" + docker push ghcr.io/${{ github.repository_owner }}/rest-api:latest + From 284887c966b78872d1a123f24e962963cb0a7ee4 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:25:25 +0200 Subject: [PATCH 18/40] lowercase repository name --- .github/workflows/cicd.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 3f05ca1..e79f41f 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -128,10 +128,12 @@ jobs: echo "Log in to GitHub Container Registry" echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') + echo "Build docker image" - docker build -t ghcr.io/${{ github.repository_owner }}/rest-api:latest . + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest . echo "Docker image built successfully" echo "Push docker image to GitHub Container Registry" - docker push ghcr.io/${{ github.repository_owner }}/rest-api:latest + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest From 5d96dc11af061f5964f0d5a3298a8ff28c386293 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:29:22 +0200 Subject: [PATCH 19/40] Fix failed to read dockerfile --- .github/workflows/cicd.yaml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index e79f41f..a9da146 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -130,10 +130,17 @@ jobs: REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') - echo "Build docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest . + echo "Build BE docker image" + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .backend_app echo "Docker image built successfully" - echo "Push docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest + echo "Push BE docker image to GitHub Container Registry" + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .backend_app + + echo "Build FE docker image" + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .frontend_app + echo "Docker image built successfully" + + echo "Push FE docker image to GitHub Container Registry" + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .frontend_app From 04163cb70afb855880f26ebd3968d39b2152f858 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:31:12 +0200 Subject: [PATCH 20/40] Fix error: path ".backend_app" not found --- .github/workflows/cicd.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index a9da146..7a902f8 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -123,7 +123,7 @@ jobs: - name: Checkout code uses: actions/checkout@v2 - - name: Build docker image and push it to GitHub Container Registry + - name: Build docker images and push it to GitHub Container Registry run: | echo "Log in to GitHub Container Registry" echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin @@ -131,16 +131,16 @@ jobs: REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "Build BE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .backend_app + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app echo "Docker image built successfully" echo "Push BE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .backend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app echo "Build FE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .frontend_app + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app echo "Docker image built successfully" echo "Push FE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest .frontend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app From ddb8b48837c4ccf0e2049fed839e512f58d0ce32 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:35:47 +0200 Subject: [PATCH 21/40] try fix docker file naming error --- .github/workflows/cicd.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 7a902f8..1bf794b 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -131,16 +131,16 @@ jobs: REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "Build BE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/backend_app echo "Docker image built successfully" echo "Push BE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/backend_app - echo "Build FE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app + echo "Build FE docker image" + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/frontend_app echo "Docker image built successfully" echo "Push FE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/frontend_app From c570510c816e3cec88ec580ee234efa9cde66458 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:36:47 +0200 Subject: [PATCH 22/40] rollback fix --- .github/workflows/cicd.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 1bf794b..4fde2ec 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -131,16 +131,16 @@ jobs: REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "Build BE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/backend_app + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app echo "Docker image built successfully" echo "Push BE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/backend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app echo "Build FE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/frontend_app + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app echo "Docker image built successfully" echo "Push FE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest/frontend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app From f4ea15640435b71dc4d053991762ea5ef5bbd854 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:39:51 +0200 Subject: [PATCH 23/40] fix docker images naming --- .github/workflows/cicd.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 4fde2ec..38dab8e 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -131,16 +131,16 @@ jobs: REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "Build BE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api-backend:latest backend_app echo "Docker image built successfully" echo "Push BE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest backend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api-backend:latest echo "Build FE docker image" - docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app + docker build -t ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest frontend_app echo "Docker image built successfully" echo "Push FE docker image to GitHub Container Registry" - docker push ghcr.io/$REPO_OWNER_LOWER/rest-api:latest frontend_app + docker push ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest From 5af9ebdabd84197c763c0f8b3ba0a60233c32a02 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:41:57 +0200 Subject: [PATCH 24/40] Try to fix error: denied: installation not allowed to Create organization package --- .github/workflows/cicd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 38dab8e..4044e47 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -126,7 +126,7 @@ jobs: - name: Build docker images and push it to GitHub Container Registry run: | echo "Log in to GitHub Container Registry" - echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') From 7ad4e41b0830b634fa557da8a40cc758108c4831 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Fri, 11 Jul 2025 21:48:27 +0200 Subject: [PATCH 25/40] rollback and provide packages permissions --- .github/workflows/cicd.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 4044e47..3cb509d 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -9,6 +9,7 @@ on: permissions: id-token: write # ОБОВ'ЯЗКОВО для OIDC логіну contents: read + packages: write jobs: deploy_environment: @@ -126,7 +127,7 @@ jobs: - name: Build docker images and push it to GitHub Container Registry run: | echo "Log in to GitHub Container Registry" - echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') From 30428c822268b26153bc235e2c94b2768f5b5b01 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 18:22:48 +0200 Subject: [PATCH 26/40] Deploy frontend and backend web apps job --- .github/workflows/cicd.yaml | 54 ++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 3cb509d..a5eef5a 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -12,8 +12,8 @@ permissions: packages: write jobs: - deploy_environment: - name: Deploy dev environment + deploy_postgres_and_key_vault: + name: Deploy postgres database and key vault runs-on: ubuntu-latest environment: dev env: @@ -144,4 +144,52 @@ jobs: echo "Push FE docker image to GitHub Container Registry" docker push ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest - + + deploy_web_apps: + name: Deploy frontend and backend web apps + runs-on: ubuntu-latest + environment: dev + needs:[deploy_environment, build_docker_image] + env: + PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} + PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} + RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} + KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} + steps: + - name: Log in to Azure with OIDC + uses: azure/login@v1 + with: + client-id: ${{ vars.AZURE_CLIENT_ID }} + tenant-id: ${{ vars.AZURE_TENANT_ID }} + subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} + + - name: Deploy frontend and backend web apps + run: | + echo "Create App Service Plan" + az appservice plan create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-plan \ + --sku B1 \ + --is-linux + + REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') + + echo "Deploy frontend web app" + az webapp create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-frontend \ + --plan rest-api-plan \ + --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest + + echo "Deploy backend web app" + az webapp create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-backend \ + --plan rest-api-plan \ + --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-backend:latest + + echo "Set environment variables for backend web app" + az webapp config appsettings set \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-backend \ + --settings PG_ADMIN_USER=$PG_ADMIN_USER PG_ADMIN_PASSWORD=$PG_ADMIN_PASSWORD KEY_VAULT_NAME=$KEY_VAULT_NAME \ No newline at end of file From a2abf71801ff53b334989fe9dee2eec736d15eb2 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 18:24:58 +0200 Subject: [PATCH 27/40] fix tabs in yaml --- .github/workflows/cicd.yaml | 94 ++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index a5eef5a..23f5788 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -146,50 +146,50 @@ jobs: docker push ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest deploy_web_apps: - name: Deploy frontend and backend web apps - runs-on: ubuntu-latest - environment: dev - needs:[deploy_environment, build_docker_image] - env: - PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} - PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} - RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} - KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} - steps: - - name: Log in to Azure with OIDC - uses: azure/login@v1 - with: - client-id: ${{ vars.AZURE_CLIENT_ID }} - tenant-id: ${{ vars.AZURE_TENANT_ID }} - subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} - - - name: Deploy frontend and backend web apps - run: | - echo "Create App Service Plan" - az appservice plan create \ - --resource-group $RESOURCE_GROUP \ - --name rest-api-plan \ - --sku B1 \ - --is-linux - - REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') - - echo "Deploy frontend web app" - az webapp create \ - --resource-group $RESOURCE_GROUP \ - --name rest-api-frontend \ - --plan rest-api-plan \ - --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest - - echo "Deploy backend web app" - az webapp create \ - --resource-group $RESOURCE_GROUP \ - --name rest-api-backend \ - --plan rest-api-plan \ - --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-backend:latest - - echo "Set environment variables for backend web app" - az webapp config appsettings set \ - --resource-group $RESOURCE_GROUP \ - --name rest-api-backend \ - --settings PG_ADMIN_USER=$PG_ADMIN_USER PG_ADMIN_PASSWORD=$PG_ADMIN_PASSWORD KEY_VAULT_NAME=$KEY_VAULT_NAME \ No newline at end of file + name: Deploy frontend and backend web apps + runs-on: ubuntu-latest + environment: dev + needs:[deploy_environment, build_docker_image] + env: + PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} + PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} + RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} + KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} + steps: + - name: Log in to Azure with OIDC + uses: azure/login@v1 + with: + client-id: ${{ vars.AZURE_CLIENT_ID }} + tenant-id: ${{ vars.AZURE_TENANT_ID }} + subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }} + + - name: Deploy frontend and backend web apps + run: | + echo "Create App Service Plan" + az appservice plan create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-plan \ + --sku B1 \ + --is-linux + + REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') + + echo "Deploy frontend web app" + az webapp create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-frontend \ + --plan rest-api-plan \ + --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest + + echo "Deploy backend web app" + az webapp create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-backend \ + --plan rest-api-plan \ + --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-backend:latest + + echo "Set environment variables for backend web app" + az webapp config appsettings set \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-backend \ + --settings PG_ADMIN_USER=$PG_ADMIN_USER PG_ADMIN_PASSWORD=$PG_ADMIN_PASSWORD KEY_VAULT_NAME=$KEY_VAULT_NAME \ No newline at end of file From f2d73b0228eef9ef3c50705cf326db5cc58704f8 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 18:26:14 +0200 Subject: [PATCH 28/40] Fix yaml needs --- .github/workflows/cicd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 23f5788..fca2779 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -149,7 +149,7 @@ jobs: name: Deploy frontend and backend web apps runs-on: ubuntu-latest environment: dev - needs:[deploy_environment, build_docker_image] + needs:[deploy_postgres_and_key_vault, build_docker_image] env: PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} From 51d3a6b2318907d409b9b44f40879aeb5a523f4e Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 18:28:19 +0200 Subject: [PATCH 29/40] fix needs in yaml --- .github/workflows/cicd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index fca2779..f1d2c7b 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -149,7 +149,7 @@ jobs: name: Deploy frontend and backend web apps runs-on: ubuntu-latest environment: dev - needs:[deploy_postgres_and_key_vault, build_docker_image] + needs: [deploy_postgres_and_key_vault, build_docker_image] env: PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} From a31618f2b3cdd5a55b3d1d8e05a83d17ea45a558 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 18:53:49 +0200 Subject: [PATCH 30/40] update app service plan SKU from B1 to F1 in deployment workflow --- .github/workflows/cicd.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index f1d2c7b..88e1fd2 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -165,11 +165,11 @@ jobs: - name: Deploy frontend and backend web apps run: | - echo "Create App Service Plan" + echo "Create App Service Plan" az appservice plan create \ --resource-group $RESOURCE_GROUP \ --name rest-api-plan \ - --sku B1 \ + --sku F1 \ --is-linux REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') From 4b149e067c25d8b4ef8a6ffd40a496227fc7400e Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 19:01:30 +0200 Subject: [PATCH 31/40] update app service plan SKU from F1 to B1 and add location parameter --- .github/workflows/cicd.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 88e1fd2..78c1ce7 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -169,8 +169,9 @@ jobs: az appservice plan create \ --resource-group $RESOURCE_GROUP \ --name rest-api-plan \ - --sku F1 \ + --sku B1 \ --is-linux + --location westeurope REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') From bc22c6a4d9983dc8e00078a038eebd9751b56894 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 20:47:23 +0200 Subject: [PATCH 32/40] fix --- .github/workflows/cicd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 78c1ce7..3133824 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -170,7 +170,7 @@ jobs: --resource-group $RESOURCE_GROUP \ --name rest-api-plan \ --sku B1 \ - --is-linux + --is-linux \ --location westeurope REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') From a3d4f0d2e0d80b25b9bc499efb053d5be08a04f9 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 20:58:52 +0200 Subject: [PATCH 33/40] update deployment commands to use separate container registry and image name parameters --- .github/workflows/cicd.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 3133824..6ec80d3 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -180,14 +180,16 @@ jobs: --resource-group $RESOURCE_GROUP \ --name rest-api-frontend \ --plan rest-api-plan \ - --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-frontend:latest + --container-registry-url ghcr.io \ + --container-image-name $REPO_OWNER_LOWER/rest-api-frontend:latest echo "Deploy backend web app" az webapp create \ --resource-group $RESOURCE_GROUP \ --name rest-api-backend \ --plan rest-api-plan \ - --deployment-container-image-name ghcr.io/$REPO_OWNER_LOWER/rest-api-backend:latest + --container-registry-url ghcr.io \ + --container-image-name $REPO_OWNER_LOWER/rest-api-backend:latest echo "Set environment variables for backend web app" az webapp config appsettings set \ From 7c13b1287b1ede625394eb617623448df046cd5f Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 21:37:55 +0200 Subject: [PATCH 34/40] enable logging for container --- .github/workflows/cicd.yaml | 38 +++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 6ec80d3..fdd8c3e 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -174,25 +174,43 @@ jobs: --location westeurope REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') - - echo "Deploy frontend web app" + + echo "Deploy backend web app" az webapp create \ --resource-group $RESOURCE_GROUP \ - --name rest-api-frontend \ + --name rest-api-backend \ --plan rest-api-plan \ --container-registry-url ghcr.io \ - --container-image-name $REPO_OWNER_LOWER/rest-api-frontend:latest + --container-image-name $REPO_OWNER_LOWER/rest-api-backend:latest + + echo "Set environment variables for backend web app" + az webapp config appsettings set \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-backend \ + --settings PG_ADMIN_USER=$PG_ADMIN_USER PG_ADMIN_PASSWORD=$PG_ADMIN_PASSWORD KEY_VAULT_NAME=$KEY_VAULT_NAME - echo "Deploy backend web app" - az webapp create \ + echo "Enable logging for backend web app" + az webapp log config \ --resource-group $RESOURCE_GROUP \ --name rest-api-backend \ + --docker-container-logging filesystem + + echo "Deploy frontend web app" + az webapp create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-frontend \ --plan rest-api-plan \ --container-registry-url ghcr.io \ - --container-image-name $REPO_OWNER_LOWER/rest-api-backend:latest + --container-image-name $REPO_OWNER_LOWER/rest-api-frontend:latest - echo "Set environment variables for backend web app" + echo "Set environment variables for frontend web app" az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ - --name rest-api-backend \ - --settings PG_ADMIN_USER=$PG_ADMIN_USER PG_ADMIN_PASSWORD=$PG_ADMIN_PASSWORD KEY_VAULT_NAME=$KEY_VAULT_NAME \ No newline at end of file + --name rest-api-frontend \ + --settings PG_ADMIN_USER=$PG_ADMIN_USER KEY_VAULT_NAME=$KEY_VAULT_NAME + + echo "Enable logging for frontend web app" + az webapp log config \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-frontend \ + --docker-container-logging filesystem \ No newline at end of file From e38b8151efd57243f557df896482607ee13f2e33 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Tue, 15 Jul 2025 21:43:27 +0200 Subject: [PATCH 35/40] check for existing App Service Plan before creation --- .github/workflows/cicd.yaml | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index fdd8c3e..f15ac57 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -165,13 +165,25 @@ jobs: - name: Deploy frontend and backend web apps run: | - echo "Create App Service Plan" - az appservice plan create \ + echo "Check if App Service Plan exists" + set +e + PLAN_EXISTS=$(az appservice plan show \ --resource-group $RESOURCE_GROUP \ --name rest-api-plan \ - --sku B1 \ - --is-linux \ - --location westeurope + --query "name" -o tsv 2>/dev/null) + set -e + + if [ -z "$PLAN_EXISTS" ]; then + echo "Create App Service Plan" + az appservice plan create \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-plan \ + --sku B1 \ + --is-linux \ + --location westeurope + else + echo "App Service Plan exists: $PLAN_EXISTS" + fi REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') From 4310c8e05367e51b55b879bd3e4593674ca1afa3 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Thu, 17 Jul 2025 20:51:20 +0200 Subject: [PATCH 36/40] refactor: update PostgreSQL admin user secrets and improve web app deployment naming --- .github/workflows/cicd.yaml | 40 ++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index f15ac57..ccd940f 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -17,8 +17,8 @@ jobs: runs-on: ubuntu-latest environment: dev env: - PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} - PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} + PG_ADMIN_USER: ${{ secrets.AZURE_POSTGRESQL_ADMIN_USER }} + PG_ADMIN_PASSWORD: ${{ secrets.AZURE_POSTGRESQL_ADMIN_PASSWORD }} RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} steps: @@ -116,8 +116,8 @@ jobs: runs-on: ubuntu-latest environment: dev env: - PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} - PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} + PG_ADMIN_USER: ${{ secrets.AZURE_POSTGRESQL_ADMIN_USER }} + PG_ADMIN_PASSWORD: ${{ secrets.AZURE_POSTGRESQL_ADMIN_PASSWORD }} RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} steps: @@ -151,8 +151,8 @@ jobs: environment: dev needs: [deploy_postgres_and_key_vault, build_docker_image] env: - PG_ADMIN_USER: ${{ secrets.PG_ADMIN_USER }} - PG_ADMIN_PASSWORD: ${{ secrets.PG_ADMIN_PASSWORD }} + PG_ADMIN_USER: ${{ secrets.AZURE_POSTGRESQL_ADMIN_USER }} + PG_ADMIN_PASSWORD: ${{ secrets.AZURE_POSTGRESQL_ADMIN_PASSWORD }} RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} KEY_VAULT_NAME: ${{ vars.KEY_VAULT_NAME }} steps: @@ -185,12 +185,14 @@ jobs: echo "App Service Plan exists: $PLAN_EXISTS" fi + BACKEND_WEBAPP_NAME="rest-api-${{ vars.WEBAPP_BACKEND_NAME }}" + PG_SERVER_NAME="${{ vars.AZURE_POSTGRESQL_SERVER_NAME }}.postgres.database.azure.com" REPO_OWNER_LOWER=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') echo "Deploy backend web app" az webapp create \ --resource-group $RESOURCE_GROUP \ - --name rest-api-backend \ + --name $BACKEND_WEBAPP_NAME \ --plan rest-api-plan \ --container-registry-url ghcr.io \ --container-image-name $REPO_OWNER_LOWER/rest-api-backend:latest @@ -198,19 +200,29 @@ jobs: echo "Set environment variables for backend web app" az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ - --name rest-api-backend \ - --settings PG_ADMIN_USER=$PG_ADMIN_USER PG_ADMIN_PASSWORD=$PG_ADMIN_PASSWORD KEY_VAULT_NAME=$KEY_VAULT_NAME + --name $BACKEND_WEBAPP_NAME \ + --settings \ + POSTGRES_HOST=$PG_SERVER_NAME \ + POSTGRES_USER=$PG_ADMIN_USER \ + POSTGRES_PASSWORD=$PG_ADMIN_PASSWORD echo "Enable logging for backend web app" az webapp log config \ --resource-group $RESOURCE_GROUP \ - --name rest-api-backend \ + --name $BACKEND_WEBAPP_NAME \ --docker-container-logging filesystem + echo "Enable logging for backend web app" + az webapp log config \ + --resource-group $RESOURCE_GROUP \ + --name rest-api-backend \ + --docker-container-logging filesystem + FRONTEND_WEBAPP_NAME="rest-api-${{ vars.WEBAPP_FRONTEND_NAME }}" + echo "Deploy frontend web app" az webapp create \ --resource-group $RESOURCE_GROUP \ - --name rest-api-frontend \ + --name $FRONTEND_WEBAPP_NAME \ --plan rest-api-plan \ --container-registry-url ghcr.io \ --container-image-name $REPO_OWNER_LOWER/rest-api-frontend:latest @@ -218,11 +230,11 @@ jobs: echo "Set environment variables for frontend web app" az webapp config appsettings set \ --resource-group $RESOURCE_GROUP \ - --name rest-api-frontend \ - --settings PG_ADMIN_USER=$PG_ADMIN_USER KEY_VAULT_NAME=$KEY_VAULT_NAME + --name $FRONTEND_WEBAPP_NAME \ + --settings KEY_VAULT_NAME=$KEY_VAULT_NAME echo "Enable logging for frontend web app" az webapp log config \ --resource-group $RESOURCE_GROUP \ - --name rest-api-frontend \ + --name $FRONTEND_WEBAPP_NAME \ --docker-container-logging filesystem \ No newline at end of file From d2c933305375bc04ab20abc47c10895433185978 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Thu, 17 Jul 2025 21:08:25 +0200 Subject: [PATCH 37/40] fix rest-api-backend --- .github/workflows/cicd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index ccd940f..fdee0e8 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -214,7 +214,7 @@ jobs: echo "Enable logging for backend web app" az webapp log config \ --resource-group $RESOURCE_GROUP \ - --name rest-api-backend \ + --name $BACKEND_WEBAPP_NAME \ --docker-container-logging filesystem FRONTEND_WEBAPP_NAME="rest-api-${{ vars.WEBAPP_FRONTEND_NAME }}" From f315e0ff25282b4def51ff98aa3d52d1076b54f9 Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Thu, 17 Jul 2025 21:25:20 +0200 Subject: [PATCH 38/40] refactor: parameterize PostgreSQL server name in CI/CD workflow --- .github/workflows/cicd.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index fdee0e8..c4e1f5b 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -17,6 +17,7 @@ jobs: runs-on: ubuntu-latest environment: dev env: + PG_SERVER_NAME: ${{ vars.AZURE_POSTGRESQL_SERVER_NAME }} PG_ADMIN_USER: ${{ secrets.AZURE_POSTGRESQL_ADMIN_USER }} PG_ADMIN_PASSWORD: ${{ secrets.AZURE_POSTGRESQL_ADMIN_PASSWORD }} RESOURCE_GROUP: ${{ secrets.AZURE_RESOURCE_GROUP }} @@ -69,20 +70,19 @@ jobs: echo "Runner Public IP: $IP" echo "Create PostgreSQL Flexible Server" - PGDB_NAME="pg-rest-api-westeurope" - + set +e PGDB_EXISTS=$(az postgres flexible-server show \ - --name "$PGDB_NAME" \ + --name "PG_SERVER_NAME" \ --resource-group "$RESOURCE_GROUP" \ --query "name" -o tsv 2>/dev/null) set -e if [ -z "$PGDB_EXISTS" ]; then - echo "PostgresSQL $PGDB_NAME does NOT exist." + echo "PostgresSQL PG_SERVER_NAME does NOT exist." az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ - --name $PGDB_NAME \ + --name PG_SERVER_NAME \ --location westeurope \ --admin-user $PG_ADMIN_USER \ --admin-password $PG_ADMIN_PASSWORD \ @@ -97,7 +97,7 @@ jobs: echo "Check PostgreSQL server status" az postgres flexible-server show \ - --name $PGDB_NAME \ + --name PG_SERVER_NAME \ --resource-group $RESOURCE_GROUP echo "Add PostgreSQL secrets in key vault." From 80966921cb1aed1f9e327d2f06e9f1296661e00e Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Thu, 17 Jul 2025 21:26:38 +0200 Subject: [PATCH 39/40] fix: use variable for PostgreSQL server name in deployment script --- .github/workflows/cicd.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index c4e1f5b..e1b478b 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -73,7 +73,7 @@ jobs: set +e PGDB_EXISTS=$(az postgres flexible-server show \ - --name "PG_SERVER_NAME" \ + --name "$PG_SERVER_NAME" \ --resource-group "$RESOURCE_GROUP" \ --query "name" -o tsv 2>/dev/null) set -e @@ -82,7 +82,7 @@ jobs: echo "PostgresSQL PG_SERVER_NAME does NOT exist." az postgres flexible-server create \ --resource-group $RESOURCE_GROUP \ - --name PG_SERVER_NAME \ + --name $PG_SERVER_NAME \ --location westeurope \ --admin-user $PG_ADMIN_USER \ --admin-password $PG_ADMIN_PASSWORD \ @@ -97,7 +97,7 @@ jobs: echo "Check PostgreSQL server status" az postgres flexible-server show \ - --name PG_SERVER_NAME \ + --name $PG_SERVER_NAME \ --resource-group $RESOURCE_GROUP echo "Add PostgreSQL secrets in key vault." From 3a63ba92651cf1ac9571ee7c4edf2b763725a3fe Mon Sep 17 00:00:00 2001 From: katerynaZh Date: Thu, 17 Jul 2025 21:37:02 +0200 Subject: [PATCH 40/40] feat: add creation of PostgreSQL database in CI/CD workflow --- .github/workflows/cicd.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index e1b478b..8e7880f 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -100,6 +100,12 @@ jobs: --name $PG_SERVER_NAME \ --resource-group $RESOURCE_GROUP + echo "Create PostgreSQL database" + az postgres flexible-server db create \ + --resource-group "$RESOURCE_GROUP" \ + --server-name "$PG_SERVER_NAME" \ + --database-name tasks_db + echo "Add PostgreSQL secrets in key vault." az keyvault secret set \ --vault-name $KEY_VAULT_NAME \