open-design/.github/workflows
lefarcen 9a4816b101
feat(plugins): site-wide plugin detail pages, share-to-site links, landing deploy trigger (#2999)
* feat(plugins): site-wide plugin detail pages, share-to-site links, landing deploy trigger

Why: a merged plugin PR didn't redeploy the landing site (plugins/** was missing from the deploy paths), and the desktop Share menu copied a local/404 link instead of the public marketplace URL. The landing plugin routing left by the detail-page rework also 404'd: the locale listing's cards used a multi-segment href while detail pages were single-segment, and only 388 bundled _official plugins had pages.

What changed:
- Deploy: landing-page deploy/ci trigger on plugins/**, and skip the slow previews step on an exact cache hit (cache key aligned across both workflows so a PR-built cache is reused by main).
- Share URL: packages/contracts/plugin-url.ts owns the single-segment plugin URL scheme; the web Share menu and the landing site both derive links from it. Web links now point at https://open-design.ai/plugins/<slug>/.
- Full detail coverage: detail pages now cover all 403 local plugins (_official incl. atoms + community), each rendered from its local manifest. Fixes the locale-listing 404s and the community manifest-name/catalog-id (- vs /) mismatch.
- Self-host: daemon exposes OD_SITE_ORIGIN via /api/app-config; web falls back to the canonical origin until the daemon answers.

Validation: pnpm guard, pnpm typecheck (all packages), contracts + web tests green, and a full build E2E confirming all 403 catalog ids and locale-listing cards resolve to built detail pages (0 missing).

* chore: retrigger CI

* ci(landing): carry plugins/** trigger + previews cache-hit into #2994 split workflows

Merged origin/main, which split landing deploy into staging + manual production (#2994). git auto-migrated my landing-page-deploy.yml changes into landing-page-staging.yml via rename detection (plugins/** path, fallback-preview-card.ts cache key, cache-hit skip all carried). The new manual landing-page-production.yml didn't have them, so add the previews cache-key alignment + cache-hit skip there too (plugins/** path is N/A — production is workflow_dispatch only).

* fix(ci): wrangler-action uses pnpm so it tolerates landing's workspace dep

This PR added @open-design/contracts (workspace:*) to apps/landing-page/package.json so the landing site can share the plugin-url slug rules. But the landing deploy/preview steps run cloudflare/wrangler-action with packageManager: npm in workingDirectory apps/landing-page, and 'npm i wrangler' chokes on the workspace: protocol (EUNSUPPORTEDPROTOCOL), failing 'Validate landing page'. Switch all three landing wrangler-action steps (staging / ci preview / production) to packageManager: pnpm, which is workspace-aware.

* test(e2e): bundled plugins now offer the README badge

After this branch, buildPluginShareUrl returns a public open-design.ai link for bundled plugins (not just official-marketplace ones), so the home-starter share menu now shows 'Copy README badge'. Update the assertion from toHaveCount(0) to toBeVisible().

* fix(landing): drop @open-design/contracts dep, use a landing-local slug helper

Per review on #2999: the marketing site must not import @open-design/contracts (AGENTS.md boundary — it's the web/daemon product-runtime contract layer). Move the slug/path helpers into landing-local app/_lib/plugin-slug.ts; the web client keeps contracts' plugin-url. The two derive the same scheme and are verified in lockstep by the e2e route check (403 share URLs -> 403 detail pages, 0 missing). landing no longer has a workspace dep, so revert the wrangler-action packageManager back to npm.

* fix(landing): include plugins/_official in previews cache key

Per review on #2999: generate-previews.ts builds bundled-plugin preview jobs from plugins/_official/**/open-design.json and renders fallback cards from manifest fields (title/description/mode/scenario/tags). With plugins/** now triggering the workflow but the cache key not hashing plugin inputs, a plugin-only PR/merge could exact-hit an old cache and skip the preview regen, shipping with a stale or missing /previews/plugins/<manifest-id>.png. Add plugins/_official/** to the cache key in all three landing workflows (ci, staging, production). community is not currently covered by generate-previews so its glob is omitted.

* fix(plugins): include community marketplace installs in share gate

hasPublicPage now covers sourceMarketplaceId === 'community' so the
README badge and public detail link surface for community installs.
Community manifest names carry a community- prefix that diverges from
the landing-page route slug, so URL derivation uses sourceMarketplaceEntryName
(community/<folder>) instead — pluginDetailSlug takes the last segment,
matching the /plugins/<folder>/ route the landing page emits.
Adds component tests for buildPluginShareUrl, badge copy, and the
Open-in-marketplace link for a community/registry-starter record.

Generated-By: looper 0.9.2 (runner=fixer, agent=claude-code)

---------

Co-authored-by: mrcfps <mrc@powerformer.com>
2026-05-28 09:07:12 +00:00
..
actionlint.yml fix(ci): lint workflow changes with actionlint (#2742) 2026-05-23 12:12:55 +08:00
agent-pr-explore-sandbox.yml ci: trigger PR exploration via maintainer /explore comment (no approval) (#3139) 2026-05-27 16:48:58 +00:00
agent-pr-explore.lock.yml ci: add agent explore workflow placeholder (#2830) 2026-05-24 20:22:51 +08:00
blog-3day-report.yml fix(ci): lint workflow changes with actionlint (#2742) 2026-05-23 12:12:55 +08:00
blog-indexing-monitor.yml fix(ci): lint workflow changes with actionlint (#2742) 2026-05-23 12:12:55 +08:00
blog-indexing-on-deploy.yml ci(landing): split landing deploy into staging gate + manual production (#2994) 2026-05-26 14:05:04 +00:00
ci.yml ci(landing): split landing deploy into staging gate + manual production (#2994) 2026-05-26 14:05:04 +00:00
contributor-card-bot.yml ci: relay contributor card events to worker (#3113) 2026-05-27 14:48:01 +00:00
critique-conformance.yml feat(daemon): Critique Theater Phase 16 (M-phase rollout ratchet + /api/critique/conformance) (#1499) 2026-05-14 11:05:57 +08:00
discord-resolved.yml ci: skip upstream-only workflows on forks (#1586) 2026-05-14 14:27:23 +08:00
docker-image.yml fix(ci): only run docker image workflow for release tags (#1916) 2026-05-16 22:32:33 +08:00
fork-pr-workflow-approval.yml fix(ci): run fork visual reports from trusted code (#2935) 2026-05-26 06:17:04 +00:00
landing-page-ci.yml feat(plugins): site-wide plugin detail pages, share-to-site links, landing deploy trigger (#2999) 2026-05-28 09:07:12 +00:00
landing-page-production.yml feat(plugins): site-wide plugin detail pages, share-to-site links, landing deploy trigger (#2999) 2026-05-28 09:07:12 +00:00
landing-page-staging.yml feat(plugins): site-wide plugin detail pages, share-to-site links, landing deploy trigger (#2999) 2026-05-28 09:07:12 +00:00
metrics.yml fix(ci): use open-design-bot for metrics PRs (#1910) 2026-05-16 21:52:37 +08:00
nix-check.yml chore: optimize CI and beta release runtime (#2231) 2026-05-19 18:06:28 +08:00
nix-hash-autofix.yml chore(nix): streamline pnpm deps hash maintenance (#2919) 2026-05-26 07:35:38 +00:00
pr-author-inactivity.yml fix(ci): anchor PR inactivity clock to author responses (#2185) 2026-05-19 13:59:15 +08:00
refresh-contributors-wall.yml ci: skip upstream-only workflows on forks (#1586) 2026-05-14 14:27:23 +08:00
release-beta-s.yml Add release-beta-s self-hosted workflow placeholder (#3150) 2026-05-28 03:44:52 +00:00
release-beta.yml feat(runtimes): register AMR (vela) as an ACP stdio agent (#2355) 2026-05-28 05:09:55 +00:00
release-preview.yml feat(pack): add Windows portable zip target alongside NSIS installer (#2937) 2026-05-26 06:14:44 +00:00
release-stable.yml feat(pack): add Windows portable zip target alongside NSIS installer (#2937) 2026-05-26 06:14:44 +00:00
seo-daily-report.yml fix(ci): lint workflow changes with actionlint (#2742) 2026-05-23 12:12:55 +08:00
stale-issues.yml ci: add PR-author and stale-issue inactivity workflows (#2055) 2026-05-18 16:45:37 +08:00
visual-baseline.yml chore(ci): add visual regression PR workflow (#2372) 2026-05-20 15:05:59 +08:00
visual-pr-capture.yml ci: gate fork PR workflow auto-approval (#2683) 2026-05-23 11:48:36 +08:00
visual-pr-comment.yml fix(ci): run fork visual reports from trusted code (#2935) 2026-05-26 06:17:04 +00:00
visual-pr-verify.yml fix(ci): align visual selectors and nix hashes (#2471) 2026-05-21 10:45:37 +08:00