Skip to content

Commit 7e4a07c

Browse files
author
Prajwal-Microsoft
authored
Merge pull request #783 from microsoft/psl-oidc
ci: Migrated GitHub Actions authentication from client secrets to OIDC and combined Ubuntu & Windows workflows into a single pipeline
2 parents de077da + 2f92a3c commit 7e4a07c

12 files changed

Lines changed: 152 additions & 351 deletions

.github/workflows/bicep_deploy.yml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,28 @@ on:
44
branches:
55
- ckm-v2
66

7-
7+
permissions:
8+
contents: read
9+
id-token: write
10+
811
jobs:
912
deploy:
1013
runs-on: ubuntu-latest
14+
environment: production
1115
steps:
1216
- name: Checkout Code
1317
uses: actions/checkout@v6
1418

19+
- name: Login to Azure
20+
uses: azure/login@v2
21+
with:
22+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
23+
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
24+
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
25+
1526
- name: Run Quota Check
1627
id: quota-check
1728
env:
18-
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
19-
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
20-
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
2129
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
2230
GPT_MIN_CAPACITY: "30"
2331
AZURE_REGIONS: ${{ vars.AZURE_REGIONS }}
@@ -55,10 +63,6 @@ jobs:
5563
echo "Selected Region: $VALID_REGION"
5664
echo "AZURE_LOCATION=$VALID_REGION" >> $GITHUB_ENV
5765
58-
- name: Login to Azure
59-
run: |
60-
az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }}
61-
6266
- name: Install Bicep CLI
6367
run: az bicep install
6468

.github/workflows/deploy-KMGeneric.yml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ on:
1515
permissions:
1616
contents: read
1717
actions: read
18+
id-token: write
1819

1920
env:
2021
GPT_MIN_CAPACITY: 150
@@ -23,6 +24,7 @@ env:
2324
jobs:
2425
deploy:
2526
runs-on: ubuntu-latest
27+
environment: production
2628
outputs:
2729
RESOURCE_GROUP_NAME: ${{ steps.check_create_rg.outputs.RESOURCE_GROUP_NAME }}
2830
WEBAPP_URL: ${{ steps.get_output.outputs.WEBAPP_URL }}
@@ -33,14 +35,15 @@ jobs:
3335
uses: actions/checkout@v6
3436

3537
- name: Login to Azure
36-
run: |
37-
az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }}
38+
uses: azure/login@v2
39+
with:
40+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
41+
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
42+
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
43+
3844
- name: Run Quota Check
3945
id: quota-check
4046
env:
41-
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
42-
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
43-
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
4447
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
4548
GPT_MIN_CAPACITY: ${{ env.GPT_MIN_CAPACITY }}
4649
TEXT_EMBEDDING_MIN_CAPACITY: ${{ env.TEXT_EMBEDDING_MIN_CAPACITY }}
@@ -191,13 +194,17 @@ jobs:
191194
if: always() && needs.deploy.outputs.RESOURCE_GROUP_NAME != ''
192195
needs: [deploy, e2e-test]
193196
runs-on: ubuntu-latest
197+
environment: production
194198
env:
195199
RESOURCE_GROUP_NAME: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }}
196200
steps:
197201
- name: Login to Azure
198-
run: |
199-
az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }}
200-
az account set --subscription "${{ secrets.AZURE_SUBSCRIPTION_ID }}"
202+
uses: azure/login@v2
203+
with:
204+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
205+
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
206+
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
207+
201208
- name: Extract AI Services and Key Vault Names
202209
if: always()
203210
run: |
Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Deploy-Test-Cleanup (v2) Linux
1+
name: Deploy-Test-Cleanup (v2)
22
on:
33
pull_request:
44
branches:
@@ -21,6 +21,15 @@ on:
2121
- '.github/workflows/deploy-*.yml'
2222
workflow_dispatch:
2323
inputs:
24+
runner_os:
25+
description: 'Deployment Environment'
26+
required: false
27+
type: choice
28+
options:
29+
- 'codespace'
30+
- 'Local'
31+
default: 'codespace'
32+
2433
azure_location:
2534
description: 'Azure Location For Deployment'
2635
required: false
@@ -93,11 +102,11 @@ on:
93102
required: false
94103
default: ''
95104
type: string
96-
97105

98106
permissions:
99107
contents: read
100108
actions: read
109+
id-token: write
101110

102111
jobs:
103112
validate-inputs:
@@ -115,6 +124,7 @@ jobs:
115124
azure_existing_ai_project_resource_id: ${{ steps.validate.outputs.azure_existing_ai_project_resource_id }}
116125
existing_webapp_url: ${{ steps.validate.outputs.existing_webapp_url }}
117126
azure_env_use_case: ${{ steps.validate.outputs.azure_env_use_case }}
127+
runner_os: ${{ steps.validate.outputs.runner_os }}
118128

119129
steps:
120130
- name: Validate Workflow Input Parameters
@@ -132,10 +142,25 @@ jobs:
132142
INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: ${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}
133143
INPUT_EXISTING_WEBAPP_URL: ${{ github.event.inputs.existing_webapp_url }}
134144
INPUT_AZURE_ENV_USE_CASE: ${{ github.event.inputs.AZURE_ENV_USE_CASE }}
145+
INPUT_RUNNER_OS: ${{ github.event.inputs.runner_os }}
135146

136147
run: |
137148
echo "🔍 Validating workflow input parameters..."
138149
VALIDATION_FAILED=false
150+
151+
# Resolve runner_os from Deployment Environment selection
152+
DEPLOY_ENV="${INPUT_RUNNER_OS:-codespace}"
153+
if [[ "$DEPLOY_ENV" == "codespace" ]]; then
154+
RUNNER_OS="ubuntu-latest"
155+
echo "✅ Deployment Environment: 'codespace' → runner: ubuntu-latest"
156+
elif [[ "$DEPLOY_ENV" == "Local" ]]; then
157+
RUNNER_OS="windows-latest"
158+
echo "✅ Deployment Environment: 'Local' → runner: windows-latest"
159+
else
160+
echo "❌ ERROR: Deployment Environment must be 'codespace' or 'Local', got: '$DEPLOY_ENV'"
161+
VALIDATION_FAILED=true
162+
RUNNER_OS="ubuntu-latest"
163+
fi
139164
140165
# Validate azure_location (Azure region format)
141166
LOCATION="${INPUT_AZURE_LOCATION:-australiaeast}"
@@ -279,14 +304,15 @@ jobs:
279304
echo "azure_existing_ai_project_resource_id=$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" >> $GITHUB_OUTPUT
280305
echo "existing_webapp_url=$INPUT_EXISTING_WEBAPP_URL" >> $GITHUB_OUTPUT
281306
echo "azure_env_use_case=$USE_CASE" >> $GITHUB_OUTPUT
307+
echo "runner_os=$RUNNER_OS" >> $GITHUB_OUTPUT
282308
283309
284310
Run:
285311
needs: validate-inputs
286312
if: needs.validate-inputs.outputs.validation_passed == 'true'
287313
uses: ./.github/workflows/deploy-orchestrator.yml
288314
with:
289-
runner_os: ubuntu-latest
315+
runner_os: ${{ needs.validate-inputs.outputs.runner_os || 'ubuntu-latest' }}
290316
azure_location: ${{ needs.validate-inputs.outputs.azure_location || 'australiaeast' }}
291317
resource_group_name: ${{ needs.validate-inputs.outputs.resource_group_name || '' }}
292318
waf_enabled: ${{ needs.validate-inputs.outputs.waf_enabled == 'true' }}

0 commit comments

Comments
 (0)