name: 'Process Deployment File' description: | Processes a Docker Compose or Stack deployment file by substituting placeholders with values from GitHub Action inputs, environment variables, and secrets. inputs: compose_file: description: 'The deployment file to process (e.g., docker-compose.yml, prod.compose.yml)' required: true stack_name: description: 'Stack name to substitute in deployment file' required: true org_name: description: 'Organization name to substitute in deployment file' required: true repo_name: description: 'Repository name to substitute in deployment file' required: true git_sha: description: 'Git short SHA to substitute in deployment file' required: true outputs: processed_file: description: 'Path to the processed deployment file' value: ${{ steps.process.outputs.processed_file }} runs: using: 'composite' steps: - id: process shell: bash run: | set -euo pipefail INPUT_FILE="${{ inputs.compose_file }}" OUTPUT_FILE="${INPUT_FILE%.*}.processed.${INPUT_FILE##*.}" echo "DEBUG: Processing deployment file: $INPUT_FILE" if [ ! -f "$INPUT_FILE" ]; then echo "ERROR: Input file '$INPUT_FILE' does not exist." exit 1 fi cp "$INPUT_FILE" "$OUTPUT_FILE" # Substitute variables from .env file if it exists if [ -f ".env" ]; then echo "DEBUG: Found .env file. Substituting variables from .env." while IFS='=' read -r VAR_NAME VAR_VALUE || [ -n "$VAR_NAME" ]; do [[ "$VAR_NAME" =~ ^#.*$ || -z "$VAR_NAME" ]] && continue VAR_VALUE=${VAR_VALUE//\"/} echo "DEBUG: Replacing \${$VAR_NAME} with value from .env" sed -i "s|\${$VAR_NAME}|$VAR_VALUE|g" "$OUTPUT_FILE" done < .env else echo "DEBUG: No .env file found. Skipping .env substitutions." fi # Substitute GitHub Actions inputs declare -A substitutions=( ["STACK_NAME"]="${{ inputs.stack_name }}" ["REPO_ORG"]="${{ inputs.org_name }}" ["REPO_NAME"]="${{ inputs.repo_name }}" ["GIT_SHA"]="${{ inputs.git_sha }}" ) for VAR in "${!substitutions[@]}"; do VALUE="${substitutions[$VAR]}" echo "DEBUG: Replacing \${$VAR} with GitHub Action input value '$VALUE'" sed -i "s|\${$VAR}|$VALUE|g" "$OUTPUT_FILE" done # Substitute environment variables and secrets available in GitHub Actions environment echo "DEBUG: Substituting environment variables and secrets from GitHub Actions environment." env | while IFS='=' read -r ENV_VAR ENV_VAL; do if grep -q "\${$ENV_VAR}" "$OUTPUT_FILE"; then echo "DEBUG: Replacing \${$ENV_VAR} with environment variable value." sed -i "s|\${$ENV_VAR}|$ENV_VAL|g" "$OUTPUT_FILE" fi done echo "DEBUG: Final processed deployment file content:" cat "$OUTPUT_FILE" echo "processed_file=$OUTPUT_FILE" >> $GITHUB_OUTPUT