1- name : Deploy-Test-Cleanup (v2) Linux
1+ name : Deploy-Test-Cleanup (v2)
22on :
33 pull_request :
44 branches :
55 - main
66 paths :
7- - ' src/frontend/**'
8- - ' src/**/*.py'
9- - ' src/requirements*.txt'
10- - ' src/WebApp.Dockerfile'
11- - ' !src/tests/**'
12- - ' infra/**/*.bicep'
13- - ' infra/**/*.json'
14- - ' *.yaml'
7+ - ' content-gen/src/**'
8+ - ' !content-gen/src/tests/**'
9+ - ' content-gen/infra/**/*.bicep'
10+ - ' content-gen/infra/**/*.json'
11+ - ' content-gen/*.yaml'
12+ - ' content-gen/scripts/**'
1513 - ' .github/workflows/deploy-*.yml'
1614 workflow_run :
1715 workflows : ["Build Docker and Optional Push"]
2321 - demo
2422 workflow_dispatch :
2523 inputs :
24+ runner_os :
25+ description : ' Deployment Environment'
26+ required : false
27+ type : choice
28+ options :
29+ - ' codespace'
30+ - ' Devcontainer'
31+ - ' Local'
32+ default : ' codespace'
33+
2634 azure_location :
2735 description : ' Azure Location For Deployment'
2836 required : false
3240 - ' australiaeast'
3341 - ' centralus'
3442 - ' eastasia'
35- - ' eastus2 '
43+ - ' eastus '
3644 - ' japaneast'
3745 - ' northeurope'
3846 - ' southeastasia'
47+ - ' swedencentral'
3948 - ' uksouth'
49+ - ' westus'
50+ - ' westus3'
4051 resource_group_name :
4152 description : ' Resource Group Name (Optional)'
4253 required : false
90101 required : false
91102 default : ' '
92103 type : string
104+ image_model_choice :
105+ description : ' Image Model to Deploy'
106+ required : false
107+ default : ' gpt-image-1'
108+ type : choice
109+ options :
110+ - ' gpt-image-1'
111+ - ' gpt-image-1.5'
112+ - ' none'
93113
94114 schedule :
95- - cron : ' 0 9,21 * * *' # Runs at 9 :00 AM and 9:00 PM GMT
115+ - cron : ' 30 4 * * *' # Runs at 10 :00 AM IST (4:30 AM UTC)
96116permissions :
97117 contents : read
98118 actions : read
119+ packages : write # Required by deploy-orchestrator → job-deploy → job-deploy-devcontainer for GHCR
99120jobs :
100121 validate-inputs :
101122 runs-on : ubuntu-latest
102123 outputs :
103124 validation_passed : ${{ steps.validate.outputs.passed }}
125+ runner_os : ${{ steps.validate.outputs.runner_os }}
104126 azure_location : ${{ steps.validate.outputs.azure_location }}
105127 resource_group_name : ${{ steps.validate.outputs.resource_group_name }}
106128 waf_enabled : ${{ steps.validate.outputs.waf_enabled }}
@@ -111,11 +133,13 @@ jobs:
111133 azure_env_log_analytics_workspace_id : ${{ steps.validate.outputs.azure_env_log_analytics_workspace_id }}
112134 azure_existing_ai_project_resource_id : ${{ steps.validate.outputs.azure_existing_ai_project_resource_id }}
113135 existing_webapp_url : ${{ steps.validate.outputs.existing_webapp_url }}
136+ image_model_choice : ${{ steps.validate.outputs.image_model_choice }}
114137 steps :
115138 - name : Validate Workflow Input Parameters
116139 id : validate
117140 shell : bash
118141 env :
142+ INPUT_RUNNER_OS : ${{ github.event.inputs.runner_os }}
119143 INPUT_AZURE_LOCATION : ${{ github.event.inputs.azure_location }}
120144 INPUT_RESOURCE_GROUP_NAME : ${{ github.event.inputs.resource_group_name }}
121145 INPUT_WAF_ENABLED : ${{ github.event.inputs.waf_enabled }}
@@ -126,10 +150,30 @@ jobs:
126150 INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID : ${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}
127151 INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID : ${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}
128152 INPUT_EXISTING_WEBAPP_URL : ${{ github.event.inputs.existing_webapp_url }}
153+ INPUT_IMAGE_MODEL_CHOICE : ${{ github.event.inputs.image_model_choice }}
129154 run : |
130155 echo "🔍 Validating workflow input parameters..."
131156 VALIDATION_FAILED=false
132157
158+ # Validate runner_os (specific allowed values) and derive actual runner
159+ RUNNER_OS_INPUT="${INPUT_RUNNER_OS:-codespace}"
160+ if [[ "$RUNNER_OS_INPUT" != "codespace" && "$RUNNER_OS_INPUT" != "Devcontainer" && "$RUNNER_OS_INPUT" != "Local" ]]; then
161+ echo "❌ ERROR: runner_os must be one of: codespace, Devcontainer, Local, got: '$RUNNER_OS_INPUT'"
162+ VALIDATION_FAILED=true
163+ else
164+ echo "✅ runner_os: '$RUNNER_OS_INPUT' is valid"
165+ fi
166+
167+ # Derive actual runner from runner_os input
168+ if [[ "$RUNNER_OS_INPUT" == "codespace" ]]; then
169+ RUNNER_OS="ubuntu-latest"
170+ elif [[ "$RUNNER_OS_INPUT" == "Devcontainer" ]]; then
171+ RUNNER_OS="devcontainer"
172+ else
173+ RUNNER_OS="windows-latest"
174+ fi
175+ echo "✅ runner_os derived as: '$RUNNER_OS'"
176+
133177 # Validate azure_location (Azure region format)
134178 LOCATION="${INPUT_AZURE_LOCATION:-australiaeast}"
135179
@@ -252,6 +296,7 @@ jobs:
252296
253297 # Output validated values
254298 echo "passed=true" >> $GITHUB_OUTPUT
299+ echo "runner_os=$RUNNER_OS" >> $GITHUB_OUTPUT
255300 echo "azure_location=$LOCATION" >> $GITHUB_OUTPUT
256301 echo "resource_group_name=$INPUT_RESOURCE_GROUP_NAME" >> $GITHUB_OUTPUT
257302 echo "waf_enabled=$WAF_ENABLED" >> $GITHUB_OUTPUT
@@ -262,13 +307,23 @@ jobs:
262307 echo "azure_env_log_analytics_workspace_id=$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID" >> $GITHUB_OUTPUT
263308 echo "azure_existing_ai_project_resource_id=$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" >> $GITHUB_OUTPUT
264309 echo "existing_webapp_url=$INPUT_EXISTING_WEBAPP_URL" >> $GITHUB_OUTPUT
310+
311+ # Validate and output image_model_choice
312+ IMAGE_MODEL="${INPUT_IMAGE_MODEL_CHOICE:-gpt-image-1}"
313+ ALLOWED_MODELS=("gpt-image-1" "gpt-image-1.5" "none")
314+ if [[ ! " ${ALLOWED_MODELS[@]} " =~ " ${IMAGE_MODEL} " ]]; then
315+ echo "❌ ERROR: image_model_choice '$IMAGE_MODEL' is invalid. Allowed: ${ALLOWED_MODELS[*]}"
316+ exit 1
317+ fi
318+ echo "✅ image_model_choice: '$IMAGE_MODEL' is valid"
319+ echo "image_model_choice=$IMAGE_MODEL" >> $GITHUB_OUTPUT
265320
266321 Run :
267322 needs : validate-inputs
268323 if : needs.validate-inputs.outputs.validation_passed == 'true'
269324 uses : ./.github/workflows/deploy-orchestrator.yml
270325 with :
271- runner_os : ubuntu-latest
326+ runner_os : ${{ needs.validate-inputs.outputs.runner_os || ' ubuntu-latest' }}
272327 azure_location : ${{ needs.validate-inputs.outputs.azure_location || 'australiaeast' }}
273328 resource_group_name : ${{ needs.validate-inputs.outputs.resource_group_name || '' }}
274329 waf_enabled : ${{ needs.validate-inputs.outputs.waf_enabled == 'true' }}
@@ -280,4 +335,5 @@ jobs:
280335 AZURE_EXISTING_AI_PROJECT_RESOURCE_ID : ${{ needs.validate-inputs.outputs.azure_existing_ai_project_resource_id || '' }}
281336 existing_webapp_url : ${{ needs.validate-inputs.outputs.existing_webapp_url || '' }}
282337 trigger_type : ${{ github.event_name }}
338+ image_model_choice : ${{ needs.validate-inputs.outputs.image_model_choice || 'gpt-image-1' }}
283339 secrets : inherit
0 commit comments