1+ name : Deploy to Azure
2+
3+ on :
4+ workflow_dispatch :
5+ push :
6+ # Run when commits are pushed to mainline branch
7+ branches :
8+ - main
9+ pull_request :
10+ # Run when a pull request is created targeting the mainline branch
11+ branches :
12+ - main
13+
14+ # GitHub Actions workflow to deploy to Azure using azd
15+ # To configure required secrets for connecting to Azure, simply run `azd pipeline config`
16+
17+ # Set up permissions for deploying with secretless Azure federated credentials
18+ # https://learn.microsoft.com/en-us/azure/developer/github/connect-from-azure?tabs=azure-portal%2Clinux#set-up-azure-login-with-openid-connect-authentication
19+ permissions :
20+ id-token : write
21+ contents : read
22+
23+ jobs :
24+ build :
25+ runs-on : ubuntu-latest
26+ outputs :
27+ uri : ${{ steps.output.outputs.uri }}
28+ env :
29+ AZURE_CLIENT_ID : ${{ vars.AZURE_CLIENT_ID }}
30+ AZURE_TENANT_ID : ${{ vars.AZURE_TENANT_ID }}
31+ AZURE_SUBSCRIPTION_ID : ${{ vars.AZURE_SUBSCRIPTION_ID }}
32+ AZURE_CREDENTIALS : ${{ secrets.AZURE_CREDENTIALS }}
33+ # Project-specific variables
34+ AZURE_SEARCH_SERVICE_LOCATION : ${{ vars.AZURE_SEARCH_SERVICE_LOCATION }}
35+ AZURE_SEARCH_SERVICE : ${{ vars.AZURE_SEARCH_SERVICE }}
36+ AZURE_SEARCH_INDEX : ${{ vars.AZURE_SEARCH_INDEX }}
37+ AZURE_SEARCH_SERVICE_RESOURCE_GROUP : ${{ vars.AZURE_SEARCH_SERVICE_RESOURCE_GROUP }}
38+ AZURE_SEARCH_SERVICE_SKU : ${{ vars.AZURE_SEARCH_SERVICE_SKU }}
39+ AZURE_SEARCH_SEMANTIC_SEARCH_SKU : ${{ vars.AZURE_SEARCH_SEMANTIC_SEARCH_SKU }}
40+ AZURE_STORAGE_ACCOUNT_LOCATION : ${{ vars.AZURE_STORAGE_ACCOUNT_LOCATION }}
41+ AZURE_STORAGE_ACCOUNT_RESOURCE_GROUP : ${{ vars.AZURE_STORAGE_ACCOUNT_RESOURCE_GROUP }}
42+ AZURE_STORAGE_ACCOUNT : ${{ vars.AZURE_STORAGE_ACCOUNT }}
43+ AZURE_API_SERVICE_LOCATION : ${{ vars.AZURE_API_SERVICE_LOCATION }}
44+ AZURE_API_SERVICE_RESOURCE_GROUP : ${{ vars.AZURE_API_SERVICE_RESOURCE_GROUP }}
45+ AZURE_LOG_ANALYTICS : ${{ vars.AZURE_LOG_ANALYTICS }}
46+ AZURE_APPINSIGHTS : ${{ vars.AZURE_APPINSIGHTS }}
47+ AZURE_COMPUTER_VISION_ACCOUNT : ${{ vars.AZURE_COMPUTER_VISION_ACCOUNT }}
48+ AZURE_COMPUTER_VISION_RESOURCE_GROUP : ${{ vars.AZURE_COMPUTER_VISION_RESOURCE_GROUP }}
49+ AZURE_COMPUTER_VISION_LOCATION : ${{ vars.AZURE_COMPUTER_VISION_LOCATION }}
50+ AZURE_COMPUTER_VISION_SKU_NAME : ${{ vars.AZURE_COMPUTER_VISION_SKU_NAME }}
51+ SERVICE_ACA_RESOURCE_EXISTS : ${{ vars.SERVICE_ACA_RESOURCE_EXISTS }}
52+ steps :
53+ - name : Checkout
54+ uses : actions/checkout@v5
55+
56+ - name : Install azd
57+ uses : Azure/setup-azd@v2.2.0
58+
59+ - name : Log in with Azure (Federated Credentials)
60+ run : |
61+ azd auth login `
62+ --client-id "$Env:AZURE_CLIENT_ID" `
63+ --federated-credential-provider "github" `
64+ --tenant-id "$Env:AZURE_TENANT_ID"
65+ shell : pwsh
66+
67+ # Workaround for https://github.com/Azure/azure-dev/issues/3920
68+ - name : Create azd env
69+ run : azd env new $AZURE_ENV_NAME
70+ env :
71+ AZURE_ENV_NAME : ${{ vars.AZURE_ENV_NAME }}
72+
73+ - name : Prepackage Frontend
74+ run : |
75+ azd hooks run prepackage --no-prompt
76+ env :
77+ AZURE_ENV_NAME : ${{ vars.AZURE_ENV_NAME }}
78+
79+ - name : Provision Infrastructure
80+ run : |
81+ azd provision --no-prompt
82+ env :
83+ AZURE_ENV_NAME : ${{ vars.AZURE_ENV_NAME }}
84+ AZURE_LOCATION : ${{ vars.AZURE_LOCATION }}
85+ AZURE_SUBSCRIPTION_ID : ${{ vars.AZURE_SUBSCRIPTION_ID }}
86+
87+ - name : Deploy Application
88+ run : azd deploy --no-prompt
89+ env :
90+ AZURE_ENV_NAME : ${{ vars.AZURE_ENV_NAME }}
91+ AZURE_LOCATION : ${{ vars.AZURE_LOCATION }}
92+ AZURE_SUBSCRIPTION_ID : ${{ vars.AZURE_SUBSCRIPTION_ID }}
93+
94+ - name : Output Deployment URI
95+ id : output
96+ run : |
97+ azd env get-values > .env
98+ source .env
99+ echo "uri=$SERVICE_ACA_URI" >> "$GITHUB_OUTPUT"
100+
101+
102+ smoketests :
103+ runs-on : ubuntu-latest
104+ needs : build
105+ steps :
106+
107+ - name : Checkout
108+ uses : actions/checkout@v5
109+
110+ - name : Set up Python (for Playwright test)
111+ uses : actions/setup-python@v5
112+ with :
113+ python-version : ' 3.12'
114+
115+ - name : Install Playwright (Python) and Browsers
116+ run : |
117+ pip install --no-cache-dir playwright
118+ python -m playwright install --with-deps chromium
119+
120+ - name : End-to-End UI Test (Playwright)
121+ shell : bash
122+ env :
123+ URI : ${{needs.build.outputs.uri}}
124+ run : |
125+ python scripts/smoke_test.py "$URI"
0 commit comments