Skip to content

Add RSS feed of releases to the public server#377

Merged
passcod merged 1 commit into
mainfrom
claude/releases-rss-feed-3allsp
Jul 20, 2026
Merged

Add RSS feed of releases to the public server#377
passcod merged 1 commit into
mainfrom
claude/releases-rss-feed-3allsp

Conversation

@passcod

@passcod passcod commented Jul 20, 2026

Copy link
Copy Markdown
Member

What

Adds an RSS 2.0 feed of releases to the public server, served at GET /versions/rss.

Each feed item corresponds to a published, ready-to-serve version — the same set the existing /versions JSON listing and homepage expose (published, not covered by a known-issue range), ordered newest first. The changelog markdown is rendered to HTML for the item body, mirroring the per-version HTML page.

Details

  • Endpoint: GET /versions/rss, mounted as a plain (non-OpenAPI) route in versions::routes() alongside the other HTML/streaming routes, gated behind the ui feature (it reuses parse_markdown). Content type application/rss+xml; charset=utf-8.
  • Feed generation: uses the rss crate (added to the workspace and to public-server as an optional dep under the ui feature) rather than hand-rolling XML.
  • Item shape: title Canopy <version>, link/guid pointing at the version's page, pubDate from created_at (RFC 2822, UTC), and the rendered changelog as the description.
  • Absolute links: derived from PUBLIC_URL when configured, otherwise reconstructed from the request's X-Forwarded-Proto and Host headers so local and test runs still emit well-formed links.
  • Discoverability: adds an <link rel="alternate" type="application/rss+xml"> autodiscovery tag to the versions homepage.

Tests

Adds two integration tests in crates/public-server/tests/it/versions.rs:

  • releases_rss_feed — asserts the content type, RSS structure, newest-first ordering, exclusion of drafts, and that changelog markdown is rendered.
  • releases_rss_feed_excludes_known_issue_versions — asserts versions covered by a known-issue range are hidden, matching /versions.

Both pass. The route is intentionally excluded from the OpenAPI spec (like the existing HTML/download routes), so no openapi.json regeneration is needed.

🤖 Generated with Claude Code


Generated by Claude Code

Serve an RSS 2.0 feed at GET /versions/rss listing published,
ready-to-serve versions (the same set as /versions), newest first,
with each changelog rendered to HTML as the item body. Absolute links
use PUBLIC_URL when configured, otherwise the request's forwarded
scheme and Host. Adds a feed autodiscovery <link> to the versions page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pmhmhs4kBJukuvJxcX9FQv
@passcod
passcod added this pull request to the merge queue Jul 20, 2026
Merged via the queue into main with commit 658fa81 Jul 20, 2026
12 of 14 checks passed
@passcod
passcod deleted the claude/releases-rss-feed-3allsp branch July 20, 2026 02:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants