Files
sunfloweracres-campaigns/README.md
T
will 35cfd63945
Sync campaigns / sync (push) Successful in 19s
Bump eec-campaigns pin to v0.1.6
Sent/running campaigns are now skipped (not rejected) during sync, so a
finished campaign like 2026-07-23-iron-rose-proof-approved no longer has
to be deleted just to keep sync green.
2026-08-13 13:25:20 -04:00

2.9 KiB

sunfloweracres-campaigns

sunfloweracressoaps.com's campaign content, synced to listmonk by eec-campaigns. This repo holds only campaign content and this domain's listmonk secrets — the tool itself is installed at a pinned version in CI.

To send a campaign

  1. Write campaigns/<slug>/campaign.md (frontmatter + Markdown body — see the eec-campaigns README for the full field reference). Set from_email: "Sunflower Acres <hello@sunfloweracressoaps.com>" explicitly — there's no default, and sync rejects a campaign with no from_email at all. Mailcow's Sender ACL must allow that exact address for the send to go through rather than bounce as spoofing (see Sending as hello@sunfloweracressoaps.com below).
  2. git push to master — CI syncs it into listmonk as a draft and emails a preview to CAMPAIGNS_PREVIEW_EMAIL (or the campaign's own preview_emails).
  3. Check the preview inbox. Keep pushing edits until it looks right — each push re-syncs and re-previews.
  4. When ready to actually send: git tag send/<slug> && git push origin send/<slug>. This is the one action that transitions the campaign from draft to running — a plain git push to master can never do it.

Alternatively, run the Send campaign workflow manually from Gitea Actions with the slug as input — same effect as the tag push.

Other workflows

  • Test-send campaign (manual) — re-preview a campaign's current content to any address, without touching its status.
  • Sync default campaign template (manual) — pushes email-templates/campaign.html into listmonk as the default campaign template. Run once after setup, and again whenever that file changes.

Setup

Repo secrets (Gitea Actions → Secrets) are already set: CAMPAIGNS_LISTMONK_BASE_URL, CAMPAIGNS_LISTMONK_API_USER, CAMPAIGNS_LISTMONK_API_TOKEN, CAMPAIGNS_PREVIEW_EMAIL (hello@sunfloweracressoaps.com, also a confirmed subscriber on sunfloweracres-list so test-sends have somewhere to go) — scoped to a dedicated campaigns-sunfloweracres listmonk API user (see reground-infrastructure's campaigns-sunfloweracres Ansible role).

The workflows in .gitea/workflows/ pin a specific eec-campaigns version (currently v0.1.6). Bump that pin deliberately when a new tool version is ready, not automatically.

Sending as hello@sunfloweracressoaps.com

Listmonk sends everything — every domain's campaigns — authenticated as one shared identity, hello@reground.org. For a campaign here to actually go out From: hello@sunfloweracressoaps.com instead of bouncing as a spoofing attempt, Mailcow's Sender ACL on hello@reground.org has to explicitly allow it — this is set automatically by reground-infrastructure's mailcow role (it derives the full Sender ACL from mailcow_mailboxes, so any co-hosted client's hello@ mailbox is covered without a manual step).