What the job writes
Changelog
Keep-a-Changelog headings when CHANGELOG.md has Features / Fixes. Otherwise a polished list from the git log.
Customer email
Subject plus a body you can paste into your ESP. Same facts as the tag. No invented features.
Social posts
Short posts plus a longer note. Pain hooks only when a bullet mapped to a known pain.
GitHub Release + chat
A Release body for the draft, and a Discord/Slack paste for #releases. Same scope as the tag.
Install in one commit
Lead with the Marketplace Action. Save as .github/workflows/shipnote-pack.yml:
name: ShipNote pack
on:
push:
tags:
- "v*"
- "[0-9]*"
jobs:
pack:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: shipnotepack/action@v1
- Copy that workflow (button above) or add ShipNote pack from GitHub Marketplace.
- Commit it on the default branch. Public repo: github.com/shipnotepack/action.
- Push a tag that matches
v*or starts with a number (v1.8.0,1.8.0). - Open the Actions run. The job summary is the pack. The job also opens a draft GitHub Release if that tag has none — edit it, then publish.
uses:.
What it reads
Same packer as the website (pack-core.js).
uses: shipnotepack/action@v1 runs the copies vendored in the Action repo — the job does not download them.
The copy-paste workflow curls those files from shipnotepack.com at job time.
- CHANGELOG.md first — also
changelog.md,CHANGELOG.txt,History.md,HISTORY.md,NEWS.md,CHANGES.md,RELEASES.md. Latest version section only. Features / Fixes headings stay in the changelog and GitHub channels. - Else git log since the previous tag (
git describe). Chore and merge noise is dropped. - If this is the first tag, the last 40 commits.
After the run you also get a shipnotepack.com/?gh= link. Open it to change tone or copy panels in the browser.
The compare or CHANGELOG blob URL is public-only on the website; the job summary already has the pack either way.
What the job summary looks like
From a CHANGELOG section with one feature and two fixes, the summary is the five channels in one place. Shortened:
# ShipNote pack for AcmeBoard v1.8.0 Built on your runner from CHANGELOG since v1.7.0. ShipNote did not see this log. ## Changelog ## v1.8.0 - Faster exports, Clearer billing ### Features - CSV export streams so big workspaces do not time out ### Fixes - Invoice email subjects now show the correct plan name - Fixed a crash when renaming a project mid-sync ## Customer email Subject: AcmeBoard v1.8.0 — 1 feature, 2 fixes … ## GitHub Release body ## What's new AcmeBoard v1.8.0 — 1 feature, 2 fixes. ### Features - CSV export streams so big workspaces do not time out …
Copy from the summary into the changelog file, the ESP, social, and chat. Or publish the draft Release the job already opened.
Website pack vs Action pack
| Website | Action | |
|---|---|---|
| When | You paste once, now | Every matching tag, unattended |
| Input | Bullets, git log, public GitHub URL | CHANGELOG.md in the repo, else git log |
| Private repos | Paste a git log | Works; the runner already has the checkout |
| GitHub Release | Copy, then Open releases/new | Opens a draft Release for the tag |
| Who sees the log | Your browser, plus public GitHub fetch if you Load a public URL | Your GitHub runner only |
Privacy and permissions
uses: shipnotepack/action@v1does not download JS at runtime. The packer is vendored in the Action. No POST of your log.- The copy-paste workflow curls
pack-core.js,commit-dump.js, andpack-cli.jsfrom shipnotepack.com. It does not POST your log anywhere. contents: writeis only sogh release create --draftcan run withGITHUB_TOKEN.- On the Marketplace Action, set input
create_draft_release: "false"to write the job summary and skip the draft Release. On the copy-paste file, setSHIPNOTE_CREATE_DRAFT_RELEASE: "false". - If that tag already has a Release, the job leaves those notes alone.
Troubleshooting
The workflow did not run
Tags must match v* or [0-9]*. release-candidate will not fire it. The file has to be on the default branch before you push the tag, or the tag commit must include it.
The pack is chore soup
Put a CHANGELOG.md at the repo root with a latest version section. The Action prefers that file over the git log. On the website, paste the CHANGELOG URL instead.
It did not open a draft Release
A Release for that tag already exists, or draft-release is off. The job summary still has the GitHub-channel body to paste.
I want a different product name
Pass product on uses: shipnotepack/action@v1. The copy-paste workflow uses the repo name. Either way you can open the ?gh= link from the summary and change Product name, then Generate & copy.
The copy-paste workflow (no third-party Action)
Save as .github/workflows/shipnote-pack.yml. The live file at /github-action.yml is the source of truth for this path — copy from there so comments and the packer stay in sync.