diff --git a/.github/workflows/actions.lock b/.github/workflows/actions.lock index 14f0fa7..ec15225 100644 --- a/.github/workflows/actions.lock +++ b/.github/workflows/actions.lock @@ -37,7 +37,7 @@ workflows: - 'actions/deploy-pages@v4.0.5' - 'actions/upload-pages-artifact@v3.0.1' '.github/workflows/push-email-notify.yml': - - 'dawidd6/action-send-mail@v3.12.0' + - 'hyperpolymath/smtp-notify-action@v0.2.0' '.github/workflows/workflow-linter.yml': - 'actions/checkout@v4.1.1' dependencies: @@ -106,11 +106,6 @@ dependencies: repo_id: 496012378 uses: - 'actions/upload-artifact@v4' - 'dawidd6/action-send-mail@v3.12.0': - ref: 'v3.12.0' - commit: 'sha1-6e502825a508b867ab2954ad6343b68787624c01' - owner_id: 9713907 - repo_id: 222439721 'dependabot/fetch-metadata@v2.2.0': ref: 'v2.2.0' commit: 'sha1-dbb049abf0d677abbd7f7eee0375145b417fdd34' @@ -126,6 +121,11 @@ dependencies: commit: 'sha1-884713a6c30a92e5e8544c39945cd7cb630abcd1' owner_id: 1342004 repo_id: 400046858 + 'hyperpolymath/smtp-notify-action@v0.2.0': + ref: 'v0.2.0' + commit: 'sha1-ede1191ef6ff3ac02c4f4d9efdf837ee517e11d7' + owner_id: 6759885 + repo_id: 1352485172 'peter-evans/repository-dispatch@v4.0.1': ref: 'v4.0.1' commit: 'sha1-28959ce8df70de7be546dd1250a005dd32156697' diff --git a/.github/workflows/push-email-notify.yml b/.github/workflows/push-email-notify.yml index b69c87f..9e133d7 100644 --- a/.github/workflows/push-email-notify.yml +++ b/.github/workflows/push-email-notify.yml @@ -4,9 +4,32 @@ # PUSH_EMAIL_ENABLED=true (the single on/off switch). Addresses are pre-filled; # sending needs the org SMTP secrets (SMTP_HOST/PORT/USER/PASS). Inherited by # new repos from the template; placed on existing repos by the farm sweep. +# +# Re-landed after the 2026-07-20 notification-storm freeze (removed in +# 09f94c5), now on hyperpolymath/smtp-notify-action: Node-free, the SMTP +# session is Idris2-specified and machine-checked, the binary is Zig-built, +# byte-reproducible, and SHA-256-pinned inside the action itself. name: Push email notification on: - push: {} + push: + # Branch pushes only: tag and deletion payloads mislabel Branch:/head_commit. + branches: ['**'] +concurrency: + # Deliberately per-RUN, so no run is ever queued behind another and none is + # ever cancelled. Do NOT "tidy" this into a shared group such as + # ${{ github.workflow }}-${{ github.ref }}. GitHub's workflow-syntax docs: + # "By default, any existing pending job or workflow in the same concurrency + # group will be canceled and the new queued job or workflow will take its + # place." That happens regardless of cancel-in-progress, which governs only + # the RUNNING job. On this workflow it silently loses a notification email, + # with no error anywhere. Every run here reports a DISTINCT commit, so there + # is no redundant work for a concurrency limit to remove. + # The docs also offer `queue: max` (up to 100 pending); not used, because 100 + # is still a cap whereas a per-run group needs none. + # Verified with zizmor 1.30.0: deleting this block raises concurrency-limits; + # this form silences it exactly as a shared group would. + group: push-email-${{ github.run_id }} + cancel-in-progress: false permissions: contents: read jobs: @@ -14,9 +37,10 @@ jobs: name: Email on push if: ${{ vars.PUSH_EMAIL_ENABLED == 'true' }} runs-on: ubuntu-latest + timeout-minutes: 5 steps: - name: Send push notification email - uses: dawidd6/action-send-mail@v3.12.0 + uses: hyperpolymath/smtp-notify-action@v0.2.0 # NOSONAR — pin authority is actions.lock (sha1-ede1191ef6ff3ac02c4f4d9efdf837ee517e11d7) with: server_address: ${{ secrets.SMTP_HOST }} server_port: ${{ secrets.SMTP_PORT }}