Skip to content

LTRAC-593: feat(cli) - Show deployment URLs in project list output#2988

Draft
jorgemoya wants to merge 4 commits intoalphafrom
jorgemoya/ltrac-443-cli-show-deployed-url-in-project-list-output
Draft

LTRAC-593: feat(cli) - Show deployment URLs in project list output#2988
jorgemoya wants to merge 4 commits intoalphafrom
jorgemoya/ltrac-443-cli-show-deployed-url-in-project-list-output

Conversation

@jorgemoya
Copy link
Copy Markdown
Contributor

@jorgemoya jorgemoya commented Apr 22, 2026

Linear: LTRAC-593 (sub-ticket of LTRAC-443)

Jira: TRAC-433

What/Why?

catalyst project list only printed Name (uuid), so the only way a user could recover the hosted .catalyst-sandbox.store URL for an existing project was to re-run catalyst deploy (which surfaces it via the SSE event stream). Chris Nanninga and Ryan Gross flagged this in #native-hosting-alpha-internal.

Surface every URL directly in the list output (canonical hostname + any vanity hostnames):

✓ Projects fetched.

Project One (a23f5785-fd99-4a94-9fb3-945551623923)
  https://project-one.catalyst-sandbox.store
  https://vanity.project-one.example.com

Project Two (b23f5785-fd99-4a94-9fb3-945551623924)
  (not deployed)

Notes:

  • Contract is strict hostname-only (no scheme) — matches the existing deployment_url convention on the deploy event stream. The CLI unconditionally prepends https:// for display.
  • One indented line per hostname, in the order returned by ignition's domainService.GetDomains.
  • Empty array renders (not deployed).
  • The project link selection prompt is intentionally unchanged — URLs aren't useful in the picker, and the existing hint field still shows the UUID.

Dependencies

This PR is the consumer end of a three-PR chain:

Should land after the proto + ignition PRs merge and propagate.

Testing

  1. Unit tests from packages/catalyst:
    pnpm test src/cli/commands/project.spec.ts
    pnpm test src/cli
    
    All 131 CLI tests pass. The project list spec asserts on both URL lines (via stringContaining to avoid coupling to ANSI escapes) and the (not deployed) line.
  2. Type check: pnpm typecheck (clean).
  3. Lint: pnpm lint (clean).
  4. Manual smoke (once the chain lands in a reachable environment): run catalyst project list against a store with a project that has multiple hostnames and one fresh project, confirm both states render.

Migration

None. Additive schema change on the API response, additive output lines — existing consumers parsing the Name (uuid) line remain unaffected.

Extend the projects list schema with a new nullable `deployed_url` field and
render it beneath each project so users can recover the hosted storefront URL
without having to run a fresh deploy.

Previously, `catalyst project list` only printed `Name (uuid)`, and the only
path to the `.catalyst-sandbox.store` URL was re-running `catalyst deploy`
(which surfaces it via the SSE event stream). Surfacing the URL here also
resolves the related feedback that it was unclear where a deploy lands.

Projects without a successful deployment show `(not deployed)`.

Refs LTRAC-443
Co-Authored-By: Claude <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 22, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
catalyst Ready Ready Preview, Comment Apr 28, 2026 2:16am

Request Review

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 22, 2026

🦋 Changeset detected

Latest commit: 7c7b4c6

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@bigcommerce/catalyst Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 22, 2026

Bundle Size Report

Comparing against baseline from ed76224 (2026-04-28).

No bundle size changes detected.

Align the projects list field name with the existing `deployment_url`
convention used on the ignition Deployments event stream, per reviewer
feedback on bigcommerce/interfaces#3993 (Parth + Chance wanted a single
consistent contract, not "either hostname or URL").

Contract is now strictly hostname-only (no scheme) — the CLI
unconditionally prepends `https://` for display rather than
defensively checking, which matches how the deploy command already
handles `deployment_url` from the SSE stream.

Refs LTRAC-443
Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

Unlighthouse Performance Comparison — Vercel

Comparing PR preview deployment Unlighthouse scores vs production Unlighthouse scores.

Summary Score

Aggregate score across all categories as reported by Unlighthouse.

Prod Desktop Prod Mobile Preview Desktop Preview Mobile
Score 90 93 91 95

Category Scores

Category Prod Desktop Prod Mobile Preview Desktop Preview Mobile
Performance 74 81 74 96
Accessibility 95 91 95 98
Best Practices 100 100 95 100
SEO 88 100 100 100

Core Web Vitals

Metric Prod Desktop Prod Mobile Preview Desktop Preview Mobile
LCP 3.9 s 4.9 s 4.4 s 2.7 s
CLS 0.037 0 0.037 0
FCP 1.2 s 1.1 s 1.2 s 1.2 s
TBT 0 ms 0 ms 10 ms 0 ms
Max Potential FID 50 ms 50 ms 60 ms 40 ms
Time to Interactive 3.9 s 5.0 s 4.4 s 2.7 s

Full Unlighthouse report →

Switch the project list output from a single deployment_url field to
an array of deployment_urls, mirroring the proto contract change in
bigcommerce/interfaces#3993. Each hostname renders on its own indented
line under the project; an empty array still renders "(not deployed)".

Future-proofs the CLI for vanity hostnames per project, which the
ignition serializer now exposes via domainService.GetDomains.

Refs LTRAC-443
Co-Authored-By: Claude <noreply@anthropic.com>
@jorgemoya jorgemoya changed the title LTRAC-443: feat(cli) - Show deployed URL in project list output LTRAC-593: feat(cli) - Show deployment URLs in project list output Apr 28, 2026
Match the wire contract change in interfaces#3993 (singular
`deployment_url` → repeated `deployment_urls`) so the user-facing
release note describes the actual rendering: every URL per project
is shown, including any vanity hostnames.

Filename intentionally preserved — changesets pick up by `*.md`
glob, so renaming would just churn git history.

Refs LTRAC-593
Co-Authored-By: Claude <noreply@anthropic.com>
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.

1 participant