Skip to content

docs: Add RSS feed for Pixi releases - #6749

Open
VeckoTheGecko wants to merge 11 commits into
prefix-dev:mainfrom
VeckoTheGecko:push-sztyytzwxyou
Open

docs: Add RSS feed for Pixi releases#6749
VeckoTheGecko wants to merge 11 commits into
prefix-dev:mainfrom
VeckoTheGecko:push-sztyytzwxyou

Conversation

@VeckoTheGecko

Copy link
Copy Markdown
Contributor

Description

Adds RSS feed for Pixi releases.

Fixes https://discord.com/channels/1082332781146800168/1082338253925003385/1533793109157216321

How Has This Been Tested?

AI Disclosure

  • This PR contains AI-generated content.
    • I have tested any AI-generated content in my PR.
    • I take responsibility for any AI-generated content in my PR.

Tools: Claude (see commit history for planning docs)

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have added sufficient tests to cover my changes.
  • I have verified that changes that would impact the JSON schema have been made in schema/model.py.

- New script scripts/generate_rss.py parses CHANGELOG.md and emits
  docs/feed.xml using feedgen (RSS 2.0)
- Dates are taken from changelog headings (### [X.Y.Z] - YYYY-MM-DD);
  invalid dates exit with an informative error
- New pixi task generate-rss wired as a depends-on for build-docs,
  docs, deploy-dev, and deploy-latest
- New pixi task test-rss runs the inlined tests
- docs/feed.xml added to .gitignore (build artifact)
- feedgen and pytest added to feature.docs dependencies
- Removing LLM generated planning files
- Consolidating tasks
- Removing inline tests from script
- Removing deps used in testing (restore pixi.lock from main, and do a fresh lock)
@VeckoTheGecko

Copy link
Copy Markdown
Contributor Author
image

This is how it looks in my RSS reader

Comment thread CHANGELOG.md Outdated
Comment on lines +8 to +11
!!! tip

This changelog has an RSS feed, so you can keep up to date with new Pixi releases. Just make sure that you're subscribed to the RSS feed on the `latest` version tag (i.e., at [https://pixi.prefix.dev/latest/CHANGELOG/](https://pixi.prefix.dev/latest/CHANGELOG/) ) so that your feed updates correctly.

@VeckoTheGecko VeckoTheGecko Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

@Hofer-Julian yeah , good point about the material flavoured markdown.

I'm happy to remove entirely, but maybe its worth promoting somewhere in docs that there's an RSS feed now (and that you have to use the /latest one?)

EDIT: Or did you mean just making it not a callout block?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be added next to the socials like mastodon and bluesky?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in aace390

image

@VeckoTheGecko VeckoTheGecko changed the title DOCS: Add RSS feed for Pixi releases docs: Add RSS feed for Pixi releases Aug 3, 2026

@Hofer-Julian Hofer-Julian left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

I added a few comments

Comment thread scripts/generate_rss.py Outdated
from datetime import date, datetime, timezone
from pathlib import Path

from feedgen.feed import FeedGenerator # ty: ignore[unresolved-import]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's make sure ty has access to that library by adding the package to a feature that is then added to the docs env and the env where ty runs

@VeckoTheGecko VeckoTheGecko Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like so?

diff --git a/pixi.toml b/pixi.toml
index 567c4c2a47..f700659449 100644
--- a/pixi.toml
+++ b/pixi.toml
@@ -153,7 +153,6 @@
 
 [feature.docs.pypi-dependencies]
 # Fork of mike with Zensical support, not released on PyPI
-feedgen = ">=0.9,<1"
 mike = { git = "https://github.com/squidfunk/mike" }
 
 [feature.docs.tasks]
@@ -173,6 +172,8 @@
 mike-serve = { cmd = "mike serve", description = "Serve versioned docs with mike" }
 prepare-docs = { cmd = "python scripts/stage_docs_files.py && python scripts/generate_redirects.py && python scripts/generate_llmstxt.py && python scripts/generate_rss.py", description = "Stage docs files, generate redirect stubs, llms.txt, and RSS feed" }
 
+[feature.docs-rss.pypi-dependencies]
+feedgen = ">=0.9,<1"
 #
 # Feature for linting and formatting tools
 #
@@ -424,7 +425,7 @@
   "lint",
   "schema",
   "backends-release-deps",
-  "docs",
+  "docs-rss",
 ], solve-group = "python" }
 # TODO: get rid of rust in the docs env, figure out what to do with the docs generation code.
 docs = { features = [
@@ -432,6 +433,7 @@
   "compilers",
   "python",
   "docs",
+  "docs-rss",
 ], solve-group = "python" }
 python-test = { features = [
   "pytest",

I think splitting the dep into a separate feature like this might run into the problem of prepare-docs failing with "module not found" if someone forgets to include the docs-rss feature in any env they want to prep the docs.

I think the simplest solution is to just add docs to the default env which is used for linting

Comment thread scripts/generate_rss.py
from feedgen.feed import FeedGenerator # ty: ignore[unresolved-import]

REPO_ROOT = Path(__file__).parent.parent
CHANGELOG = REPO_ROOT / "CHANGELOG.md"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's leave the changelog alone here

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Reverted changes in f6e2bc5

Comment thread scripts/generate_rss.py Outdated

def build_feed(entries: list[dict], *, site_url: str = SITE_URL) -> bytes:
"""Build and return RSS 2.0 XML bytes from parsed changelog entries."""
fg = FeedGenerator()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am curious if we even need a dependency here. My impression is that it is very easy to generate RSS

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, it wasn't that bad 75085e3

Comment thread CHANGELOG.md Outdated
Comment on lines +8 to +11
!!! tip

This changelog has an RSS feed, so you can keep up to date with new Pixi releases. Just make sure that you're subscribed to the RSS feed on the `latest` version tag (i.e., at [https://pixi.prefix.dev/latest/CHANGELOG/](https://pixi.prefix.dev/latest/CHANGELOG/) ) so that your feed updates correctly.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be added next to the socials like mastodon and bluesky?

Comment thread pixi.toml
generate-cli-docs = { cmd = "cargo run --locked --manifest-path crates/pixi_docs/Cargo.toml", description = "Generate CLI documentation" }
mike-serve = { cmd = "mike serve", description = "Serve versioned docs with mike" }
prepare-docs = { cmd = "python scripts/stage_docs_files.py && python scripts/generate_redirects.py && python scripts/generate_llmstxt.py", description = "Stage docs files, generate redirect stubs and llms.txt" }
prepare-docs = { cmd = "python scripts/stage_docs_files.py && python scripts/generate_redirects.py && python scripts/generate_llmstxt.py && python scripts/generate_rss.py", description = "Stage docs files, generate redirect stubs, llms.txt, and RSS feed" }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ooops, I missed that this doesn't use task dependencies. Can you please fix this?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure what you mean by this. Does prepare-docs need something to be run before it?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't worry, I will fix it in a separate PR

LLM output (Claude): The None key is valid lxml usage for setting the default namespace — the stubs are just too
  strict. The fix is to cast the dict to suppress the false positive
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