@@ -213,92 +213,93 @@ jobs:
213213 run : |
214214 # Generate staging.env with secrets from GitHub
215215 # This file is included in the deployment package and copied to the server
216- # All values are single-quoted to prevent shell interpretation of special characters
216+ # Values are NOT quoted - Docker env_file reads quotes as literal characters
217+ # The CodeDeploy scripts use safe_source_env() to handle special chars in values
217218 {
218219 echo "# Generated by GitHub Actions"
219220 echo "# Commit: ${{ github.sha }}"
220221 echo ""
221222 echo "# ECR Images (pre-built in CI)"
222- echo "ECR_REGISTRY=' $ECR_REGISTRY' "
223- echo "API_IMAGE=' $API_IMAGE' "
223+ echo "ECR_REGISTRY=$ECR_REGISTRY"
224+ echo "API_IMAGE=$API_IMAGE"
224225 echo ""
225226 echo "# Environment"
226- echo "ENVIRONMENT=' staging' "
227- echo "DEBUG=' False' "
228- echo "TESTING=' false' "
227+ echo "ENVIRONMENT=staging"
228+ echo "DEBUG=False"
229+ echo "TESTING=false"
229230 echo ""
230231 echo "# Flask/API Configuration"
231- echo "SECRET_KEY=' $SECRET_KEY' "
232- echo "JWT_SECRET_KEY=' $JWT_SECRET_KEY' "
233- echo "API_ENVIRONMENT_USER=' $API_ENVIRONMENT_USER' "
234- echo "API_ENVIRONMENT_USER_PASSWORD=' $API_ENVIRONMENT_USER_PASSWORD' "
232+ echo "SECRET_KEY=$SECRET_KEY"
233+ echo "JWT_SECRET_KEY=$JWT_SECRET_KEY"
234+ echo "API_ENVIRONMENT_USER=$API_ENVIRONMENT_USER"
235+ echo "API_ENVIRONMENT_USER_PASSWORD=$API_ENVIRONMENT_USER_PASSWORD"
235236 echo ""
236237 echo "# Database Configuration"
237- echo "DATABASE_URL=' $DATABASE_URL' "
238+ echo "DATABASE_URL=$DATABASE_URL"
238239 echo ""
239240 echo "# Redis Configuration (uses stack Redis service)"
240- echo "REDIS_URL=' redis://redis:6379/0' "
241+ echo "REDIS_URL=redis://redis:6379/0"
241242 echo ""
242243 echo "# Rate Limiting"
243- echo "RATE_LIMITING_ENABLED=' $RATE_LIMITING_ENABLED' "
244- echo "RATE_LIMIT_STORAGE_URI=' redis://redis:6379/1' "
245- echo "DEFAULT_LIMITS=' $RATE_LIMIT_DEFAULT_LIMITS' "
246- echo "API_LIMITS=' $RATE_LIMIT_API_LIMITS' "
247- echo "AUTH_LIMITS=' $RATE_LIMIT_AUTH_LIMITS' "
248- echo "PASSWORD_RESET_LIMITS=' $RATE_LIMIT_PASSWORD_RESET_LIMITS' "
249- echo "USER_CREATION_LIMITS=' $RATE_LIMIT_USER_CREATION_LIMITS' "
250- echo "EXECUTION_RUN_LIMITS=' $RATE_LIMIT_EXECUTION_RUN_LIMITS' "
251- echo "TRUSTED_PROXY_COUNT=' $RATE_LIMIT_TRUSTED_PROXY_COUNT' "
252- echo "INTERNAL_NETWORKS=' $RATE_LIMIT_INTERNAL_NETWORKS' "
244+ echo "RATE_LIMITING_ENABLED=$RATE_LIMITING_ENABLED"
245+ echo "RATE_LIMIT_STORAGE_URI=redis://redis:6379/1"
246+ echo "DEFAULT_LIMITS=$RATE_LIMIT_DEFAULT_LIMITS"
247+ echo "API_LIMITS=$RATE_LIMIT_API_LIMITS"
248+ echo "AUTH_LIMITS=$RATE_LIMIT_AUTH_LIMITS"
249+ echo "PASSWORD_RESET_LIMITS=$RATE_LIMIT_PASSWORD_RESET_LIMITS"
250+ echo "USER_CREATION_LIMITS=$RATE_LIMIT_USER_CREATION_LIMITS"
251+ echo "EXECUTION_RUN_LIMITS=$RATE_LIMIT_EXECUTION_RUN_LIMITS"
252+ echo "TRUSTED_PROXY_COUNT=$RATE_LIMIT_TRUSTED_PROXY_COUNT"
253+ echo "INTERNAL_NETWORKS=$RATE_LIMIT_INTERNAL_NETWORKS"
253254 echo ""
254255 echo "# Google Earth Engine"
255- echo "EE_SERVICE_ACCOUNT_JSON=' $EE_SERVICE_ACCOUNT_JSON' "
256- echo "GOOGLE_PROJECT_ID=' $GOOGLE_PROJECT_ID' "
257- echo "GEE_ENDPOINT=' $GEE_ENDPOINT' "
258- echo "GOOGLE_OAUTH_CLIENT_ID=' $GOOGLE_OAUTH_CLIENT_ID' "
259- echo "GOOGLE_OAUTH_CLIENT_SECRET=' $GOOGLE_OAUTH_CLIENT_SECRET' "
260- echo "GOOGLE_OAUTH_REDIRECT_URI=' $GOOGLE_OAUTH_REDIRECT_URI' "
256+ echo "EE_SERVICE_ACCOUNT_JSON=$EE_SERVICE_ACCOUNT_JSON"
257+ echo "GOOGLE_PROJECT_ID=$GOOGLE_PROJECT_ID"
258+ echo "GEE_ENDPOINT=$GEE_ENDPOINT"
259+ echo "GOOGLE_OAUTH_CLIENT_ID=$GOOGLE_OAUTH_CLIENT_ID"
260+ echo "GOOGLE_OAUTH_CLIENT_SECRET=$GOOGLE_OAUTH_CLIENT_SECRET"
261+ echo "GOOGLE_OAUTH_REDIRECT_URI=$GOOGLE_OAUTH_REDIRECT_URI"
261262 echo ""
262263 echo "# Rollbar Error Tracking"
263- echo "ROLLBAR_SCRIPT_TOKEN=' $ROLLBAR_SCRIPT_TOKEN' "
264- echo "ROLLBAR_SERVER_TOKEN=' $ROLLBAR_SERVER_TOKEN' "
264+ echo "ROLLBAR_SCRIPT_TOKEN=$ROLLBAR_SCRIPT_TOKEN"
265+ echo "ROLLBAR_SERVER_TOKEN=$ROLLBAR_SERVER_TOKEN"
265266 echo ""
266267 echo "# API URLs"
267- echo "API_PUBLIC_URL=' $API_PUBLIC_URL' "
268- echo "API_INTERNAL_URL=' http://api:3000' "
268+ echo "API_PUBLIC_URL=$API_PUBLIC_URL"
269+ echo "API_INTERNAL_URL=http://api:3000"
269270 echo ""
270271 echo "# S3 Configuration (uses EC2 instance role for credentials)"
271- echo "SCRIPTS_S3_BUCKET=' $SCRIPTS_S3_BUCKET' "
272- echo "SCRIPTS_S3_PREFIX=' $SCRIPTS_S3_PREFIX' "
273- echo "PARAMS_S3_BUCKET=' $PARAMS_S3_BUCKET' "
274- echo "PARAMS_S3_PREFIX=' $PARAMS_S3_PREFIX' "
272+ echo "SCRIPTS_S3_BUCKET=$SCRIPTS_S3_BUCKET"
273+ echo "SCRIPTS_S3_PREFIX=$SCRIPTS_S3_PREFIX"
274+ echo "PARAMS_S3_BUCKET=$PARAMS_S3_BUCKET"
275+ echo "PARAMS_S3_PREFIX=$PARAMS_S3_PREFIX"
275276 echo ""
276277 echo "# Docker Configuration"
277- echo "REGISTRY_URL=' $REGISTRY_URL' "
278- echo "DOCKER_SUBNET=' $DOCKER_SUBNET' "
279- echo "EXECUTION_SUBNET=' $EXECUTION_SUBNET' "
278+ echo "REGISTRY_URL=$REGISTRY_URL"
279+ echo "DOCKER_SUBNET=$DOCKER_SUBNET"
280+ echo "EXECUTION_SUBNET=$EXECUTION_SUBNET"
280281 echo ""
281282 echo "# Email Configuration (SparkPost)"
282- echo "SPARKPOST_API_KEY=' $SPARKPOST_API_KEY' "
283+ echo "SPARKPOST_API_KEY=$SPARKPOST_API_KEY"
283284 echo ""
284285 echo "# CORS Configuration"
285- echo "CORS_ORIGINS=' $CORS_ORIGINS' "
286+ echo "CORS_ORIGINS=$CORS_ORIGINS"
286287 echo ""
287288 echo "# Staging Database Setup (for migrate service)"
288289 echo "# Production database URL for copying scripts/data to staging"
289- echo "PRODUCTION_DATABASE_URL=' $PRODUCTION_DATABASE_URL' "
290+ echo "PRODUCTION_DATABASE_URL=$PRODUCTION_DATABASE_URL"
290291 echo "# Test user credentials"
291- echo "TEST_SUPERADMIN_EMAIL=' $TEST_SUPERADMIN_EMAIL' "
292- echo "TEST_SUPERADMIN_PASSWORD=' $TEST_SUPERADMIN_PASSWORD' "
293- echo "TEST_ADMIN_EMAIL=' $TEST_ADMIN_EMAIL' "
294- echo "TEST_ADMIN_PASSWORD=' $TEST_ADMIN_PASSWORD' "
295- echo "TEST_USER_EMAIL=' $TEST_USER_EMAIL' "
296- echo "TEST_USER_PASSWORD=' $TEST_USER_PASSWORD' "
292+ echo "TEST_SUPERADMIN_EMAIL=$TEST_SUPERADMIN_EMAIL"
293+ echo "TEST_SUPERADMIN_PASSWORD=$TEST_SUPERADMIN_PASSWORD"
294+ echo "TEST_ADMIN_EMAIL=$TEST_ADMIN_EMAIL"
295+ echo "TEST_ADMIN_PASSWORD=$TEST_ADMIN_PASSWORD"
296+ echo "TEST_USER_EMAIL=$TEST_USER_EMAIL"
297+ echo "TEST_USER_PASSWORD=$TEST_USER_PASSWORD"
297298 echo ""
298299 echo "# Deployment info"
299- echo "GIT_REVISION=' ${{ github.sha }}' "
300- echo "GIT_BRANCH=' ${{ github.ref_name }}' "
301- echo "DEPLOYMENT_ENVIRONMENT=' staging' "
300+ echo "GIT_REVISION=${{ github.sha }}"
301+ echo "GIT_BRANCH=${{ github.ref_name }}"
302+ echo "DEPLOYMENT_ENVIRONMENT=staging"
302303 } > staging.env
303304 echo "✅ Created staging.env with $(wc -l < staging.env) lines"
304305
0 commit comments