Skip to content

Commit 77b46fc

Browse files
Add validation step for Inputs and Map Inputs to env
1 parent f8828ae commit 77b46fc

5 files changed

Lines changed: 992 additions & 114 deletions

File tree

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

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,152 @@ jobs:
5252
ENV_NAME: ${{ inputs.ENV_NAME }}
5353
IMAGE_TAG: ${{ inputs.IMAGE_TAG }}
5454
steps:
55+
- name: Validate Workflow Input Parameters
56+
shell: bash
57+
env:
58+
INPUT_RUNNER_OS: ${{ inputs.runner_os }}
59+
INPUT_TRIGGER_TYPE: ${{ inputs.trigger_type }}
60+
INPUT_CLEANUP_RESOURCES: ${{ inputs.cleanup_resources }}
61+
INPUT_EXISTING_WEBAPP_URL: ${{ inputs.existing_webapp_url }}
62+
INPUT_RESOURCE_GROUP_NAME: ${{ inputs.RESOURCE_GROUP_NAME }}
63+
INPUT_AZURE_LOCATION: ${{ inputs.AZURE_LOCATION }}
64+
INPUT_AZURE_ENV_OPENAI_LOCATION: ${{ inputs.AZURE_ENV_OPENAI_LOCATION }}
65+
INPUT_ENV_NAME: ${{ inputs.ENV_NAME }}
66+
INPUT_IMAGE_TAG: ${{ inputs.IMAGE_TAG }}
67+
run: |
68+
echo "🔍 Validating workflow input parameters..."
69+
VALIDATION_FAILED=false
70+
71+
# Validate runner_os (required, must be specific values)
72+
if [[ -z "$INPUT_RUNNER_OS" ]]; then
73+
echo "❌ ERROR: runner_os is required but not provided"
74+
VALIDATION_FAILED=true
75+
else
76+
ALLOWED_RUNNER_OS=("ubuntu-latest" "windows-latest")
77+
if [[ ! " ${ALLOWED_RUNNER_OS[@]} " =~ " ${INPUT_RUNNER_OS} " ]]; then
78+
echo "❌ ERROR: runner_os '$INPUT_RUNNER_OS' is invalid. Allowed values: ${ALLOWED_RUNNER_OS[*]}"
79+
VALIDATION_FAILED=true
80+
else
81+
echo "✅ runner_os: '$INPUT_RUNNER_OS' is valid"
82+
fi
83+
fi
84+
85+
# Validate trigger_type (required - alphanumeric with underscores)
86+
if [[ -z "$INPUT_TRIGGER_TYPE" ]]; then
87+
echo "❌ ERROR: trigger_type is required but was not provided"
88+
VALIDATION_FAILED=true
89+
elif [[ ! "$INPUT_TRIGGER_TYPE" =~ ^[a-zA-Z0-9_]+$ ]]; then
90+
echo "❌ ERROR: trigger_type '$INPUT_TRIGGER_TYPE' is invalid. Must contain only alphanumeric characters and underscores"
91+
VALIDATION_FAILED=true
92+
else
93+
echo "✅ trigger_type: '$INPUT_TRIGGER_TYPE' is valid"
94+
fi
95+
96+
# Validate cleanup_resources (boolean)
97+
if [[ "$INPUT_CLEANUP_RESOURCES" != "true" && "$INPUT_CLEANUP_RESOURCES" != "false" ]]; then
98+
echo "❌ ERROR: cleanup_resources must be 'true' or 'false', got: '$INPUT_CLEANUP_RESOURCES'"
99+
VALIDATION_FAILED=true
100+
else
101+
echo "✅ cleanup_resources: '$INPUT_CLEANUP_RESOURCES' is valid"
102+
fi
103+
104+
# Validate existing_webapp_url (must start with https if provided)
105+
if [[ -n "$INPUT_EXISTING_WEBAPP_URL" ]]; then
106+
if [[ ! "$INPUT_EXISTING_WEBAPP_URL" =~ ^https:// ]]; then
107+
echo "❌ ERROR: existing_webapp_url must start with 'https://', got: '$INPUT_EXISTING_WEBAPP_URL'"
108+
VALIDATION_FAILED=true
109+
else
110+
echo "✅ existing_webapp_url: '$INPUT_EXISTING_WEBAPP_URL' is valid"
111+
fi
112+
fi
113+
114+
# Validate RESOURCE_GROUP_NAME (required, Azure resource group naming convention)
115+
if [[ -z "$INPUT_RESOURCE_GROUP_NAME" ]]; then
116+
echo "❌ ERROR: RESOURCE_GROUP_NAME is required but not provided"
117+
VALIDATION_FAILED=true
118+
else
119+
if [[ ! "$INPUT_RESOURCE_GROUP_NAME" =~ ^[a-zA-Z0-9._\(\)-]+$ ]] || [[ "$INPUT_RESOURCE_GROUP_NAME" =~ \.$ ]]; then
120+
echo "❌ ERROR: RESOURCE_GROUP_NAME '$INPUT_RESOURCE_GROUP_NAME' is invalid. Must contain only alphanumerics, periods, underscores, hyphens, and parentheses. Cannot end with period."
121+
VALIDATION_FAILED=true
122+
elif [[ ${#INPUT_RESOURCE_GROUP_NAME} -gt 90 ]]; then
123+
echo "❌ ERROR: RESOURCE_GROUP_NAME '$INPUT_RESOURCE_GROUP_NAME' exceeds 90 characters"
124+
VALIDATION_FAILED=true
125+
else
126+
echo "✅ RESOURCE_GROUP_NAME: '$INPUT_RESOURCE_GROUP_NAME' is valid"
127+
fi
128+
fi
129+
130+
# Validate AZURE_LOCATION (required)
131+
if [[ -z "$INPUT_AZURE_LOCATION" ]]; then
132+
echo "❌ ERROR: AZURE_LOCATION is required but not provided"
133+
VALIDATION_FAILED=true
134+
else
135+
# Azure location should be lowercase alphanumeric (e.g., eastus, westeurope)
136+
if [[ ! "$INPUT_AZURE_LOCATION" =~ ^[a-z0-9]+$ ]]; then
137+
echo "❌ ERROR: AZURE_LOCATION '$INPUT_AZURE_LOCATION' is invalid. Should be lowercase alphanumeric (e.g., 'eastus', 'westeurope')"
138+
VALIDATION_FAILED=true
139+
else
140+
echo "✅ AZURE_LOCATION: '$INPUT_AZURE_LOCATION' is valid"
141+
fi
142+
fi
143+
144+
# Validate AZURE_ENV_OPENAI_LOCATION (required)
145+
if [[ -z "$INPUT_AZURE_ENV_OPENAI_LOCATION" ]]; then
146+
echo "❌ ERROR: AZURE_ENV_OPENAI_LOCATION is required but not provided"
147+
VALIDATION_FAILED=true
148+
else
149+
# Azure location should be lowercase alphanumeric
150+
if [[ ! "$INPUT_AZURE_ENV_OPENAI_LOCATION" =~ ^[a-z0-9]+$ ]]; then
151+
echo "❌ ERROR: AZURE_ENV_OPENAI_LOCATION '$INPUT_AZURE_ENV_OPENAI_LOCATION' is invalid. Should be lowercase alphanumeric (e.g., 'eastus', 'westeurope')"
152+
VALIDATION_FAILED=true
153+
else
154+
echo "✅ AZURE_ENV_OPENAI_LOCATION: '$INPUT_AZURE_ENV_OPENAI_LOCATION' is valid"
155+
fi
156+
fi
157+
158+
# Validate ENV_NAME (required, alphanumeric with hyphens)
159+
if [[ -z "$INPUT_ENV_NAME" ]]; then
160+
echo "❌ ERROR: ENV_NAME is required but not provided"
161+
VALIDATION_FAILED=true
162+
else
163+
if [[ ! "$INPUT_ENV_NAME" =~ ^[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]$|^[a-zA-Z0-9]$ ]]; then
164+
echo "❌ ERROR: ENV_NAME '$INPUT_ENV_NAME' is invalid. Must start and end with alphanumeric, can contain hyphens"
165+
VALIDATION_FAILED=true
166+
elif [[ ${#INPUT_ENV_NAME} -gt 64 ]]; then
167+
echo "❌ ERROR: ENV_NAME '$INPUT_ENV_NAME' exceeds 64 characters"
168+
VALIDATION_FAILED=true
169+
else
170+
echo "✅ ENV_NAME: '$INPUT_ENV_NAME' is valid"
171+
fi
172+
fi
173+
174+
# Validate IMAGE_TAG (required)
175+
if [[ -z "$INPUT_IMAGE_TAG" ]]; then
176+
echo "❌ ERROR: IMAGE_TAG is required but not provided"
177+
VALIDATION_FAILED=true
178+
else
179+
# Docker image tag validation (alphanumeric, dots, dashes, underscores, max 128 chars)
180+
if [[ ! "$INPUT_IMAGE_TAG" =~ ^[a-zA-Z0-9._-]+$ ]]; then
181+
echo "❌ ERROR: IMAGE_TAG '$INPUT_IMAGE_TAG' is invalid. Must contain only alphanumerics, dots, dashes, and underscores"
182+
VALIDATION_FAILED=true
183+
elif [[ ${#INPUT_IMAGE_TAG} -gt 128 ]]; then
184+
echo "❌ ERROR: IMAGE_TAG '$INPUT_IMAGE_TAG' exceeds 128 characters"
185+
VALIDATION_FAILED=true
186+
else
187+
echo "✅ IMAGE_TAG: '$INPUT_IMAGE_TAG' is valid"
188+
fi
189+
fi
190+
191+
# Fail workflow if any validation failed
192+
if [[ "$VALIDATION_FAILED" == "true" ]]; then
193+
echo ""
194+
echo "❌ Parameter validation failed. Please correct the errors above and try again."
195+
exit 1
196+
fi
197+
198+
echo ""
199+
echo "✅ All input parameters validated successfully!"
200+
55201
- name: Setup Azure CLI
56202
shell: bash
57203
run: |

0 commit comments

Comments
 (0)