@@ -31,173 +31,101 @@ jobs:
3131 with :
3232 creds : ${{ secrets.AZURE_CREDENTIALS }}
3333
34- - name : Check and Create Resource Group
35- id : check-rg
34+ - name : Create Resource Group if needed
3635 run : |
37- echo "Checking if Resource Group exists..."
38- RG_EXISTS=$(az group exists --name ${{ env.AZURE_RESOURCE_GROUP }})
39-
40- if [ "$RG_EXISTS" = "false" ]; then
41- echo "Resource Group does not exist. Creating..."
42- az group create \
43- --name ${{ env.AZURE_RESOURCE_GROUP }} \
44- --location eastus
45- echo "rg_created=true" >> $GITHUB_OUTPUT
46- echo "✅ Resource Group created: ${{ env.AZURE_RESOURCE_GROUP }}"
47- else
48- echo "✅ Resource Group already exists: ${{ env.AZURE_RESOURCE_GROUP }}"
49- echo "rg_created=false" >> $GITHUB_OUTPUT
36+ if ! az group exists --name ${{ env.AZURE_RESOURCE_GROUP }} --output tsv | grep -q true; then
37+ echo "Creating Resource Group..."
38+ az group create --name ${{ env.AZURE_RESOURCE_GROUP }} --location eastus
5039 fi
5140
52- - name : Check and Create Azure Container Registry
53- id : check-acr
41+ - name : Create ACR if needed
5442 run : |
55- echo "Checking if ACR exists..."
56- ACR_EXISTS=$(az acr list --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --query "[?name=='${{ env.ACR_NAME }}'].name" -o tsv)
57-
58- if [ -z "$ACR_EXISTS" ]; then
59- echo "ACR does not exist. Creating..."
43+ if ! az acr show --name ${{ env.ACR_NAME }} &> /dev/null; then
44+ echo "Creating ACR..."
6045 az acr create \
6146 --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
6247 --name ${{ env.ACR_NAME }} \
6348 --sku Basic \
6449 --admin-enabled true
65- echo "acr_created=true" >> $GITHUB_OUTPUT
66- else
67- echo "ACR already exists: ${{ env.ACR_NAME }}"
68- echo "acr_created=false" >> $GITHUB_OUTPUT
6950 fi
7051
71- - name : Get ACR Login Server
72- id : acr-login-server
73- run : |
74- ACR_LOGIN_SERVER=$(az acr show --name ${{ env.ACR_NAME }} --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --query loginServer -o tsv)
75- echo "login_server=$ACR_LOGIN_SERVER" >> $GITHUB_OUTPUT
76- echo "ACR Login Server: $ACR_LOGIN_SERVER"
77-
7852 - name : Login to Azure Container Registry
7953 run : |
80- # Get ACR token and login to Docker
81- TOKEN=$(az acr login --name ${{ env.ACR_NAME }} --expose-token --output tsv --query accessToken)
82- echo $TOKEN | docker login ${{ steps.acr-login-server.outputs.login_server }} -u 00000000-0000-0000-0000-000000000000 --password-stdin
54+ az acr login --name ${{ env.ACR_NAME }}
8355
8456 - name : Build Docker Image
8557 run : |
86- docker build -t ${{ steps.acr-login-server.outputs.login_server }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
87- -t ${{ steps.acr-login-server.outputs.login_server }}/${{ env.IMAGE_NAME }}:latest \
58+ docker build -t ${{ env.ACR_NAME }}.azurecr.io /${{ env.IMAGE_NAME }}:${{ github.sha }} \
59+ -t ${{ env.ACR_NAME }}.azurecr.io /${{ env.IMAGE_NAME }}:latest \
8860 -f python/agent-framework/sample-agent/Dockerfile \
8961 python/agent-framework/sample-agent
9062
9163 - name : Push Docker Image to ACR
9264 run : |
93- docker push ${{ steps.acr-login-server.outputs.login_server }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
94- docker push ${{ steps.acr-login-server.outputs.login_server }}/${{ env.IMAGE_NAME }}:latest
95-
96- echo "image_tag=${{ steps.acr-login-server.outputs.login_server }}/${{ env.IMAGE_NAME }}:${{ github.sha }}" >> $GITHUB_ENV
97- echo "image_latest=${{ steps.acr-login-server.outputs.login_server }}/${{ env.IMAGE_NAME }}:latest" >> $GITHUB_ENV
65+ docker push ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ github.sha }}
66+ docker push ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:latest
9867
99- - name : Check and Create Container App Environment
100- id : check-env
68+ - name : Create Container App Environment if needed
10169 run : |
102- echo "Checking if Container App Environment exists..."
103- ENV_EXISTS=$(az containerapp env list --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --query "[?name=='${{ env.CONTAINER_APP_ENV }}'].name" -o tsv)
104-
105- if [ -z "$ENV_EXISTS" ]; then
106- echo "Container App Environment does not exist. Creating..."
70+ if ! az containerapp env show --name ${{ env.CONTAINER_APP_ENV }} --resource-group ${{ env.AZURE_RESOURCE_GROUP }} &> /dev/null; then
71+ echo "Creating Container App Environment..."
10772 az containerapp env create \
10873 --name ${{ env.CONTAINER_APP_ENV }} \
10974 --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
11075 --location eastus
111- echo "env_created=true" >> $GITHUB_OUTPUT
112- else
113- echo "Container App Environment already exists: ${{ env.CONTAINER_APP_ENV }}"
114- echo "env_created=false" >> $GITHUB_OUTPUT
11576 fi
11677
117- - name : Check if Container App Exists
118- id : check-app
78+ - name : Deploy to Azure Container App
11979 run : |
120- echo "Checking if Container App exists..."
121- APP_EXISTS=$(az containerapp list --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --query "[?name=='${{ env.CONTAINER_APP_NAME }}'].name" -o tsv)
122-
123- if [ -z "$APP_EXISTS" ]; then
124- echo "app_exists=false" >> $GITHUB_OUTPUT
125- echo "Container App does not exist. Will create."
80+ if az containerapp show --name ${{ env.CONTAINER_APP_NAME }} --resource-group ${{ env.AZURE_RESOURCE_GROUP }} &> /dev/null; then
81+ echo "Updating existing Container App..."
82+ az containerapp update \
83+ --name ${{ env.CONTAINER_APP_NAME }} \
84+ --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
85+ --image ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ github.sha }} \
86+ --set-env-vars \
87+ PORT=3978 \
88+ AZURE_OPENAI_ENDPOINT=${{ secrets.AZURE_OPENAI_ENDPOINT }} \
89+ AZURE_OPENAI_DEPLOYMENT=${{ secrets.AZURE_OPENAI_DEPLOYMENT }} \
90+ AZURE_OPENAI_API_VERSION=${{ secrets.AZURE_OPENAI_API_VERSION }} \
91+ AZURE_OPENAI_API_KEY=${{ secrets.AZURE_OPENAI_API_KEY }} \
92+ USE_AGENTIC_AUTH=true \
93+ ENABLE_OBSERVABILITY=true \
94+ PYTHON_ENVIRONMENT=production
12695 else
127- echo "app_exists=true" >> $GITHUB_OUTPUT
128- echo "Container App exists. Will update."
96+ echo "Creating new Container App..."
97+ az containerapp create \
98+ --name ${{ env.CONTAINER_APP_NAME }} \
99+ --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
100+ --environment ${{ env.CONTAINER_APP_ENV }} \
101+ --image ${{ env.ACR_NAME }}.azurecr.io/${{ env.IMAGE_NAME }}:${{ github.sha }} \
102+ --registry-server ${{ env.ACR_NAME }}.azurecr.io \
103+ --target-port 3978 \
104+ --ingress external \
105+ --min-replicas 1 \
106+ --max-replicas 3 \
107+ --cpu 0.5 \
108+ --memory 1.0Gi \
109+ --env-vars \
110+ PORT=3978 \
111+ AZURE_OPENAI_ENDPOINT=${{ secrets.AZURE_OPENAI_ENDPOINT }} \
112+ AZURE_OPENAI_DEPLOYMENT=${{ secrets.AZURE_OPENAI_DEPLOYMENT }} \
113+ AZURE_OPENAI_API_VERSION=${{ secrets.AZURE_OPENAI_API_VERSION }} \
114+ AZURE_OPENAI_API_KEY=${{ secrets.AZURE_OPENAI_API_KEY }} \
115+ USE_AGENTIC_AUTH=true \
116+ ENABLE_OBSERVABILITY=true \
117+ PYTHON_ENVIRONMENT=production
129118 fi
130119
131- - name : Create Container App
132- if : steps.check-app.outputs.app_exists == 'false'
133- run : |
134- echo "Creating Container App..."
135- az containerapp create \
136- --name ${{ env.CONTAINER_APP_NAME }} \
137- --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
138- --environment ${{ env.CONTAINER_APP_ENV }} \
139- --image ${{ env.image_latest }} \
140- --target-port 3978 \
141- --ingress external \
142- --transport auto \
143- --allow-insecure true \
144- --registry-server ${{ steps.acr-login-server.outputs.login_server }} \
145- --cpu 0.5 \
146- --memory 1.0Gi \
147- --min-replicas 1 \
148- --max-replicas 3 \
149- --env-vars \
150- PORT=3978 \
151- AZURE_OPENAI_API_KEY=secretref:azure-openai-key \
152- AZURE_OPENAI_ENDPOINT=${{ secrets.AZURE_OPENAI_ENDPOINT }} \
153- AZURE_OPENAI_DEPLOYMENT=${{ secrets.AZURE_OPENAI_DEPLOYMENT }} \
154- AZURE_OPENAI_API_VERSION=${{ secrets.AZURE_OPENAI_API_VERSION }} \
155- USE_AGENTIC_AUTH=true \
156- ENABLE_OBSERVABILITY=true \
157- ENABLE_A365_OBSERVABILITY_EXPORTER=false \
158- PYTHON_ENVIRONMENT=production \
159- ENABLE_OTEL=true \
160- ENABLE_SENSITIVE_DATA=false
161-
162- # Add secrets
163- az containerapp secret set \
164- --name ${{ env.CONTAINER_APP_NAME }} \
165- --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
166- --secrets azure-openai-key=${{ secrets.AZURE_OPENAI_API_KEY }}
167-
168- - name : Update Container App
169- if : steps.check-app.outputs.app_exists == 'true'
170- run : |
171- echo "Updating Container App with new image..."
172- az containerapp update \
173- --name ${{ env.CONTAINER_APP_NAME }} \
174- --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
175- --image ${{ env.image_latest }}
176-
177120 - name : Get Container App URL
178- id : app-url
179121 run : |
180- APP_URL =$(az containerapp show \
122+ FQDN =$(az containerapp show \
181123 --name ${{ env.CONTAINER_APP_NAME }} \
182124 --resource-group ${{ env.AZURE_RESOURCE_GROUP }} \
183- --query properties.configuration.ingress.fqdn -o tsv)
184- echo "app_url=https://$APP_URL" >> $GITHUB_OUTPUT
185- echo "Container App URL: https://$APP_URL"
186-
187- - name : Display Deployment Summary
188- run : |
189- echo "✅ Deployment Complete!"
190- echo "========================"
191- echo "Resource Group: ${{ env.AZURE_RESOURCE_GROUP }}"
192- echo "Container Registry: ${{ steps.acr-login-server.outputs.login_server }}"
193- echo "Container App: ${{ env.CONTAINER_APP_NAME }}"
194- echo "App URL: ${{ steps.app-url.outputs.app_url }}"
195- echo "Health Endpoint: ${{ steps.app-url.outputs.app_url }}/api/health"
196- echo "Messages Endpoint: ${{ steps.app-url.outputs.app_url }}/api/messages"
197- echo "========================"
198-
199- - name : Azure Logout
200- if : always()
201- run : |
202- az logout
125+ --query properties.configuration.ingress.fqdn \
126+ --output tsv)
127+ echo "🚀 Container App deployed successfully!"
128+ echo "🌐 URL: https://$FQDN"
129+ echo "📍 Health: https://$FQDN/api/health"
130+ echo "📨 Messages: https://$FQDN/api/messages"
203131
0 commit comments