Skip to content

Commit

Permalink
Merge pull request #150 from bouvet/CI/remove-pr-environments-on-close
Browse files Browse the repository at this point in the history
Ci/remove pr environments on close
  • Loading branch information
Jone-Torgersen authored Feb 10, 2025
2 parents 0fff076 + ec09d83 commit c055627
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 89 deletions.
100 changes: 100 additions & 0 deletions .github/workflows/build-and-deploy-backend-prod.yml
Original file line number Diff line number Diff line change
@@ -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 }}
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -19,7 +24,6 @@ env:
jobs:
build-project:
runs-on: ubuntu-latest
name: Build 🛠️
container:
image: mcr.microsoft.com/dotnet/sdk:8.0
steps:
Expand All @@ -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
Expand All @@ -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 }}
Expand All @@ -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
Expand All @@ -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 }}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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"
Expand All @@ -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
Expand All @@ -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"
2 changes: 1 addition & 1 deletion .github/workflows/deploy-azure-resources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 11 additions & 7 deletions .github/workflows/on-closed-pull-request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ on:
pull_request:
types: [closed]
branches: [main]
paths-ignore:
- README.md
- docs/
workflow_dispatch:
inputs:
pr:
Expand All @@ -19,7 +16,7 @@ env:

jobs:
remove:
if: ${{ github.actor != 'dependabot[bot]' }}
if: github.actor != 'dependabot[bot]'
runs-on: ubuntu-latest
name: 🗑️ Remove

Expand All @@ -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 }}
--pr ${{ github.event.pull_request.number || inputs.pr }} \
--subscription ${{ env.AZURE_SUBSCRIPTION_ID }}

0 comments on commit c055627

Please sign in to comment.