Files
eec-campaigns/.gitea/workflows/send.yml
T
will b16d2b6c5f Initial implementation of the eec-campaigns tool
Drives listmonk's real Campaign API from git-authored Markdown+frontmatter,
so broadcast/segment emails get listmonk's mature unsubscribe/bulk-send/
attachment handling instead of reimplementing it. sync only ever creates or
updates a draft (idempotent, diff-based, refuses to touch a non-draft
campaign); a pushed send/<slug> tag or manual workflow run is the only way
to actually trigger a send. Includes list-name resolution, segment_query
materialization into managed lists, content-hash-deduped attachment
uploads, and an automatic post-sync preview email.
2026-07-10 07:30:45 -04:00

46 lines
1.5 KiB
YAML

name: Send campaign
on:
# Pushing a tag like send/big-announcement is the primary trigger — a
# deliberate, git-native, auditable action (git log --tags shows every
# real send that ever happened). These are "command tags," not release
# tags: fine to delete and re-push if a send needs retrying, since the
# actual safety net is listmonk's own draft/paused status check in
# `campaigns send`, not tag uniqueness.
push:
tags: ["send/*"]
# workflow_dispatch is kept alongside it for when clicking a button is
# more convenient than a local `git tag && git push`. Same command either
# way.
workflow_dispatch:
inputs:
slug:
description: "Campaign slug (campaigns/<slug>/) to send"
required: true
type: string
jobs:
send:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.23.1"
- name: Determine campaign slug
id: slug
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "value=${{ inputs.slug }}" >> "$GITHUB_OUTPUT"
else
echo "value=${GITHUB_REF#refs/tags/send/}" >> "$GITHUB_OUTPUT"
fi
- name: Send campaign
run: go run . send "${{ steps.slug.outputs.value }}"
env:
LISTMONK_BASE_URL: ${{ secrets.CAMPAIGNS_LISTMONK_BASE_URL }}
LISTMONK_API_USER: ${{ secrets.CAMPAIGNS_LISTMONK_API_USER }}
LISTMONK_API_TOKEN: ${{ secrets.CAMPAIGNS_LISTMONK_API_TOKEN }}