Skip to content

Commit 08615de

Browse files
ci: fixed Pipeline failures
1 parent f67b269 commit 08615de

6 files changed

Lines changed: 390 additions & 47 deletions

File tree

.github/workflows/deploy-linux.yml

Lines changed: 178 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,19 +96,187 @@ permissions:
9696
contents: read
9797
actions: read
9898
jobs:
99+
validate-inputs:
100+
runs-on: ubuntu-latest
101+
outputs:
102+
validation_passed: ${{ steps.validate.outputs.passed }}
103+
azure_location: ${{ steps.validate.outputs.azure_location }}
104+
resource_group_name: ${{ steps.validate.outputs.resource_group_name }}
105+
waf_enabled: ${{ steps.validate.outputs.waf_enabled }}
106+
exp: ${{ steps.validate.outputs.exp }}
107+
build_docker_image: ${{ steps.validate.outputs.build_docker_image }}
108+
cleanup_resources: ${{ steps.validate.outputs.cleanup_resources }}
109+
run_e2e_tests: ${{ steps.validate.outputs.run_e2e_tests }}
110+
azure_env_log_analytics_workspace_id: ${{ steps.validate.outputs.azure_env_log_analytics_workspace_id }}
111+
azure_existing_ai_project_resource_id: ${{ steps.validate.outputs.azure_existing_ai_project_resource_id }}
112+
existing_webapp_url: ${{ steps.validate.outputs.existing_webapp_url }}
113+
steps:
114+
- name: Validate Workflow Input Parameters
115+
id: validate
116+
shell: bash
117+
env:
118+
INPUT_AZURE_LOCATION: ${{ github.event.inputs.azure_location }}
119+
INPUT_RESOURCE_GROUP_NAME: ${{ github.event.inputs.resource_group_name }}
120+
INPUT_WAF_ENABLED: ${{ github.event.inputs.waf_enabled }}
121+
INPUT_EXP: ${{ github.event.inputs.EXP }}
122+
INPUT_BUILD_DOCKER_IMAGE: ${{ github.event.inputs.build_docker_image }}
123+
INPUT_CLEANUP_RESOURCES: ${{ github.event.inputs.cleanup_resources }}
124+
INPUT_RUN_E2E_TESTS: ${{ github.event.inputs.run_e2e_tests }}
125+
INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: ${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}
126+
INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: ${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}
127+
INPUT_EXISTING_WEBAPP_URL: ${{ github.event.inputs.existing_webapp_url }}
128+
run: |
129+
echo "🔍 Validating workflow input parameters..."
130+
VALIDATION_FAILED=false
131+
132+
# Validate azure_location (Azure region format)
133+
LOCATION="${INPUT_AZURE_LOCATION:-australiaeast}"
134+
135+
if [[ ! "$LOCATION" =~ ^[a-z0-9]+$ ]]; then
136+
echo "❌ ERROR: azure_location '$LOCATION' is invalid. Must contain only lowercase letters and numbers"
137+
VALIDATION_FAILED=true
138+
else
139+
echo "✅ azure_location: '$LOCATION' is valid"
140+
fi
141+
142+
# Validate resource_group_name (Azure naming convention, optional)
143+
if [[ -n "$INPUT_RESOURCE_GROUP_NAME" ]]; then
144+
if [[ ! "$INPUT_RESOURCE_GROUP_NAME" =~ ^[a-zA-Z0-9._\(\)-]+$ ]] || [[ "$INPUT_RESOURCE_GROUP_NAME" =~ \.$ ]]; then
145+
echo "❌ ERROR: resource_group_name '$INPUT_RESOURCE_GROUP_NAME' is invalid. Must contain only alphanumerics, periods, underscores, hyphens, and parentheses. Cannot end with period."
146+
VALIDATION_FAILED=true
147+
elif [[ ${#INPUT_RESOURCE_GROUP_NAME} -gt 90 ]]; then
148+
echo "❌ ERROR: resource_group_name '$INPUT_RESOURCE_GROUP_NAME' exceeds 90 characters (length: ${#INPUT_RESOURCE_GROUP_NAME})"
149+
VALIDATION_FAILED=true
150+
else
151+
echo "✅ resource_group_name: '$INPUT_RESOURCE_GROUP_NAME' is valid"
152+
fi
153+
else
154+
echo "✅ resource_group_name: Not provided (will be auto-generated)"
155+
fi
156+
157+
# Validate waf_enabled (boolean)
158+
WAF_ENABLED="${INPUT_WAF_ENABLED:-false}"
159+
if [[ "$WAF_ENABLED" != "true" && "$WAF_ENABLED" != "false" ]]; then
160+
echo "❌ ERROR: waf_enabled must be 'true' or 'false', got: '$WAF_ENABLED'"
161+
VALIDATION_FAILED=true
162+
else
163+
echo "✅ waf_enabled: '$WAF_ENABLED' is valid"
164+
fi
165+
166+
# Validate EXP (boolean)
167+
EXP_ENABLED="${INPUT_EXP:-false}"
168+
if [[ "$EXP_ENABLED" != "true" && "$EXP_ENABLED" != "false" ]]; then
169+
echo "❌ ERROR: EXP must be 'true' or 'false', got: '$EXP_ENABLED'"
170+
VALIDATION_FAILED=true
171+
else
172+
echo "✅ EXP: '$EXP_ENABLED' is valid"
173+
fi
174+
175+
# Validate build_docker_image (boolean)
176+
BUILD_DOCKER="${INPUT_BUILD_DOCKER_IMAGE:-false}"
177+
if [[ "$BUILD_DOCKER" != "true" && "$BUILD_DOCKER" != "false" ]]; then
178+
echo "❌ ERROR: build_docker_image must be 'true' or 'false', got: '$BUILD_DOCKER'"
179+
VALIDATION_FAILED=true
180+
else
181+
echo "✅ build_docker_image: '$BUILD_DOCKER' is valid"
182+
fi
183+
184+
# Validate cleanup_resources (boolean)
185+
CLEANUP_RESOURCES="${INPUT_CLEANUP_RESOURCES:-false}"
186+
if [[ "$CLEANUP_RESOURCES" != "true" && "$CLEANUP_RESOURCES" != "false" ]]; then
187+
echo "❌ ERROR: cleanup_resources must be 'true' or 'false', got: '$CLEANUP_RESOURCES'"
188+
VALIDATION_FAILED=true
189+
else
190+
echo "✅ cleanup_resources: '$CLEANUP_RESOURCES' is valid"
191+
fi
192+
193+
# Validate run_e2e_tests (specific allowed values)
194+
TEST_OPTION="${INPUT_RUN_E2E_TESTS:-GoldenPath-Testing}"
195+
if [[ "$TEST_OPTION" != "GoldenPath-Testing" && "$TEST_OPTION" != "Smoke-Testing" && "$TEST_OPTION" != "None" ]]; then
196+
echo "❌ ERROR: run_e2e_tests must be one of: GoldenPath-Testing, Smoke-Testing, None, got: '$TEST_OPTION'"
197+
VALIDATION_FAILED=true
198+
else
199+
echo "✅ run_e2e_tests: '$TEST_OPTION' is valid"
200+
fi
201+
202+
# Validate AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID (optional, Azure Resource ID format)
203+
if [[ -n "$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID" ]]; then
204+
if [[ ! "$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID" =~ ^/subscriptions/[a-fA-F0-9-]+/[Rr]esource[Gg]roups/[^/]+/providers/[Mm]icrosoft\.[Oo]perational[Ii]nsights/[Ww]orkspaces/[^/]+$ ]]; then
205+
echo "❌ ERROR: AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID is invalid. Must be a valid Azure Resource ID format:"
206+
echo " /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}"
207+
echo " Got: '$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID'"
208+
VALIDATION_FAILED=true
209+
else
210+
echo "✅ AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: Valid Resource ID format"
211+
fi
212+
else
213+
echo "✅ AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: Not provided (optional)"
214+
fi
215+
216+
# Validate AZURE_EXISTING_AI_PROJECT_RESOURCE_ID (optional, Azure Resource ID format)
217+
if [[ -n "$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" ]]; then
218+
if [[ ! "$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" =~ ^/subscriptions/[a-fA-F0-9-]+/[Rr]esource[Gg]roups/[^/]+/providers/([Mm]icrosoft\.[Mm]achine[Ll]earning[Ss]ervices/([Ww]orkspaces|[Pp]rojects)/[^/]+|[Mm]icrosoft\.[Cc]ognitive[Ss]ervices/[Aa]ccounts/[^/]+/[Pp]rojects/[^/]+)$ ]]; then
219+
echo "❌ ERROR: AZURE_EXISTING_AI_PROJECT_RESOURCE_ID is invalid. Must be a valid Azure Resource ID format:"
220+
echo " /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/projects/{projectName}"
221+
echo " Got: '$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID'"
222+
VALIDATION_FAILED=true
223+
else
224+
echo "✅ AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: Valid Resource ID format"
225+
fi
226+
else
227+
echo "✅ AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: Not provided (optional)"
228+
fi
229+
230+
# Validate existing_webapp_url (optional, must start with https)
231+
if [[ -n "$INPUT_EXISTING_WEBAPP_URL" ]]; then
232+
if [[ ! "$INPUT_EXISTING_WEBAPP_URL" =~ ^https:// ]]; then
233+
echo "❌ ERROR: existing_webapp_url must start with 'https://', got: '$INPUT_EXISTING_WEBAPP_URL'"
234+
VALIDATION_FAILED=true
235+
else
236+
echo "✅ existing_webapp_url: '$INPUT_EXISTING_WEBAPP_URL' is valid"
237+
fi
238+
else
239+
echo "✅ existing_webapp_url: Not provided (will perform deployment)"
240+
fi
241+
242+
# Fail workflow if any validation failed
243+
if [[ "$VALIDATION_FAILED" == "true" ]]; then
244+
echo ""
245+
echo "❌ Parameter validation failed. Please correct the errors above and try again."
246+
exit 1
247+
fi
248+
249+
echo ""
250+
echo "✅ All input parameters validated successfully!"
251+
252+
# Output validated values
253+
echo "passed=true" >> $GITHUB_OUTPUT
254+
echo "azure_location=$LOCATION" >> $GITHUB_OUTPUT
255+
echo "resource_group_name=$INPUT_RESOURCE_GROUP_NAME" >> $GITHUB_OUTPUT
256+
echo "waf_enabled=$WAF_ENABLED" >> $GITHUB_OUTPUT
257+
echo "exp=$EXP_ENABLED" >> $GITHUB_OUTPUT
258+
echo "build_docker_image=$BUILD_DOCKER" >> $GITHUB_OUTPUT
259+
echo "cleanup_resources=$CLEANUP_RESOURCES" >> $GITHUB_OUTPUT
260+
echo "run_e2e_tests=$TEST_OPTION" >> $GITHUB_OUTPUT
261+
echo "azure_env_log_analytics_workspace_id=$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID" >> $GITHUB_OUTPUT
262+
echo "azure_existing_ai_project_resource_id=$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" >> $GITHUB_OUTPUT
263+
echo "existing_webapp_url=$INPUT_EXISTING_WEBAPP_URL" >> $GITHUB_OUTPUT
264+
99265
Run:
266+
needs: validate-inputs
267+
if: needs.validate-inputs.outputs.validation_passed == 'true'
100268
uses: ./.github/workflows/deploy-orchestrator.yml
101269
with:
102270
runner_os: ubuntu-latest
103-
azure_location: ${{ github.event.inputs.azure_location || 'australiaeast' }}
104-
resource_group_name: ${{ github.event.inputs.resource_group_name || '' }}
105-
waf_enabled: ${{ github.event.inputs.waf_enabled == 'true' }}
106-
EXP: ${{ github.event.inputs.EXP == 'true' }}
107-
build_docker_image: ${{ github.event.inputs.build_docker_image == 'true' }}
108-
cleanup_resources: ${{ github.event.inputs.cleanup_resources == 'true' }}
109-
run_e2e_tests: ${{ github.event.inputs.run_e2e_tests || 'GoldenPath-Testing' }}
110-
AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: ${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID || '' }}
111-
AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: ${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID || '' }}
112-
existing_webapp_url: ${{ github.event.inputs.existing_webapp_url || '' }}
271+
azure_location: ${{ needs.validate-inputs.outputs.azure_location || 'australiaeast' }}
272+
resource_group_name: ${{ needs.validate-inputs.outputs.resource_group_name || '' }}
273+
waf_enabled: ${{ needs.validate-inputs.outputs.waf_enabled == 'true' }}
274+
EXP: ${{ needs.validate-inputs.outputs.exp == 'true' }}
275+
build_docker_image: ${{ needs.validate-inputs.outputs.build_docker_image == 'true' }}
276+
cleanup_resources: ${{ needs.validate-inputs.outputs.cleanup_resources == 'true' }}
277+
run_e2e_tests: ${{ needs.validate-inputs.outputs.run_e2e_tests || 'GoldenPath-Testing' }}
278+
AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: ${{ needs.validate-inputs.outputs.azure_env_log_analytics_workspace_id || '' }}
279+
AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: ${{ needs.validate-inputs.outputs.azure_existing_ai_project_resource_id || '' }}
280+
existing_webapp_url: ${{ needs.validate-inputs.outputs.existing_webapp_url || '' }}
113281
trigger_type: ${{ github.event_name }}
114282
secrets: inherit

0 commit comments

Comments
 (0)