Shipnoted

Docs

GitHub Action

Push a tag. The release notes write themselves, and everyone who asked for something in it is told when you publish.

Use it#

.github/workflows/release-notes.yml

name: Release notes
on:
  push:
    tags: ["v*"]
jobs:
  notes:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - uses: vamsiy78/shipnoted-release-notes@v1
        with:
          api-key: ${{ secrets.SHIPNOTED_API_KEY }}
          project: your-slug

Create the key under Install & connect → API keys with the CI preset, and save it as the repository secret SHIPNOTED_API_KEY. That is all the Action needs: it can read and write releases, nothing else.

On the tag, it collects the pull requests merged since the previous tag, sends them to Shipnoted, and a draft appears in your dashboard with the tag as its version. Pull requests that mention a request (SN-42) are linked to it.

Inputs and outputs#

api-keyRequired. A key with the releases:write scope.
projectRequired. Your project's slug.
tagThe tag being released. Default: the tag that triggered the run. It becomes the version.
previous-tagWhere the notes start. Default: the tag before this one.
publish"true" publishes at once. Default "false": a draft to review.
emailWith publish, "true" also emails confirmed subscribers.
titleA title. Default: written from the changes.
urlOnly for a custom domain. Default https://shipnoted.com.

Outputs: release-id, url (when published) and source (claude or builtin: who wrote the notes). Use them in later steps, for example to post the link to a channel.

      - id: notes
        uses: vamsiy78/shipnoted-release-notes@v1
        with: { api-key: ${{ secrets.SHIPNOTED_API_KEY }}, project: your-slug, publish: "true", email: "true" }
      - run: echo "Released ${{ steps.notes.outputs.url }}"

Draft or publish#

By default you get a draft: read it, change anything that is off, publish from the dashboard. AI-written notes can be wrong, and nothing goes to your customers until you say so. When you trust it, set publish: "true" and the release goes out, linked requests move to Shipped and their voters get one email each.

Without the Action#

It is a thin wrapper over the CLI, so any CI works:

SHIPNOTED_API_KEY=$KEY SHIPNOTED_PROJECT=your-slug npx shipnoted release draft --tag "$TAG" --publish

See CLI for the options.