lucid.page Publish release notes from CI with the lucid.page GitHub Action
Text size
Read time2 min

# Publish release notes from CI with the lucid.page GitHub Action

If your release process currently ends with someone pasting Markdown into a chat window, this is the upgrade. The lucid.page GitHub Action publishes a Markdown file as a typeset page and gives you back the URL, right in the workflow. No account required, though you’ll probably want one.

Contents

# The thirty second version

yaml
- uses: bitgate/lucid-page-action@v1
  id: publish
  with:
    file: CHANGELOG.md
- run: echo "Live at ${{ steps.publish.outputs.url }}"

That’s a complete setup. One file in, one typeset page out, URL in the step outputs and in a neat table in the job summary.

# A real workflow: publish on every tag

yaml
name: release-notes
on:
  push:
    tags: ["v*"]

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: bitgate/lucid-page-action@v1
        id: notes
        with:
          file: RELEASE_NOTES.md
          title: "Release ${{ github.ref_name }}"
          visibility: public
          api-key: ${{ secrets.LUCID_API_KEY }}
      - run: echo "${{ steps.notes.outputs.url }}"

Tag a release, get a public page. The URL lands in the step summary where whoever cuts releases will actually see it.

# All the inputs

Input Default What it does
file (required) Path to the Markdown file
title from the Markdown Override the page title
visibility unlisted unlisted, public, or private (private needs a key)
ttl no expiry Lifetime in seconds, minimum 60
slug Update an existing page you own instead of creating a new one
api-key Your lp_ key, or set LUCID_API_KEY as an env var once

Outputs are url and slug.

# The trick worth knowing: a living page

Pass slug and the action updates that page in place instead of creating a new one every run:

yaml
- uses: bitgate/lucid-page-action@v1
  with:
    file: docs/status.md
    slug: our-service-status
    api-key: ${{ secrets.LUCID_API_KEY }}

Same URL forever, fresh content every deploy, and every update is stored as a revision you can roll back to. Good for status pages, “latest benchmarks”, living roadmaps, anything people bookmark.

# Anonymous vs keyed

Anonymous works fine for occasional release notes: no secrets to manage, 10 publishes a minute per IP, pages up to 1 MB. The catch is that anonymous pages are unowned, so nothing can update or delete them later (the action prints a claim link you can open once, while signed in, to adopt a page).

With a key you get 120 publishes a minute, private pages, and update-in-place. Mint one in the dashboard under Settings, stash it as LUCID_API_KEY in your repo secrets, done. The key question in more detail: lucid.page API keys: when you need one and when you don’t.

# Worth knowing

End