diff --git a/.github/workflows/build-and-deploy-backend-prod.yml b/.github/workflows/build-and-deploy-backend-prod.yml new file mode 100644 index 0000000..1032ce5 --- /dev/null +++ b/.github/workflows/build-and-deploy-backend-prod.yml @@ -0,0 +1,100 @@ +name: Build and Deploy to Production +on: + push: + branches: + - 'main' + paths: + - 'Bouvet.Developer.Survey.Backend/**' + workflow_dispatch: + inputs: + branch: + description: 'Branch to deploy' + required: true + default: 'main' + +env: + DOTNET_VERSION: '8.0' + IMAGE_TAG: ${{ github.sha }} + +jobs: + build-project: + runs-on: ubuntu-latest + name: Build ๐Ÿ› ๏ธ + container: + image: mcr.microsoft.com/dotnet/sdk:8.0 + steps: + - name: Checkout project + uses: actions/checkout@v4 + + - name: Set up .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - name: Dotnet restore + working-directory: ./Bouvet.Developer.Survey.Backend + run: dotnet restore Bouvet.Developer.Survey.Backend.generated.sln + + - name: Build with dotnet + working-directory: ./Bouvet.Developer.Survey.Backend + run: dotnet build Bouvet.Developer.Survey.Backend.generated.sln --configuration Release --no-restore + + - name: Publish + working-directory: ./Bouvet.Developer.Survey.Backend + run: dotnet publish Bouvet.Developer.Survey.Backend.generated.sln --configuration Release --no-build + + deploy-to-prod: + runs-on: ubuntu-latest + name: Deploy to Production + environment: Production + needs: [build-project] # No dependency on test or preview environment + + defaults: + run: + working-directory: ./Bouvet.Developer.Survey.Backend + steps: + - name: Checkout GitHub Action + uses: actions/checkout@v4 + + - name: Login via Azure CLI + uses: azure/login@v1 + with: + creds: ${{ secrets.AZURE_CREDENTIALS }} + + - name: Enable ACR Admin Account + run: | + az acr update -n bouvetSurveyContainerRegistryProd --admin-enabled true + + - name: Get ACR name + id: getacrname + run: | + acrName=$(az acr list --resource-group ${{ secrets.AZURE_RG }} --query "[0].name" -o tsv) + echo "ACR_NAME=$acrName" >> $GITHUB_ENV + + - name: Get ACR Credentials + id: getacrcreds + run: | + loginServer=$(az acr list --resource-group ${{ secrets.AZURE_RG }} --query "[0].loginServer" -o tsv) + loginName=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG }} --query username -o tsv) + password=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG }} --query "passwords[0].value" -o tsv) + echo "LOGIN_SERVER=$loginServer" >> $GITHUB_ENV + echo "LOGIN_NAME=$loginName" >> $GITHUB_ENV + echo "PASSWORD=$password" >> $GITHUB_ENV + + - name: Build and Push API Image to ACR + uses: azure/docker-login@v1 + with: + login-server: ${{ env.LOGIN_SERVER }} + username: ${{ env.LOGIN_NAME }} + password: ${{ env.PASSWORD }} + - run: | + docker build . -t ${{ env.LOGIN_SERVER }}/backend-image:${{ github.sha }} + docker push ${{ env.LOGIN_SERVER }}/backend-image:${{ github.sha }} + echo "IMAGE_TAG=${{ github.sha }}" >> $GITHUB_ENV + + - name: Update Container App Image + run: | + az containerapp update \ + --name bds-prod-containerapp-api \ + --resource-group ${{ secrets.AZURE_RG_PROD }} \ + --image ${{ env.LOGIN_SERVER }}/backend-image:${{ github.sha }} diff --git a/.github/workflows/azure-deploy-api.yaml b/.github/workflows/build-and-deploy-backend-test.yml similarity index 56% rename from .github/workflows/azure-deploy-api.yaml rename to .github/workflows/build-and-deploy-backend-test.yml index 627b436..65dfdb8 100644 --- a/.github/workflows/azure-deploy-api.yaml +++ b/.github/workflows/build-and-deploy-backend-test.yml @@ -1,11 +1,16 @@ -name: Build and Push API +name: Build and Deploy API to Test on: push: branches: - 'main' paths: - 'Bouvet.Developer.Survey.Backend/**' - workflow_dispatch: # Allow manual trigger from any branch + pull_request: + branches: + - 'main' + paths: + - 'Bouvet.Developer.Survey.Backend/**' + workflow_dispatch: inputs: branch: description: 'Branch to deploy' @@ -19,7 +24,6 @@ env: jobs: build-project: runs-on: ubuntu-latest - name: Build ๐Ÿ› ๏ธ container: image: mcr.microsoft.com/dotnet/sdk:8.0 steps: @@ -46,10 +50,8 @@ jobs: test: runs-on: ubuntu-latest needs: build-project - name: Test ๐Ÿงช container: image: mcr.microsoft.com/dotnet/sdk:8.0 - steps: - name: Checkout code uses: actions/checkout@v4 @@ -75,15 +77,14 @@ jobs: runs-on: ubuntu-latest name: Deploy to test needs: test - defaults: run: working-directory: ./Bouvet.Developer.Survey.Backend steps: - - name: 'Checkout GitHub Action' + - name: Checkout GitHub Action uses: actions/checkout@v4 - - name: 'Login via Azure CLI' + - name: Login via Azure CLI uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} @@ -92,18 +93,12 @@ jobs: run: | az acr update -n bouvetSurveyContainerRegistry --admin-enabled true - - name: Get ACR name - id: getacrname - run: | - acrName=$(az acr list --resource-group ${{ secrets.AZURE_RG_TEST }} --query "[0].name" -o tsv) - echo "ACR_NAME=$acrName" >> $GITHUB_ENV - - name: Get ACR Credentials id: getacrcreds run: | - loginServer=$(az acr list --resource-group ${{ secrets.AZURE_RG_TEST }} --query "[0].loginServer" -o tsv) - loginName=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST }} --query username -o tsv) - password=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST }} --query "passwords[0].value" -o tsv) + loginServer=$(az acr list --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query "[0].loginServer" -o tsv) + loginName=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query username -o tsv) + password=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query "passwords[0].value" -o tsv) echo "LOGIN_SERVER=$loginServer" >> $GITHUB_ENV echo "LOGIN_NAME=$loginName" >> $GITHUB_ENV echo "PASSWORD=$password" >> $GITHUB_ENV @@ -123,63 +118,7 @@ jobs: uses: azure/arm-deploy@v2 with: subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} - resourceGroupName: ${{ secrets.AZURE_RG_TEST }} + resourceGroupName: ${{ secrets.AZURE_RG_TEST_DELETION }} template: infra/container-api-test.bicep parameters: acrServer=${{ env.LOGIN_SERVER }} acrUsername=${{ env.LOGIN_NAME }} acrPassword=${{ env.PASSWORD }} containerImage=${{ env.IMAGE_TAG }} failOnStdErr: false - - deploy-to-prod: - runs-on: ubuntu-latest - name: Deploy/Production - needs: [test, deploy-to-test] - environment: Production - - defaults: - run: - working-directory: ./Bouvet.Developer.Survey.Backend - steps: - - name: 'Checkout GitHub Action' - uses: actions/checkout@v4 - - - name: 'Login via Azure CLI' - uses: azure/login@v1 - with: - creds: ${{ secrets.AZURE_CREDENTIALS }} - - - name: Enable ACR Admin Account - run: | - az acr update -n bouvetSurveyContainerRegistryProd --admin-enabled true - - - name: Get ACR name - id: getacrname - run: | - acrName=$(az acr list --resource-group ${{ secrets.AZURE_RG }} --query "[0].name" -o tsv) - echo "ACR_NAME=$acrName" >> $GITHUB_ENV - - - name: Get ACR Credentials - id: getacrcreds - run: | - loginServer=$(az acr list --resource-group ${{ secrets.AZURE_RG }} --query "[0].loginServer" -o tsv) - loginName=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG }} --query username -o tsv) - password=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG }} --query "passwords[0].value" -o tsv) - echo "LOGIN_SERVER=$loginServer" >> $GITHUB_ENV - echo "LOGIN_NAME=$loginName" >> $GITHUB_ENV - echo "PASSWORD=$password" >> $GITHUB_ENV - - - name: Build and Push API Image to ACR - uses: azure/docker-login@v1 - with: - login-server: ${{ env.LOGIN_SERVER }} - username: ${{ env.LOGIN_NAME }} - password: ${{ env.PASSWORD }} - - run: | - docker build . -t ${{ env.LOGIN_SERVER }}/backend-image:${{ github.sha }} - docker push ${{ env.LOGIN_SERVER }}/backend-image:${{ github.sha }} - echo "IMAGE_TAG=${{ github.sha }}" >> $GITHUB_ENV - - - name: Update Container App Image - run: | - az containerapp update \ - --name bds-prod-containerapp-api \ - --resource-group ${{ secrets.AZURE_RG_PROD }} \ - --image ${{ env.LOGIN_SERVER }}/backend-image:${{ github.sha }} diff --git a/.github/workflows/build-and-deploy-frontend-to-prod.yml b/.github/workflows/build-and-deploy-frontend-prod.yml similarity index 100% rename from .github/workflows/build-and-deploy-frontend-to-prod.yml rename to .github/workflows/build-and-deploy-frontend-prod.yml diff --git a/.github/workflows/build-and-deploy-frontend-on-pr.yml b/.github/workflows/build-and-deploy-frontend-test.yml similarity index 84% rename from .github/workflows/build-and-deploy-frontend-on-pr.yml rename to .github/workflows/build-and-deploy-frontend-test.yml index c267c59..8a53104 100644 --- a/.github/workflows/build-and-deploy-frontend-on-pr.yml +++ b/.github/workflows/build-and-deploy-frontend-test.yml @@ -38,15 +38,15 @@ jobs: - name: Get ACR name id: getacrname run: | - acrName=$(az acr list --resource-group ${{ secrets.AZURE_RG_TEST }} --query "[0].name" -o tsv) + acrName=$(az acr list --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query "[0].name" -o tsv) echo "ACR_NAME=$acrName" >> $GITHUB_ENV - name: Get ACR Credentials id: getacrcreds run: | - loginServer=$(az acr list --resource-group ${{ secrets.AZURE_RG_TEST }} --query "[0].loginServer" -o tsv) - loginName=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST }} --query username -o tsv) - password=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST }} --query "passwords[0].value" -o tsv) + loginServer=$(az acr list --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query "[0].loginServer" -o tsv) + loginName=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query username -o tsv) + password=$(az acr credential show -n ${{ env.ACR_NAME }} --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query "passwords[0].value" -o tsv) echo "LOGIN_SERVER=$loginServer" >> $GITHUB_ENV echo "LOGIN_NAME=$loginName" >> $GITHUB_ENV echo "PASSWORD=$password" >> $GITHUB_ENV @@ -55,7 +55,7 @@ jobs: id: get_backend_fqdn run: | # Fetch the backend FQDN dynamically using Azure CLI - BACKEND_FQDN=$(az containerapp show --name bds-test-containerapp-api --resource-group ${{ secrets.AZURE_RG_TEST }} --query "properties.configuration.ingress.fqdn" -o tsv) + BACKEND_FQDN=$(az containerapp show --name bds-test-containerapp-api --resource-group ${{ secrets.AZURE_RG_TEST_DELETION }} --query "properties.configuration.ingress.fqdn" -o tsv) BACKEND_URL="https://${BACKEND_FQDN}/api" echo "BACKEND_URL=${BACKEND_URL}" >> $GITHUB_ENV echo "Retrieved backend FQDN: $BACKEND_FQDN" @@ -75,7 +75,7 @@ jobs: uses: azure/arm-deploy@v1 with: subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - resourceGroupName: ${{ secrets.AZURE_RG_TEST }} + resourceGroupName: ${{ secrets.AZURE_RG_TEST_DELETION }} template: ./infra/container-frontend-test.bicep parameters: > location=norwayeast @@ -86,5 +86,5 @@ jobs: - name: Get Container App URL run: | - fqdn=$(az containerapp show -n bds-test-containerapp-frontend -g ${{ secrets.AZURE_RG_TEST }} --query properties.configuration.ingress.fqdn -o tsv) + fqdn=$(az containerapp show -n bds-test-containerapp-frontend -g ${{ secrets.AZURE_RG_TEST_DELETION }} --query properties.configuration.ingress.fqdn -o tsv) echo "Container App is deployed at: https://$fqdn" diff --git a/.github/workflows/deploy-azure-resources.yml b/.github/workflows/deploy-azure-resources.yml index 7090836..e119b12 100644 --- a/.github/workflows/deploy-azure-resources.yml +++ b/.github/workflows/deploy-azure-resources.yml @@ -30,7 +30,7 @@ jobs: uses: azure/arm-deploy@v2 with: subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} - resourceGroupName: ${{ secrets.AZURE_RG_TEST }} + resourceGroupName: ${{ secrets.AZURE_RG_TEST_DELETION }} template: infra/main-test.bicep parameters: "sqlServerPassword=${{ secrets.SQL_SERVER_PASSWORD_TEST }}" failOnStdErr: false diff --git a/.github/workflows/on-closed-pull-request.yaml b/.github/workflows/on-closed-pull-request.yaml index de1dfd5..088255b 100644 --- a/.github/workflows/on-closed-pull-request.yaml +++ b/.github/workflows/on-closed-pull-request.yaml @@ -4,9 +4,6 @@ on: pull_request: types: [closed] branches: [main] - paths-ignore: - - README.md - - docs/ workflow_dispatch: inputs: pr: @@ -19,7 +16,7 @@ env: jobs: remove: - if: ${{ github.actor != 'dependabot[bot]' }} + if: github.actor != 'dependabot[bot]' runs-on: ubuntu-latest name: ๐Ÿ—‘๏ธ Remove @@ -29,9 +26,16 @@ jobs: with: creds: ${{ secrets.AZURE_CREDENTIALS }} + - name: Set up .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0 + + - name: Install Azure Resources Cleaner + run: dotnet tool install --global azure-resources-cleaner + - name: Remove review resources run: | - dotnet tool install --global azure-resources-cleaner && \ azrc \ - --pr ${{ inputs.pr || github.event.pull_request.number }} \ - --subscription ${{ env.AZURE_SUBSCRIPTION_ID }} \ No newline at end of file + --pr ${{ github.event.pull_request.number || inputs.pr }} \ + --subscription ${{ env.AZURE_SUBSCRIPTION_ID }}