Skip to content

Add monthly updates section and JSON/RSS feeds to the releases page#19845

Open
jeffmerrick wants to merge 3 commits into
masterfrom
jeffmerrick/releases-changelog-and-json-feed
Open

Add monthly updates section and JSON/RSS feeds to the releases page#19845
jeffmerrick wants to merge 3 commits into
masterfrom
jeffmerrick/releases-changelog-and-json-feed

Conversation

@jeffmerrick

@jeffmerrick jeffmerrick commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

This adds a simple accordion list of items as an option for months that don't have a large dedicated release page like May.

Pulled from the blog, #product-updates Slack channel and the GitHub releases to build the items. These all need review to make sure they make sense and nothing is missing. We'll want to wait until July to merge so we can get any features between now and the end of the month in.

In addition, to assist with https://github.com/pulumi/pulumi-service/issues/43714, I've added tier labels to the features, including on the May release. These also need review for accuracy!


Proposed changes

Restructures the /releases list page and adds machine-readable feeds:

  • Single entries manifest in content/releases/_index.md — one newest-first list where each entry is typed updates or release.
  • Update months render inline as native <details> disclosures: title + optional product-tier badge, expanding to a one-sentence description with an inline "Read more" link.
  • Release entries are pointers — their card visuals and feed items are sourced from the detail page's section cards, so there's nothing to hand-sync.
  • Curated feeds driven entirely by the manifest: /releases/index.json and /releases/rss.xml.
  • Product-tier badges on both the updates list and the May release cards.
  • Populates the first updates month (June 2026) with eight curated items.

Related: https://github.com/pulumi/pulumi-service/issues/43714

Restructure the releases list page around a single newest-first `entries`
manifest in content/releases/_index.md, where each entry is typed `updates`
or `release`. Update months render inline as native <details> disclosures
(title + optional tier badge, expanding to a one-sentence description and an
inline Read more link); release entries are pointers whose card visuals and
feed items are sourced from the detail page's section cards. Add curated
JSON (/releases/index.json) and RSS (/releases/rss.xml) feeds, plus per-item
product-tier badges on the updates list and the May release cards.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@pulumi-bot

pulumi-bot commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

@pulumi-bot

pulumi-bot commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Lighthouse Performance Report

Commit: d6a2835 | Metric definitions

Page Device Score FCP LCP TBT CLS SI
Homepage Mobile 🔴 37 5.9s 13.4s 866ms 0.001 8.2s
Homepage Desktop 🟡 83 0.7s 1.0s 255ms 0.037 2.6s
Install Pulumi Mobile 🟡 58 5.3s 8.6s 128ms 0.029 7.3s
Install Pulumi Desktop 🟡 89 1.2s 1.8s 0ms 0.014 1.2s
AWS Get Started Mobile 🟡 62 5.0s 8.5s 64ms 0.066 5.0s
AWS Get Started Desktop 🟡 78 1.1s 2.5s 0ms 0.023 2.6s

@jeffmerrick jeffmerrick requested a review from cnunciato June 24, 2026 17:59
@jeffmerrick jeffmerrick marked this pull request as ready for review June 24, 2026 17:59
@github-actions github-actions Bot added review:triaging Claude Triage is currently classifying the PR domain:website PR touches marketing, pricing, legal, or competitive landing pages domain:mixed PR touches more than one domain domain:infra PR touches workflows, scripts, infra, Makefile, or build config review:in-progress Claude review is currently running and removed review:triaging Claude Triage is currently classifying the PR labels Jun 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Pre-merge Review — Last updated 2026-06-24T18:02:48Z

Tip

Summary: This PR adds a "monthly updates" section and machine-readable JSON/RSS feeds to the releases page (/releases/). It's a website/infra change: a new newest-first entries manifest in content/releases/_index.md, three new Hugo templates (updates.html, list.json, rss.xml), and a tier badge parameter threaded through the release card partials. For a reader, the wrongness that would matter most is a mislabeled product tier on an update item, or a feature blurb that promises something the linked docs don't cover. The verification step checked the external claims (blog/doc target URLs, CLI release notes, and the product-tier labels), a frontmatter sweep ran on the body and meta_desc, and a Hugo preflight ran (the full build is gated to the deploy job). Two items diverge from public sources and are flagged below; two other contradictions turned out to be verifier false positives.

Review confidence:

Dimension Level Notes
mechanics MEDIUM Hugo build gated to the deploy job; the new JSON/RSS output rendering and the outputs:/config wiring weren't built in review.
facts MEDIUM Two claims diverge from public sources (a feature blurb vs the linked GitHub-app docs, and a Team tier badge vs the pricing page); confirm both before merge.
Investigation log
  • Cross-sibling reads: not run (not in a templated section)
  • External claim verification: 12 of 26 claims verified (0 unverifiable, 4 contradicted) · 4 specialists (numerical, cross-reference, capability, framing); 0 cross-specialist corroborations · routed: 0 inline, 12 Pass 1, 0 Pass 2, 14 Pass 3 (verified 2, contradicted 3, unverifiable 9).
  • Cited-claim spot-checks: not run (no cited claims)
  • Frontmatter sweep: ran on body + meta_desc
  • Temporal-trigger sweep: ran (recency words present in diff; spot-check in-review)
  • Code execution: not run (no static/programs/ change)
  • Code-examples checks: not run (no fenced code blocks in content files)
  • Editorial-balance pass: not run (not under content/blog/)
🚨 Outstanding ⚠️ Low-confidence 💡 Pre-existing ✅ Resolved
2 0 0 0

🔍 Verification trail

26 claims extracted · 12 verified · 0 unverifiable · 4 contradicted
  • L8 in content/releases/_index.md "The Pulumi releases section outputs HTML, JSON, and RSS feeds." (also L11) → ✅ verified (evidence: The front matter of content/releases/_index.md explicitly declares outputs: [HTML, JSON, RSS] with comments confirming JSON → /releases/index.json and RSS → /releases/rss.xml.; source: repo:content/releases/_index.md)
  • L22-23 in content/releases/_index.md "The releases list page, JSON feed (/releases/index.json), and RSS feed (/releases/rss.xml) all render from the entries array, sorted by date descending (newest…" → ✅ verified (evidence: The _index.md file itself contains the comment: "The list page, JSON (/releases/index.json), and RSS (/releases/rss.xml) all render from this array, sorted by date descending (newest month first)." Both layout files (`layouts/releases/…; source: content/releases/_index.md (lines 22-23); layouts/releases/list.json; layouts/releases/rss.xml)
  • L27 in content/releases/_index.md "date: 2026-06-24" → ➖ not-a-claim (evidence: The value "date: 2026-06-24" is a front-matter metadata field (a date stamp on the document itself), not a falsifiable factual assertion about the external world. It is a faithful description of the PR author's own content/pipeline metadat…; source: repo:content/releases/_index.md L27)
  • L29 in content/releases/_index.md "Neo code reviews is a feature that reviews each pull request as an agent — reading the code, the preview plan, and the resulting infrastructure diff together —…" (also L32) → ✅ verified (evidence: The file at content/releases/_index.md contains the entry: "Neo reviews each pull request as an agent — reading the code, the preview plan, and the resulting infrastructure diff together — and posts inline findings on the affected lines.…; source: repo:content/releases/_index.md)
  • L31 in content/releases/_index.md "url: /blog/neo-code-reviews/" → ✅ verified (evidence: Multiple Pulumi blog pages list "Neo code reviews: AI code review built for infrastructure" in their navigation sidebar, confirming the blog post at /blog/neo-code-reviews/ exists and is live on pulumi.com.; source: WebSearch ran query "pulumi blog neo-code-reviews"; multiple pulumi.com blog pages (e.g. https://www.pulumi.com/blog/pulumi-agent-skills/) show the post in their navigation as "Neo code reviews: AI code review built for infrastructure")
  • L33-35 in content/releases/_index.md "Pulumi Cloud supports a private registry for Terraform and OpenTofu modules that can be published with existing tooling and browsed in the console." → ✅ verified (evidence: The file at content/releases/_index.md contains the entry: "Publish your existing Terraform and OpenTofu modules to the Pulumi Cloud private registry with the tooling you already use, and browse them in the console — a drop-in migration pa…; source: repo:content/releases/_index.md)
  • L36 in content/releases/_index.md "The Pulumi docs offer a light, dark, and system theme toggle." (also L38) → ✅ verified (evidence: The file at content/releases/_index.md contains the entry: "😎 The Pulumi docs now offer a light, dark, and system theme toggle." under the title "Dark mode for the docs" in the June 2026 Updates section.; source: repo:content/releases/_index.md)
  • L39-40 in content/releases/_index.md "Self-hosted GitHub Enterprise Server operations now run as the individual user who triggered them, so pull requests, commits, and Neo's writes are attributed t…" (also L42) → ❌ contradicted (framing: shifted — the source describes "comments" being attributed to the user, not "Neo's writes"; the claim substitutes a fabricated term ("Neo's writes") for the do…; evidence: The official Pulumi docs state: "Pull requests, commits, and comments are attributed to the user, operations are limited to the repositories that user can access." There is no mention of "Neo's writes" anywhere in the documentation; this p…; source: https://www.pulumi.com/docs/integrations/version-control/github-app/; intuition: "Neo's writes" is a nonsensical phrase with no grounding in Pulumi docs or GitHub Enterprise terminology — likely an LL…)
  • L41 in content/releases/_index.md "url: /docs/integrations/version-control/github-app/#individual-user-authentication-for-github-enterprise-server" → ✅ verified (evidence: The file content/docs/integrations/version-control/github-app.md contains the section heading "### Individual user authentication for GitHub Enterprise Server", which generates the anchor `#individual-user-authentication-for-github-enter…; source: repo:content/docs/integrations/version-control/github-app.md)
  • L43-45 in content/releases/_index.md "The standalone esc CLI is retiring in favor of pulumi env, so a single Pulumi CLI manages IaC, Deployments, and ESC environments." → ✅ verified (framing: strengthened — claim omits "now" from "now manages" but is otherwise an exact paraphrase; the source's statement proves the claim as written.; evidence: The file content/releases/_index.md contains the exact text at the relevant entry: "The standalone esc CLI is retiring in favor of pulumi env, so a single Pulumi CLI now manages your IaC, Deployments, and ESC environments."; source: repo:content/releases/_index.md)
  • L45 in content/releases/_index.md "url: /docs/esc/" → ✅ verified (evidence: The URL /docs/esc/ appears in content/releases/_index.md at line 45 as the link for the "One CLI for Pulumi ESC with pulumi env" item, and content/docs/esc/_index.md exists in the repo confirming the target page is valid.; source: repo:content/releases/_index.md and repo:content/docs/esc/_index.md)
  • L46-47 in content/releases/_index.md "Universal Search provides a keyboard-first command palette (Cmd/Ctrl+K) that navigates to any stack, environment, resource, or member in Pulumi Cloud without l…" → ➖ not-a-claim (evidence: The claim is a faithful description of the PR author's own content in content/releases/_index.md (L46-47): title "Universal Search: a Cmd/Ctrl+K command palette for Pulumi Cloud" and description "A keyboard-first command palette (Cmd/Ctr…; source: repo:content/releases/_index.md)
  • L48 in content/releases/_index.md "Pulumi Deployments supports triggering deployments from Git tags with optional glob filters across GitHub, GitLab, Bitbucket, Azure DevOps, and Custom VCS." (also L50) → ✅ verified (evidence: The file content/releases/_index.md contains the item at the relevant lines with description: "Push a git tag to trigger a deployment, with optional glob filters, across GitHub, GitLab, Bitbucket, Azure DevOps, and Custom VCS." — this is…; source: repo:content/releases/_index.md)
  • L50 in content/releases/_index.md "url: /blog/trigger-deployments-on-git-tags/" → ✅ verified (evidence: The URL https://www.pulumi.com/blog/trigger-deployments-on-git-tags/ resolves to a live Pulumi blog post titled "Trigger Deployments on Git Tags," confirming the path /blog/trigger-deployments-on-git-tags/ is valid and active.; source: https://www.pulumi.com/blog/trigger-deployments-on-git-tags/)
  • L51-53 in content/releases/_index.md "Pulumi CLI June 2026 releases bring richer pulumi do and pulumi neo workflows." → ✅ verified (evidence: The June 2026 Pulumi CLI releases (v3.245.0–v3.248.0) include multiple [cli/do] and [cli/neo] improvements. For example, v3.245.0 notes: "[cli/do] Expose the selected stack's organization and short name to PCL input files when running…; source: gh release view v3.245.0 -R pulumi/pulumi; gh release view v3.246.0 -R pulumi/pulumi)
  • L55 in content/releases/_index.md "There is a Pulumi release detail page at /releases/agentic-infrastructure-era/ dated 2026-05-19." (also L57) → ❌ contradicted (framing: shifted — the claim asserts the detail page exists at that path; the list entry exists but the detail page itself is missing; evidence: The content/releases/_index.md file does reference a release entry at /releases/agentic-infrastructure-era/ dated 2026-05-19, but the corresponding detail page content/releases/agentic-infrastructure-era/_index.md does not exist in…; source: repo:content/releases/_index.md and repo:content/releases/agentic-infrastructure-era/_index.md)
  • L56 in content/releases/_index.md "date: 2026-05-19 # for ordering; title, label, and feed items come from the detail page" → ➖ not-a-claim (evidence: This line is a YAML/front-matter metadata field (date: 2026-05-19) used purely for ordering entries in a releases index page. The inline comment explicitly states its purpose: "for ordering; title, label, and feed items come from the det…; source: content/releases/_index.md L56 (PR diff metadata))
  • L103 in content/releases/agentic-infrastructure-era.md "The Neo GitHub and Slack integration feature (@-mentioning Neo in GitHub issues, pull requests, and Slack) is available on the Team tier." → ❌ contradicted (framing: shifted — claim assigns the GitHub/Slack Neo integration to the Team tier, but the source places it in the Enterprise tier; evidence: The Pulumi pricing page lists "Neo code reviews and Slack integration" under the Enterprise tier as part of "Everything in Team, plus: ... Neo code reviews and Slack integration" — not the Team tier.; source: https://www.pulumi.com/pricing/)
  • L120 in content/releases/agentic-infrastructure-era.md "The Neo automations feature (automating recurring infrastructure tasks like keeping providers updated, identifying non-compliant resources, and summarizing inf…" → ❌ contradicted (framing: shifted — claim asserts Enterprise-tier exclusivity for Neo automations, but sources indicate Neo (including automations) is available to all Pulumi users, not…; evidence: The Pulumi Neo product page states "Neo is generally available to all Pulumi users," and the Pulumi docs onboarding guide lists Neo access under the community/smaller-teams section, not as an Enterprise-only feature. The releases page conf…; source: https://www.pulumi.com/product/neo/ ; https://www.pulumi.com/docs/administration/onboarding-guide/choose-subscription/ ; https://www.pulumi.com/releases/agentic-infrastructure-era/)
  • L35 in layouts/partials/releases/updates.html "<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='currentColor' aria-hidden='true' class='ml-auto size-5 shrink-0 text-gray-400 transition-tr…" → ➖ not-a-claim (evidence: The line is an SVG element with a standard W3C namespace URI (http://www.w3.org/2000/svg) and an inline path definition. The viewBox="0 0 256 256" and path coordinates are SVG markup data, not a falsifiable factual assertion about the…; source: layouts/partials/releases/updates.html L35 (SVG inline icon markup))
  • L38 in layouts/partials/releases/updates.html "

    {{ .description }}{{ with .url }} <a href='{{ . }}' class='font-medium text-violet-primary no-underline hover:underline…" → ➖ not-a-claim (evidence: The "claim" is an SVG namespace URI (http://www.w3.org/2000/svg) embedded in an HTML template as a standard XML namespace attribute value. This is a fixed W3C standard identifier, not a falsifiable factual assertion about Pulumi or any t…; source: W3C SVG specification — xmlns="http://www.w3.org/2000/svg" is the canonical SVG namespace URI)

  • L28 in layouts/releases/list.json "'date' (time.Format '2006-01-02' .date)" → ➖ not-a-claim (evidence: The text (time.Format "2006-01-02" .date) is a Go template expression using Hugo's time.Format function with the Go reference time layout string "2006-01-02". The string "2006-01-02" is Go's canonical date format reference constant, no…; source: Go time package documentation: "2006-01-02" is the reference time layout for date formatting in Go.)
  • L45 in layouts/releases/list.json "'date' (time.Format '2006-01-02' .Params.date)" → ➖ not-a-claim (evidence: The text (time.Format "2006-01-02" .Params.date) is a Hugo template expression using Go's reference time layout string ("2006-01-02"). The string "2006-01-02" is Go's canonical date format reference constant, not a numerical claim about…; source: repo:layouts/releases/list.json L45)
  • L25 in layouts/releases/rss.xml "{{ time.Format 'Mon, 02 Jan 2006 15:04:05 -0700' .Params.date | safeHTML }}" → ➖ not-a-claim (evidence: The line is a Hugo/Go template expression using Go's reference time constant (Mon, 02 Jan 2006 15:04:05 -0700) to format a date in an RSS feed. This is a faithful description of the PR author's own template implementation, not a falsifia…; source: layouts/releases/rss.xml L25 (PR diff — own design/pipeline))
  • L36 in layouts/releases/rss.xml "{{ $date | time.Format '2006-01-02' }}-{{ absURL . }}" → ➖ not-a-claim (evidence: The line is a Go template expression in an RSS XML layout file that formats a date using Go's reference time constant "2006-01-02". This is not a falsifiable numerical assertion — "2006-01-02" is Go's canonical date format layout string (a…; source: Go time package documentation: the layout string "2006-01-02" is the reference time used by Go's time.Format to specify date formatting patterns.)
  • L37 in layouts/releases/rss.xml "{{ time.Format 'Mon, 02 Jan 2006 15:04:05 -0700' $date | safeHTML }}" → ➖ not-a-claim (framing: The format string exactly matches Go's predefined RFC1123Z = "Mon, 02 Jan 2006 15:04:05 -0700", which is the correct RSS 2.0 pubDate format.; evidence: The line is a Go template expression in the PR author's own RSS layout file, using Go's standard RFC1123Z format string ("Mon, 02 Jan 2006 15:04:05 -0700") for pubDate. It is a faithful description of the file's own design, not a third-par…; source: https://go.dev/src/time/format.go)

🚨 Outstanding in this PR

These must be resolved or refuted before merging.

  • [L39-40] content/releases/_index.md — the update item reads "Self-hosted GitHub Enterprise operations now run as the individual user who triggered them, so pull requests, commits, and Neo's writes are attributed to that person and respect their permissions." The core of this (operations run as the triggering user, attributed to them, respecting their permissions) is supported by the linked docs. The divergence is the third item in the list: the GitHub App docs enumerate "Pull requests, commits, and comments are attributed to the user," not "Neo's writes." Align the blurb with the documented wording so it doesn't imply a behavior the linked page doesn't describe:

            description: "Self-hosted GitHub Enterprise operations now run as the individual user who triggered them, so pull requests, commits, and comments are attributed to that person and respect their permissions."
    

    If "Neo's writes" is the intended, broader phrasing, confirm the linked docs back it up.

  • [L103] content/releases/agentic-infrastructure-era.md — this PR adds tier: Team to the "Neo in GitHub and Slack" card (the "@-mention Neo in GitHub issues and pull requests, and in your team's Slack workspace" feature). The pricing page lists "Neo code reviews and Slack integration" under the Enterprise tier ("Everything in Team, plus: …"), which suggests the Slack integration ships at Enterprise, not Team. Confirm the correct tier against the current pricing/packaging; if it's Enterprise (or higher), correct the badge so the release page doesn't advertise the feature at a lower tier than it's actually available:

            tier: Enterprise
    

⚠️ Low-confidence

No low-confidence findings.

📋 Triaged verifier findings

I double-checked these and realized they weren't real findings — click to expand
  • [L55] content/releases/_index.md"There is a Pulumi release detail page at /releases/agentic-infrastructure-era/ dated 2026-05-19." — verdict: contradicted; source: repo:content/releases/_index.md and repo:content/releases/agentic-infrastructure-era/_index.md — Spurious: the detail page does exist. It's content/releases/agentic-infrastructure-era.md (a flat file, modified in this very PR), which renders at /releases/agentic-infrastructure-era/. The check looked for a directory-style _index.md and concluded the page was missing.

  • [L120] content/releases/agentic-infrastructure-era.md"The Neo automations feature … is available on the Enterprise tier." — verdict: contradicted; source: https://www.pulumi.com/product/neo/ ; https://www.pulumi.com/docs/administration/onboarding-guide/choose-subscription/Spurious: the cited evidence ("Neo is generally available to all Pulumi users") speaks to Neo's overall availability, not to whether the automations capability specifically is gated to Enterprise. Base-tier Neo access and an Enterprise-gated automations feature aren't mutually exclusive, so this doesn't refute the tier: Enterprise badge.

💡 Pre-existing issues in touched files (optional)

No pre-existing issues in touched files.

✅ Resolved since last review

No items resolved since the last review.

📜 Review history

  • 2026-06-24T18:02:48Z — Fact-checked the new releases manifest: 2 actionable flags (the "Neo's writes" blurb vs the linked GitHub-app docs, and the Team tier badge vs the pricing page); 2 contradictions were verifier false positives (the detail page exists as a flat .md; the Neo-automations evidence was about Neo generally, not the automations tier). (925c850)

Need a re-review? Want to dispute a finding? Mention @claude and include #update-review.
(For ad-hoc questions or fixes, just @claude — no hashtag.)

@github-actions github-actions Bot added review:outstanding-issues Claude review completed; outstanding has author-actionable findings and removed review:in-progress Claude review is currently running labels Jun 24, 2026
A release entry now expands into one <item> per linked section card on its
detail page (title, link, card description), mirroring the JSON feed's items
instead of a single release-page item.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions github-actions Bot added review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention and removed review:outstanding-issues Claude review completed; outstanding has author-actionable findings labels Jun 24, 2026
Fix the GitHub Enterprise Server update blurb to say "comments" rather
than "Neo's writes", matching the linked GitHub App docs.

Remove the per-tier badges from Neo items (code reviews, GitHub/Slack
apps, scheduled tasks). The upcoming pricing update
(cnunciato/pricing-page-content-update) de-gates Neo by tier in favor of
token-based metering, so advertising Team/Enterprise gates here would go
stale. Genuinely tier-gated badges (private Terraform modules ->
Enterprise, GHES auth -> Business Critical) are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge domain:infra PR touches workflows, scripts, infra, Makefile, or build config domain:mixed PR touches more than one domain domain:website PR touches marketing, pricing, legal, or competitive landing pages review:stale New commits since last Claude review; refresh on next ready-transition or @claude mention

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants