name: Build And Release Templates on: push: branches: - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install Podman run: | sudo apt-get update sudo apt-get install -y podman - name: Build production image run: podman build --target runtime -t ci-cd-email-templates:${{ github.sha }} . - name: Render HTML templates run: | mkdir -p build/html podman run --rm \ -e OUTPUT_DIR=/workspace/build/html \ -v "${GITHUB_WORKSPACE}/build/html:/workspace/build/html" \ ci-cd-email-templates:${{ github.sha }} - name: Upload rendered templates artifact uses: actions/upload-artifact@v4 with: name: rendered-email-templates path: build/html/*.html if-no-files-found: error release: runs-on: ubuntu-latest needs: build environment: Production permissions: contents: read steps: - name: Download rendered templates uses: actions/download-artifact@v4 with: name: rendered-email-templates path: release/html - name: Validate Cloudflare R2 configuration env: CF_R2_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }} CF_R2_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_SECRET_ACCESS_KEY }} CF_R2_ACCOUNT_ID: ${{ secrets.CF_R2_ACCOUNT_ID }} CF_R2_BUCKET: ${{ secrets.CF_R2_BUCKET }} run: | missing=() for name in CF_R2_ACCESS_KEY_ID CF_R2_SECRET_ACCESS_KEY CF_R2_ACCOUNT_ID CF_R2_BUCKET; do if [ -z "${!name}" ]; then missing+=("$name") fi done if [ "${#missing[@]}" -gt 0 ]; then printf 'Missing required GitHub Actions secrets for the Production environment: %s\n' "${missing[*]}" >&2 exit 1 fi - name: Upload templates to Cloudflare R2 env: AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: auto AWS_EC2_METADATA_DISABLED: true CF_R2_ACCOUNT_ID: ${{ secrets.CF_R2_ACCOUNT_ID }} CF_R2_BUCKET: ${{ secrets.CF_R2_BUCKET }} CF_R2_PREFIX: ${{ vars.CF_R2_PREFIX }} run: | ENDPOINT="https://${CF_R2_ACCOUNT_ID}.r2.cloudflarestorage.com" TARGET="s3://${CF_R2_BUCKET}" if [ -n "${CF_R2_PREFIX}" ]; then TARGET="${TARGET}/${CF_R2_PREFIX}" fi aws s3 sync release/html "${TARGET}" --endpoint-url "${ENDPOINT}" --delete