Skip to content

Commit 08eace9

Browse files
Add validation step for Inputs and Map Inputs to env
1 parent bc1a333 commit 08eace9

5 files changed

Lines changed: 823 additions & 66 deletions

File tree

.github/workflows/job-cleanup-deployment.yml

Lines changed: 144 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,131 @@ jobs:
5353
IMAGE_TAG: ${{ inputs.IMAGE_TAG }}
5454

5555
steps:
56+
- name: Validate Workflow Input Parameters
57+
shell: bash
58+
env:
59+
INPUT_TRIGGER_TYPE: ${{ inputs.trigger_type }}
60+
INPUT_RUNNER_OS: ${{ inputs.runner_os }}
61+
INPUT_CLEANUP_RESOURCES: ${{ inputs.cleanup_resources }}
62+
INPUT_EXISTING_WEBAPP_URL: ${{ inputs.existing_webapp_url }}
63+
INPUT_RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }}
64+
INPUT_AZURE_LOCATION: ${{ inputs.AZURE_LOCATION }}
65+
INPUT_AZURE_ENV_OPENAI_LOCATION: ${{ inputs.AZURE_ENV_OPENAI_LOCATION }}
66+
INPUT_ENV_NAME: ${{ inputs.ENV_NAME }}
67+
INPUT_IMAGE_TAG: ${{ inputs.IMAGE_TAG }}
68+
run: |
69+
echo "🔍 Validating workflow input parameters..."
70+
VALIDATION_FAILED=false
71+
72+
# Validate trigger_type (required - alphanumeric with underscores)
73+
if [[ -z "$INPUT_TRIGGER_TYPE" ]]; then
74+
echo "❌ ERROR: trigger_type is required but was not provided"
75+
VALIDATION_FAILED=true
76+
elif [[ ! "$INPUT_TRIGGER_TYPE" =~ ^[a-zA-Z0-9_]+$ ]]; then
77+
echo "❌ ERROR: trigger_type '$INPUT_TRIGGER_TYPE' is invalid. Must contain only alphanumeric characters and underscores"
78+
VALIDATION_FAILED=true
79+
else
80+
echo "✅ trigger_type: '$INPUT_TRIGGER_TYPE' is valid"
81+
fi
82+
83+
# Validate runner_os (required - must be specific values)
84+
ALLOWED_RUNNER_OS=("ubuntu-latest" "windows-latest")
85+
if [[ -z "$INPUT_RUNNER_OS" ]]; then
86+
echo "❌ ERROR: runner_os is required but was not provided"
87+
VALIDATION_FAILED=true
88+
elif [[ ! " ${ALLOWED_RUNNER_OS[@]} " =~ " ${INPUT_RUNNER_OS} " ]]; then
89+
echo "❌ ERROR: runner_os '$INPUT_RUNNER_OS' is invalid. Allowed values: ${ALLOWED_RUNNER_OS[*]}"
90+
VALIDATION_FAILED=true
91+
else
92+
echo "✅ runner_os: '$INPUT_RUNNER_OS' is valid"
93+
fi
94+
95+
# Validate cleanup_resources (boolean)
96+
if [[ "$INPUT_CLEANUP_RESOURCES" != "true" && "$INPUT_CLEANUP_RESOURCES" != "false" ]]; then
97+
echo "❌ ERROR: cleanup_resources must be 'true' or 'false', got: '$INPUT_CLEANUP_RESOURCES'"
98+
VALIDATION_FAILED=true
99+
else
100+
echo "✅ cleanup_resources: '$INPUT_CLEANUP_RESOURCES' is valid"
101+
fi
102+
103+
# Validate existing_webapp_url (must start with https)
104+
if [[ -n "$INPUT_EXISTING_WEBAPP_URL" ]]; then
105+
if [[ ! "$INPUT_EXISTING_WEBAPP_URL" =~ ^https:// ]]; then
106+
echo "❌ ERROR: existing_webapp_url must start with 'https://', got: '$INPUT_EXISTING_WEBAPP_URL'"
107+
VALIDATION_FAILED=true
108+
else
109+
echo "✅ existing_webapp_url: '$INPUT_EXISTING_WEBAPP_URL' is valid"
110+
fi
111+
fi
112+
113+
# Validate RESOURCE_GROUP_NAME (required, Azure resource group naming convention)
114+
if [[ -z "$INPUT_RESOURCE_GROUP_NAME" ]]; then
115+
echo "❌ ERROR: RESOURCE_GROUP_NAME is required but was not provided"
116+
VALIDATION_FAILED=true
117+
elif [[ ! "$INPUT_RESOURCE_GROUP_NAME" =~ ^[a-zA-Z0-9._\(\)-]+$ ]] || [[ "$INPUT_RESOURCE_GROUP_NAME" =~ \.$ ]]; then
118+
echo "❌ ERROR: RESOURCE_GROUP_NAME '$INPUT_RESOURCE_GROUP_NAME' is invalid. Must contain only alphanumerics, periods, underscores, hyphens, and parentheses. Cannot end with period."
119+
VALIDATION_FAILED=true
120+
elif [[ ${#INPUT_RESOURCE_GROUP_NAME} -gt 90 ]]; then
121+
echo "❌ ERROR: RESOURCE_GROUP_NAME '$INPUT_RESOURCE_GROUP_NAME' exceeds 90 characters"
122+
VALIDATION_FAILED=true
123+
else
124+
echo "✅ RESOURCE_GROUP_NAME: '$INPUT_RESOURCE_GROUP_NAME' is valid"
125+
fi
126+
127+
# Validate AZURE_LOCATION (required, Azure region format)
128+
if [[ -z "$INPUT_AZURE_LOCATION" ]]; then
129+
echo "❌ ERROR: AZURE_LOCATION is required but was not provided"
130+
VALIDATION_FAILED=true
131+
elif [[ ! "$INPUT_AZURE_LOCATION" =~ ^[a-z0-9]+$ ]]; then
132+
echo "❌ ERROR: AZURE_LOCATION '$INPUT_AZURE_LOCATION' is invalid. Must contain only lowercase letters and numbers (e.g., 'australiaeast', 'westus2')"
133+
VALIDATION_FAILED=true
134+
else
135+
echo "✅ AZURE_LOCATION: '$INPUT_AZURE_LOCATION' is valid"
136+
fi
137+
138+
# Validate AZURE_ENV_OPENAI_LOCATION (required, Azure region format)
139+
if [[ -z "$INPUT_AZURE_ENV_OPENAI_LOCATION" ]]; then
140+
echo "❌ ERROR: AZURE_ENV_OPENAI_LOCATION is required but was not provided"
141+
VALIDATION_FAILED=true
142+
elif [[ ! "$INPUT_AZURE_ENV_OPENAI_LOCATION" =~ ^[a-z0-9]+$ ]]; then
143+
echo "❌ ERROR: AZURE_ENV_OPENAI_LOCATION '$INPUT_AZURE_ENV_OPENAI_LOCATION' is invalid. Must contain only lowercase letters and numbers (e.g., 'australiaeast', 'westus2')"
144+
VALIDATION_FAILED=true
145+
else
146+
echo "✅ AZURE_ENV_OPENAI_LOCATION: '$INPUT_AZURE_ENV_OPENAI_LOCATION' is valid"
147+
fi
148+
149+
# Validate ENV_NAME (required)
150+
if [[ -z "$INPUT_ENV_NAME" ]]; then
151+
echo "❌ ERROR: ENV_NAME is required but was not provided"
152+
VALIDATION_FAILED=true
153+
else
154+
echo "✅ ENV_NAME: '$INPUT_ENV_NAME' is valid"
155+
fi
156+
157+
# Validate IMAGE_TAG (required, Docker tag pattern)
158+
if [[ -z "$INPUT_IMAGE_TAG" ]]; then
159+
echo "❌ ERROR: IMAGE_TAG is required but was not provided"
160+
VALIDATION_FAILED=true
161+
elif [[ ! "$INPUT_IMAGE_TAG" =~ ^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}$ ]]; then
162+
echo "❌ ERROR: IMAGE_TAG '$INPUT_IMAGE_TAG' is invalid. Must:"
163+
echo " - Start with alphanumeric or underscore"
164+
echo " - Contain only alphanumerics, underscores, periods, hyphens"
165+
echo " - Be max 128 characters"
166+
VALIDATION_FAILED=true
167+
else
168+
echo "✅ IMAGE_TAG: '$INPUT_IMAGE_TAG' is valid"
169+
fi
170+
171+
# Fail workflow if any validation failed
172+
if [[ "$VALIDATION_FAILED" == "true" ]]; then
173+
echo ""
174+
echo "❌ Parameter validation failed. Please correct the errors above and try again."
175+
exit 1
176+
fi
177+
178+
echo ""
179+
echo "✅ All input parameters validated successfully!"
180+
56181
- name: Checkout Code
57182
uses: actions/checkout@v4
58183

@@ -77,6 +202,10 @@ jobs:
77202
78203
- name: Select Environment
79204
shell: bash
205+
env:
206+
RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }}
207+
AZURE_LOCATION: ${{ inputs.AZURE_LOCATION }}
208+
AZURE_ENV_OPENAI_LOCATION: ${{ inputs.AZURE_ENV_OPENAI_LOCATION }}
80209
run: |
81210
set -e
82211
# Try to select the environment if it exists, otherwise create a minimal environment for cleanup
@@ -87,10 +216,10 @@ jobs:
87216
else
88217
echo "Environment ${{ env.ENV_NAME }} not found, creating minimal environment for cleanup..."
89218
azd env new ${{ env.ENV_NAME }} --no-prompt
90-
azd env set AZURE_RESOURCE_GROUP "${{ inputs.RESOURCE_GROUP_NAME }}"
219+
azd env set AZURE_RESOURCE_GROUP "${RESOURCE_GROUP_NAME}"
91220
azd env set AZURE_SUBSCRIPTION_ID "${{ secrets.AZURE_SUBSCRIPTION_ID }}"
92-
azd env set AZURE_LOCATION="${{ inputs.AZURE_LOCATION }}"
93-
azd env set AZURE_AI_DEPLOYMENT_TYPE="${{ inputs.AZURE_ENV_OPENAI_LOCATION }}"
221+
azd env set AZURE_LOCATION="${AZURE_LOCATION}"
222+
azd env set AZURE_AI_DEPLOYMENT_TYPE="${AZURE_ENV_OPENAI_LOCATION}"
94223
fi
95224
96225
- name: Delete deployment using azd
@@ -113,22 +242,29 @@ jobs:
113242
- name: Generate Cleanup Job Summary
114243
if: always()
115244
shell: bash
245+
env:
246+
RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }}
247+
DELETE_RG_OUTCOME: ${{ steps.delete_rg.outcome }}
116248
run: |
117249
echo "## 🧹 Cleanup Job Summary" >> $GITHUB_STEP_SUMMARY
118250
echo "" >> $GITHUB_STEP_SUMMARY
119251
echo "| Field | Value |" >> $GITHUB_STEP_SUMMARY
120252
echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
121-
echo "| **Resource Group deletion Status** | ${{ steps.delete_rg.outcome == 'success' && '✅ Success' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
122-
echo "| **Resource Group** | \`${{ inputs.RESOURCE_GROUP_NAME }}\` |" >> $GITHUB_STEP_SUMMARY
253+
if [[ "${DELETE_RG_OUTCOME}" == "success" ]]; then
254+
echo "| **Resource Group deletion Status** | ✅ Success |" >> $GITHUB_STEP_SUMMARY
255+
else
256+
echo "| **Resource Group deletion Status** | ❌ Failed |" >> $GITHUB_STEP_SUMMARY
257+
fi
258+
echo "| **Resource Group** | \`${RESOURCE_GROUP_NAME}\` |" >> $GITHUB_STEP_SUMMARY
123259
echo "" >> $GITHUB_STEP_SUMMARY
124-
if [[ "${{ steps.delete_rg.outcome }}" == "success" ]]; then
260+
if [[ "${DELETE_RG_OUTCOME}" == "success" ]]; then
125261
echo "### ✅ Cleanup Details" >> $GITHUB_STEP_SUMMARY
126-
echo "- Successfully initiated deletion for Resource Group \`${{ inputs.RESOURCE_GROUP_NAME }}\`" >> $GITHUB_STEP_SUMMARY
262+
echo "- Successfully initiated deletion for Resource Group \`${RESOURCE_GROUP_NAME}\`" >> $GITHUB_STEP_SUMMARY
127263
echo "" >> $GITHUB_STEP_SUMMARY
128264
else
129265
echo "### ❌ Cleanup Failed" >> $GITHUB_STEP_SUMMARY
130266
echo "- Cleanup process encountered an error" >> $GITHUB_STEP_SUMMARY
131267
echo "- Manual cleanup may be required for:" >> $GITHUB_STEP_SUMMARY
132-
echo " - Resource Group: \`${{ env.RESOURCE_GROUP_NAME }}\`" >> $GITHUB_STEP_SUMMARY
268+
echo " - Resource Group: \`${RESOURCE_GROUP_NAME}\`" >> $GITHUB_STEP_SUMMARY
133269
echo "- Check the cleanup-deployment job logs for detailed error information" >> $GITHUB_STEP_SUMMARY
134270
fi

0 commit comments

Comments
 (0)