Skip to content

Pull Learn, Tutorials, Templates, and Guides into /dev - #21095

Merged
cnunciato merged 18 commits into
masterfrom
jeffmerrick/learn-site-migration
Sep 4, 2026
Merged

Pull Learn, Tutorials, Templates, and Guides into /dev#21095
cnunciato merged 18 commits into
masterfrom
jeffmerrick/learn-site-migration

Conversation

@jeffmerrick

@jeffmerrick jeffmerrick commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Cutover half of moving Learn, tutorials, templates, and guides to the Dev Center at /dev, which ships from pulumi/marketing-web. Depends on #21348 (adds the /dev origin) and on the Dev Center being live in production — don't merge before both.

Deletes the Hugo /tutorials and /templates trees (plus the collections taxonomy, layouts, shortcodes, and scaffolding that only served them), retires the pulumi/guides CloudFront origin, and 301s every retired URL into /dev via scripts/redirects/dev-redirects.txt.

  • /tutorials/*, /templates/*, and the old /learn/* aliases redirect to their /dev/* equivalents; bare /learn goes to /dev/tutorials/.
  • /guides retired: the four solutions ported to pulumi/examples redirect to /dev/examples/aws-ts-*; everything else, including /guides itself, goes to /dev/tutorials/.
  • Nav, footer, llms.txt, robots.txt, and the sitemap index updated; "Learn" is renamed "Dev Center".
  • Docs search is unchanged — the Dev Center has its own search at /dev/browse.

Related: pulumi/marketing-web#125, pulumi/examples#2995

jeffmerrick and others added 3 commits August 24, 2026 09:51
Learn — tutorials, official templates, community examples, and a glossary —
now ships from pulumi/marketing-web (apps/www) at /learn, with its own S3 +
CloudFront (pulumi/marketing-web#82). www.pulumi.com is otherwise Hugo out of
this repo, so this is the pulumi/docs half of the cutover.

Routing. infrastructure/index.ts gains a /learn* behavior pointed at the Learn
stack's cloudFrontDomain, the same shape as /registry and /guides. It uses the
thirty-minute policy because that one keys on Accept: the Learn origin rewrites
a page URL to its .md twin when the viewer asks for markdown, and the two
representations must not collide in the apex cache. learnStack is optional, so
dev stacks and PR previews are unchanged.

Content. content/tutorials/ (48 pages + 13 glossary terms) and
content/templates/ (23 pages) are deleted along with their layouts, partials,
shortcodes, archetypes, scaffolding scripts, SCSS, data files, and the
`collections` taxonomy. Slugs are 1:1 on the other side, so
scripts/redirects/learn-redirects.txt is 99 301s: /tutorials/<path>/ →
/learn/tutorials/<path>/, /templates/<path>/ → /learn/official-templates/<path>/,
the glossary to /learn/glossary/, the six collection term pages to their browse
facet landings, and the frontmatter aliases those pages carried. Every target
was checked against a local build of apps/www.

Links. Everything outside content/blog/ now points at /learn (blog rides the
301s, per AGENTS.md). The one exception is six architecture.png references in
walkthrough-of-adopting-infrastructure-as-code: those are assets, not pages, and
no redirect covers them, so the images moved into the post's bundle.

Search still covers docs and the Registry only — /learn has its own search at
/learn/browse and is not merged into the Algolia index. What goes is the dead
scaffolding the deleted pages leave behind: the Tutorials and Templates section
mappings in page.js, the /templates ranking rule, the Tutorials facet in the
docs search box, and its icon.

robots.txt gets a second Sitemap: directive for /learn/sitemap-index.xml — a
separate directive rather than an entry in ours, since nesting one sitemap index
inside another isn't defined by the spec — plus a pointer to /learn/llms.txt.

Nav keeps its Templates slot (now /learn/official-templates/) and the Tutorials
entry becomes Learn. Both files are synced downstream by marketing-web, so
Learn's own chrome picks the change up.

Still to land in pulumi/marketing-web: redirects for the old /learn/... alias
URLs (/learn/pulumi-fundamentals/ and friends). Those are Hugo aliases today;
once /learn* proxies away, this repo can't answer them. The provenance is
already recorded there as `aliases` frontmatter on the ported pages.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The Azure and Kubernetes get-started pages linked /learn/pulumi-fundamentals,
which was a Hugo alias of the old /tutorials page rather than a real URL. Now
that /learn* proxies away, this repo can't answer it, so both point at the
canonical /learn/tutorials/pulumi-fundamentals/. That leaves content/docs/ with
no link that depends on an alias being ported downstream.

run-pulumi.sh invalidates /registry/* and /guides/* after a deploy but had no
/learn/*, which is now cached at the apex for thirty minutes like the other two.
/tutorials/* stays, since the pre-cutover HTML still needs flushing.

The Vale file filter in the three claude-* workflows still matched
content/tutorials/.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Comments that restate the code they sit on, in the files this branch touched:
the /learn origin and behavior block in infrastructure/index.ts (the same shape
as /registry and /guides directly above it), the section headers in
learn-redirects.txt, four in howto-entity.html, and the menu-tree list item.

Two carried something real and are gone anyway, worth a look before merge:
"/learn* has no trailing slash on purpose" and the cascade `path` note in
config.yml (it matches the logical taxonomy path /industry/..., not the
permalink /case-studies/industry/...).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jeffmerrick
jeffmerrick marked this pull request as ready for review August 24, 2026 15:28
@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:docs PR touches technical docs domain:mixed PR touches more than one domain domain:infra PR touches workflows, scripts, infra, Makefile, or build config domain:blog PR touches blog posts or customer stories review:oversized Diff too large for automated review (generated corpora); skips Claude review labels Aug 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📦 Oversized PR — this diff (+295/−19935 across 100 files) exceeds the automated review budget, so the Claude review is skipped (review:oversized).

A diff this size is usually mostly generated output, which an automated line-review can't finish (and wouldn't add value to). What works better:

  • Split the hand-written source (scripts, workflows, layouts, templates) into its own PR — that PR gets a normal full review.
  • Have a human spot-check a sample of the generated output here.

@claude #new-review still force-runs a full review, but on a diff this size it will likely hit the job timeout.

@github-actions github-actions Bot removed the review:triaging Claude Triage is currently classifying the PR label Aug 24, 2026

@unblocked unblocked Bot 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.

✅ No issues found

About Unblocked

Unblocked has been set up to automatically review your team's pull requests to identify genuine bugs and issues.

📖 Documentation — Learn more in our docs.

💬 Ask questions — Mention @unblocked to request a review or summary, or ask follow-up questions.

👍 Give feedback — React to comments with 👍 or 👎 to help us improve.

⚙️ Customize — Adjust settings in your preferences.

…ite-migration

# Conflicts:
#	content/tutorials/esc-managed-chatapp/index.md
#	content/tutorials/esc-setup-psp-creds/index.md
#	content/tutorials/esc-version-tagging/index.md
…ite-migration

# Conflicts:
#	content/templates/container-service/aws/index.md
#	content/templates/container-service/azure/index.md
#	content/templates/container-service/gcp/index.md
#	content/templates/kubernetes-application/helm-chart/index.md
#	content/templates/kubernetes-application/web-application/index.md
#	content/templates/kubernetes/aws/index.md
#	content/templates/kubernetes/azure/index.md
#	content/templates/kubernetes/gcp/index.md
#	content/templates/serverless-application/aws/index.md
#	content/templates/serverless-application/azure/index.md
#	content/templates/serverless-application/gcp/index.md
#	content/templates/static-website/azure/index.md
#	content/templates/static-website/gcp/index.md
#	content/templates/virtual-machine/aws/index.md
#	content/templates/virtual-machine/azure/index.md
#	content/templates/virtual-machine/gcp/index.md
#	content/tutorials/building-with-pulumi/secrets/index.md
#	content/tutorials/creating-resources-aws/index.md
#	content/tutorials/creating-resources-azure/index.md
#	content/tutorials/creating-resources-gcp/index.md
#	content/tutorials/creating-resources-kubernetes/index.md
#	content/tutorials/inspecting-infrastructure/index.md
#	content/tutorials/pulumi-fundamentals/create-a-pulumi-project/index.md
#	content/tutorials/stack-outputs-refs-aws/index.md
#	content/tutorials/stack-outputs-refs-azure/index.md
#	content/tutorials/stack-outputs-refs-gcp/index.md
#	layouts/partials/schema/utils/related-content.html
#	layouts/partials/tutorials/right-nav-ad.html
…ite-migration

# Conflicts:
#	archetypes/templates/template/index.md
#	archetypes/templates/type/_index.md
#	archetypes/tutorials/module/_index.md
#	archetypes/tutorials/single/index.md
#	archetypes/tutorials/topic/index.md
cnunciato and others added 2 commits September 2, 2026 13:09
Reorients the migration: the pulumi/marketing-web distribution now mounts at
/dev (the Dev Center) instead of /learn. Repoints every content link, the
CloudFront origin behavior and its `devStack` config, the /tutorials and
/templates 301 destinations, robots/llms indexes, and nav/footer labels;
renames scripts/redirects/learn-redirects.txt to dev-redirects.txt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds a static 301 so the old /learn landing lands on the Dev Center's
tutorials index at its new /dev home.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@cnunciato cnunciato changed the title Move /learn to pulumi/marketing-web; retire /tutorials and /templates Move learn, tutorials, templates, and guides to /dev (marketing-web) Sep 2, 2026
cnunciato and others added 2 commits September 2, 2026 14:16
The deleted /tutorials pages carried /learn/... aliases (pulumi-fundamentals,
building-with-pulumi, embedding-pulumi, abstraction-encapsulation, and the
glossary), so those were live URLs. 301 each to its new /dev home and add
/learn/* to the deploy invalidation paths.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ite-migration

# Conflicts:
#	archetypes/templates/template/index.md
#	content/tutorials/creating-resources-gcp/index.md
#	content/tutorials/creating-resources-kubernetes/index.md
@cnunciato cnunciato changed the title Move learn, tutorials, templates, and guides to /dev (marketing-web) Move learn, tutorials, templates, and guides to /dev marketing-web Sep 2, 2026
@cnunciato cnunciato changed the title Move learn, tutorials, templates, and guides to /dev marketing-web Move learn, tutorials, templates, and guides to /dev in marketing-web Sep 2, 2026
…ite-migration

# Conflicts:
#	layouts/taxonomy/collection.html
Removes the pulumi/guides CloudFront origin/behavior and its testing/production
stack config, and drops /guides/sitemap.xml from the sitemap index. The four
solutions ported to pulumi/examples 301 to their /dev/examples pages; every
other /guides/* URL, including /guides itself, 301s to /dev/tutorials (from the
live /guides sitemap). Updates TAXONOMY.md to match.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@cnunciato cnunciato changed the title Move learn, tutorials, templates, and guides to /dev in marketing-web Pull /learn, /tutorials, /templates, and /guides to /dev Sep 3, 2026
@cnunciato cnunciato changed the title Pull /learn, /tutorials, /templates, and /guides to /dev Pull /learn, /tutorials, /templates, and /guides into /dev Sep 3, 2026
@cnunciato cnunciato changed the title Pull /learn, /tutorials, /templates, and /guides into /dev Pull Learn, Tutorials, Templates, and Guides into /dev Sep 3, 2026
…ite-migration

# Conflicts:
#	infrastructure/Pulumi.www-production.yaml
#	infrastructure/Pulumi.www-testing.yaml
#	infrastructure/index.ts
#	scripts/run-pulumi.sh
…ite-migration

# Conflicts:
#	content/tutorials/managing-config-and-secrets/index.md

@cnunciato cnunciato 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.

Deployed to testing, and all looks well.

@cnunciato
cnunciato merged commit 5f7b194 into master Sep 4, 2026
20 checks passed
@cnunciato
cnunciato deleted the jeffmerrick/learn-site-migration branch September 4, 2026 02:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge domain:blog PR touches blog posts or customer stories domain:docs PR touches technical docs 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:oversized Diff too large for automated review (generated corpora); skips Claude review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants