|
1 | | -name: Deploy Infrastructure |
| 1 | +name: Provision Infrastructure (azd) |
2 | 2 |
|
3 | 3 | on: |
4 | 4 | push: |
|
19 | 19 | - staging |
20 | 20 | - prod |
21 | 21 |
|
| 22 | +permissions: |
| 23 | + id-token: write |
| 24 | + contents: read |
| 25 | + |
22 | 26 | env: |
23 | 27 | AZURE_LOCATION: swedencentral |
| 28 | + AZURE_ENV_NAME: app-mod-aks-${{ github.event.inputs.environment || 'dev' }} |
24 | 29 |
|
25 | 30 | jobs: |
26 | | - deploy-infrastructure: |
| 31 | + provision-infrastructure: |
27 | 32 | runs-on: ubuntu-latest |
28 | 33 | # environment: ${{ github.event.inputs.environment || 'dev' }} # Uncomment when GitHub environments are configured |
29 | 34 |
|
30 | 35 | steps: |
31 | 36 | - name: Checkout code |
32 | 37 | uses: actions/checkout@v4 |
33 | 38 |
|
| 39 | + - name: Install azd |
| 40 | + uses: Azure/setup-azd@v1.0.0 |
| 41 | + |
34 | 42 | - name: Azure Login |
35 | 43 | uses: azure/login@v2 |
36 | 44 | with: |
37 | 45 | creds: ${{ secrets.AZURE_CREDENTIALS }} |
38 | 46 |
|
39 | | - - name: Set environment name |
| 47 | + - name: Set azd environment |
40 | 48 | id: set-env |
41 | 49 | run: | |
42 | | - ENV_NAME="${{ github.event.inputs.environment || 'dev' }}" |
43 | | - echo "ENVIRONMENT_NAME=$ENV_NAME" >> $GITHUB_ENV |
44 | | - echo "environment_name=$ENV_NAME" >> $GITHUB_OUTPUT |
| 50 | + # Create or select environment |
| 51 | + azd env new ${{ env.AZURE_ENV_NAME }} --subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} || true |
| 52 | + azd env select ${{ env.AZURE_ENV_NAME }} |
| 53 | + |
| 54 | + # Set required environment variables |
| 55 | + azd env set AZURE_SUBSCRIPTION_ID ${{ secrets.AZURE_SUBSCRIPTION_ID }} |
| 56 | + azd env set AZURE_LOCATION ${{ env.AZURE_LOCATION }} |
| 57 | + azd env set AZURE_ENV_NAME ${{ env.AZURE_ENV_NAME }} |
| 58 | + |
| 59 | + echo "environment_name=${{ env.AZURE_ENV_NAME }}" >> $GITHUB_OUTPUT |
| 60 | +
|
| 61 | + - name: Preview infrastructure changes |
| 62 | + run: | |
| 63 | + echo "### Infrastructure Preview 🔍" >> $GITHUB_STEP_SUMMARY |
| 64 | + echo "" >> $GITHUB_STEP_SUMMARY |
| 65 | + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY |
| 66 | + azd provision --preview 2>&1 | tee preview.txt || true |
| 67 | + cat preview.txt >> $GITHUB_STEP_SUMMARY |
| 68 | + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY |
45 | 69 |
|
46 | | - - name: Deploy Bicep infrastructure |
| 70 | + - name: Provision Azure infrastructure |
47 | 71 | id: deploy |
48 | 72 | run: | |
49 | | - # Create or get subscription deployment |
50 | | - DEPLOYMENT_NAME="infra-deployment-$(date +%Y%m%d-%H%M%S)" |
51 | | - |
52 | | - echo "Deploying infrastructure..." |
53 | | - az deployment sub create \ |
54 | | - --name $DEPLOYMENT_NAME \ |
55 | | - --location ${{ env.AZURE_LOCATION }} \ |
56 | | - --template-file infra/main.bicep \ |
57 | | - --parameters environmentName=${{ env.ENVIRONMENT_NAME }} \ |
58 | | - --parameters location=${{ env.AZURE_LOCATION }} \ |
59 | | - --parameters tags='{"project":"app-mod-aks","environment":"${{ env.ENVIRONMENT_NAME }}"}' \ |
60 | | - --output json > deployment-output.json |
61 | | - |
62 | | - # Check deployment status |
63 | | - DEPLOYMENT_STATE=$(jq -r '.properties.provisioningState // empty' deployment-output.json) |
64 | | - echo "Deployment state: $DEPLOYMENT_STATE" |
65 | | - |
66 | | - if [ "$DEPLOYMENT_STATE" != "Succeeded" ]; then |
67 | | - echo "Deployment failed or did not complete successfully" |
68 | | - echo "Full deployment output:" |
69 | | - cat deployment-output.json |
70 | | - |
71 | | - # Try to get detailed error information |
72 | | - echo "Checking deployment operations for errors..." |
73 | | - az deployment sub show \ |
74 | | - --name $DEPLOYMENT_NAME \ |
75 | | - --query 'properties.error' \ |
76 | | - --output json || true |
77 | | - |
78 | | - exit 1 |
79 | | - fi |
80 | | - |
81 | | - # Show deployment output for debugging |
82 | | - echo "Deployment succeeded. Output:" |
83 | | - cat deployment-output.json |
84 | | - |
85 | | - # Extract outputs with error checking |
86 | | - RESOURCE_GROUP=$(jq -r '.properties.outputs.AZURE_RESOURCE_GROUP.value // empty' deployment-output.json) |
87 | | - AKS_CLUSTER_NAME=$(jq -r '.properties.outputs.AKS_CLUSTER_NAME.value // empty' deployment-output.json) |
88 | | - ACR_NAME=$(jq -r '.properties.outputs.AZURE_CONTAINER_REGISTRY_NAME.value // empty' deployment-output.json) |
89 | | - ACR_ENDPOINT=$(jq -r '.properties.outputs.AZURE_CONTAINER_REGISTRY_ENDPOINT.value // empty' deployment-output.json) |
| 73 | + echo "Provisioning infrastructure..." |
| 74 | + azd provision --no-prompt |
90 | 75 | |
91 | | - # Verify outputs are not empty |
92 | | - if [ -z "$RESOURCE_GROUP" ] || [ -z "$AKS_CLUSTER_NAME" ] || [ -z "$ACR_NAME" ]; then |
93 | | - echo "Error: Failed to extract deployment outputs" |
94 | | - echo "RESOURCE_GROUP: $RESOURCE_GROUP" |
95 | | - echo "AKS_CLUSTER_NAME: $AKS_CLUSTER_NAME" |
96 | | - echo "ACR_NAME: $ACR_NAME" |
97 | | - exit 1 |
98 | | - fi |
| 76 | + # Get deployment outputs |
| 77 | + RESOURCE_GROUP=$(azd env get-value AZURE_RESOURCE_GROUP) |
| 78 | + AKS_CLUSTER_NAME=$(azd env get-value AKS_CLUSTER_NAME) |
| 79 | + ACR_NAME=$(azd env get-value AZURE_CONTAINER_REGISTRY_NAME) |
| 80 | + ACR_ENDPOINT=$(azd env get-value AZURE_CONTAINER_REGISTRY_ENDPOINT) |
99 | 81 | |
100 | 82 | # Set outputs |
101 | 83 | echo "resource_group=$RESOURCE_GROUP" >> $GITHUB_OUTPUT |
102 | 84 | echo "aks_cluster_name=$AKS_CLUSTER_NAME" >> $GITHUB_OUTPUT |
103 | 85 | echo "acr_name=$ACR_NAME" >> $GITHUB_OUTPUT |
104 | 86 | echo "acr_endpoint=$ACR_ENDPOINT" >> $GITHUB_OUTPUT |
105 | 87 | |
106 | | - # Also set as environment variables for subsequent steps |
| 88 | + # Also set as environment variables |
107 | 89 | echo "RESOURCE_GROUP=$RESOURCE_GROUP" >> $GITHUB_ENV |
108 | 90 | echo "AKS_CLUSTER_NAME=$AKS_CLUSTER_NAME" >> $GITHUB_ENV |
109 | 91 | echo "ACR_NAME=$ACR_NAME" >> $GITHUB_ENV |
110 | 92 | echo "ACR_ENDPOINT=$ACR_ENDPOINT" >> $GITHUB_ENV |
111 | 93 | |
112 | | - echo "### Deployment Complete ✅" >> $GITHUB_STEP_SUMMARY |
| 94 | + echo "### Provisioning Complete ✅" >> $GITHUB_STEP_SUMMARY |
113 | 95 | echo "" >> $GITHUB_STEP_SUMMARY |
114 | 96 | echo "**Resource Group:** $RESOURCE_GROUP" >> $GITHUB_STEP_SUMMARY |
115 | 97 | echo "**AKS Cluster:** $AKS_CLUSTER_NAME" >> $GITHUB_STEP_SUMMARY |
|
0 commit comments