Skip to content

Refactor Azure deployment workflow to streamline AKS context setup an… #22

Refactor Azure deployment workflow to streamline AKS context setup an…

Refactor Azure deployment workflow to streamline AKS context setup an… #22

name: Deploy Infrastructure To Azure
on:
push:
branches:
- 'apply/**'
jobs:
terraform:
runs-on: ubuntu-latest
if: contains(fromJson('["devsocket"]'), github.actor)
env:
TF_VAR_db_admin_password: ${{ secrets.DB_ADMIN_PASSWORD }}
ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
ARM_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Parse environment from branch
id: env
run: |
BRANCH_NAME="${GITHUB_REF#refs/heads/}"
ENV_NAME="${BRANCH_NAME#apply/}"
echo "env_name=$ENV_NAME" >> "$GITHUB_OUTPUT"
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Show current subscription
run: az account show --output json
- name: Register Microsoft.Storage provider
run: az provider register --namespace Microsoft.Storage
- name: Provision backend resources
run: |
az group create --name "ecommerce-qa-rg" --location "centralus" || true
az storage account create --name "qatfstateaccount" --resource-group "ecommerce-qa-rg" --location "centralus" --sku Standard_LRS || true
az storage container create --name "qatfstate" --account-name "qatfstateaccount" || true
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
- name: Terraform Init
run: terraform init -reconfigure
working-directory: terraform/environments/${{ steps.env.outputs.env_name }}
- name: Terraform Plan
run: terraform plan -var-file="terraform.tfvars"
working-directory: terraform/environments/${{ steps.env.outputs.env_name }}
- name: Terraform Apply
run: terraform apply -auto-approve -var-file="terraform.tfvars"
working-directory: terraform/environments/${{ steps.env.outputs.env_name }}
- name: Extract AKS info from Terraform outputs
id: aks
run: |
echo "cluster_name=$(terraform output -raw cluster_name)" >> $GITHUB_OUTPUT
echo "resource_group=$(terraform output -raw resource_group_name)" >> $GITHUB_OUTPUT
working-directory: terraform/environments/${{ steps.env.outputs.env_name }}
- name: Set AKS context
uses: azure/aks-set-context@v3
with:
resource-group: ${{ steps.aks.outputs.resource_group }}
cluster-name: ${{ steps.aks.outputs.cluster_name }}
- name: Create GHCR image pull secret
run: |
kubectl get secret ghcr-secret --namespace=default || \
kubectl create secret docker-registry ghcr-secret \
--docker-server=ghcr.io \
--docker-username=${{ secrets.GHCR_USERNAME }} \
--docker-password=${{ secrets.AKS_GHCR_PAT }} \
--docker-email=venkatasudheerkumar.kondeti@gmail.com \
--namespace=default
- name: Delete apply branch
if: startsWith(github.ref, 'refs/heads/apply/')
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
BRANCH_NAME="${GITHUB_REF#refs/heads/}"
echo "Deleting branch: $BRANCH_NAME"
gh api \
-X DELETE \
/repos/${{ github.repository }}/git/refs/heads/$BRANCH_NAME