CI/CD Guide
Post release notes on deploy, sync a content calendar from git, or announce merged PRs, all from GitHub Actions or any CI/CD system.
Quick start
Get an API key, store it as a secret, add the action to your workflow. That's it.
Go to Settings and create an API key. It starts with ap_.
In your repo, go to Settings > Secrets and variables > Actions and add a secret named AP_API_KEY.
One step. One post. Runs in ~10 seconds.
- uses: agendapanda/post-action@v1
with:
api-key: ${{ secrets.AP_API_KEY }}
content: 'We just shipped v2.0!'Workflow examples
Real workflow files you can drop into your repo. Each one is a complete, working example.
Schedule a social announcement for every GitHub release.
name: Post on release
on:
release:
types: [published]
jobs:
post:
runs-on: ubuntu-latest
steps:
- uses: agendapanda/post-action@v1
with:
api-key: ${{ secrets.AP_API_KEY }}
content: |
${{ github.event.release.name }} is out!
${{ github.event.release.html_url }}Share shipped features as they land on main.
name: Post on merge
on:
pull_request:
types: [closed]
branches: [main]
jobs:
post:
if: github.event.pull_request.merged
runs-on: ubuntu-latest
steps:
- uses: agendapanda/post-action@v1
with:
api-key: ${{ secrets.AP_API_KEY }}
content: |
Shipped: ${{ github.event.pull_request.title }}
${{ github.event.pull_request.html_url }}Keep a calendar.json in git. Every push syncs it to your workspace: creates, updates, and deletes posts to match the file.
name: Sync calendar
on:
push:
branches: [main]
paths:
- 'calendar.json'
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: agendapanda/post-action@v1
with:
api-key: ${{ secrets.AP_API_KEY }}
calendar-file: './calendar.json'Calendar as code
Store your content calendar as a JSON file in your repo. Review changes in Pull Requests, maintain full git history, and sync to your workspace on merge.
[
{
"external_id": "launch-post",
"content": "We just launched v2.0! Check it out.",
"connection": "x",
"schedule": "2026-03-15T14:00:00Z"
},
{
"external_id": "follow-up",
"content": "Here's what's new in v2.0 and why it matters.",
"connection": "linkedin",
"schedule": "2026-03-16T10:00:00Z",
"media": "https://example.com/og-image.png"
}
]The external_id field links each JSON entry to a post. Run sync twice, get the same result. Safe to retry in CI.
Use ap calendar sync --file calendar.json --dry-run to preview what will be created, updated, or deleted before applying.
| Field | Required | Description |
|---|---|---|
| external_id | Yes | Stable identifier for matching across syncs |
| content | Yes | Post text content |
| connection | Yes | Connection ID or platform name |
| schedule | Yes | UTC ISO 8601 with Z suffix |
| media | No | URL or local file path for image/video |
Without GitHub Actions
GitLab CI, CircleCI, Jenkins, Buildkite. Anything that runs a shell. Install the CLI, set your API key, post.
# Install
curl -fsSL https://agendapanda.com/install.sh | bash
# Post immediately
AP_API_KEY=$AP_API_KEY ap post "Deployed v2.1.0 to production" --now
# Or sync a calendar file
AP_API_KEY=$AP_API_KEY ap calendar sync --file calendar.json --jsonAP_API_KEYAPI key (starts with ap_). Required for all CI/CD usage.required
AP_PROJECTProject (workspace) ID. Auto-selects if you only have one.
AP_CONNECTIONDefault connection ID or platform name. Auto-selects if you only have one.
AP_API_URLCustom API endpoint. Defaults to agendapanda.com.
All commands emit structured JSON when piped or with --json. Parse with jq or your language's JSON library.
Exit 0 on success, non-zero on failure. Your pipeline fails correctly if a post fails to publish.
Action reference
Two modes: single post (set content) or calendar sync (set calendar-file). Cannot use both.
| Input | Required | Description |
|---|---|---|
| api-key | Yes | Agenda Panda API key. Store as a repository secret. |
| content | No | Post content text. Required for single-post mode. |
| media | No | Path to a media file (image or video) to attach. |
| connection | No | Connection ID or platform name (e.g. x, linkedin). Auto-selects if you only have one. |
| schedule | No | ISO 8601 UTC datetime (e.g. 2026-03-01T14:00:00Z). Omit to post immediately. |
| calendar-file | No | Path to a calendar JSON file. Required for calendar sync mode. |
| project | No | Project (workspace) ID. Auto-selects if you only have one. |
| Output | Description |
|---|---|
| post-id | ID of the created post (single-post mode only) |
| result | Full JSON output from the CLI command |
Just ask your AI agent to orchestrate the pipeline for you. Done.