Skip to content

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

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

LTRAC-593: feat(cli) - Show deployment hostnames in project list output#2988
jorgemoya wants to merge 5 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

Re-land sequencing: The original interfaces PR was merged and reverted on 2026-05-04 by interfaces#4027 because the api-proxy-java PR hadn't merged in time. The proto re-land is interfaces#4034 (draft) — held until every consumer in the chain (this PR included) is review-approved.

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`. Chris and Ryan flagged this in `#native-hosting-alpha-internal`.

Surface every hostname directly in the list output (canonical + 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:

  • Wire field is `deployment_hostnames` (renamed from `deployment_urls` per reviewer feedback on the proto PR). Strict hostname-only; the CLI unconditionally prepends `https://` for display.
  • Empty array renders `(not deployed)`.
  • The `deploy` SSE consumer in `deploy.ts` reads `deployment_hostnames` from each event chunk and falls back to the deprecated `deployment_url` for older ignition builds during the migration window.
  • `project link` selection prompt is unchanged — hostnames aren't useful in the picker.

Dependencies

Consumer end of the LTRAC-443 chain:

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

Testing

  1. `pnpm test src/cli` — all 131 CLI tests pass; `project.spec.ts` asserts both URL lines + `(not deployed)` line; `deploy.spec.ts` exercises the new SSE shape (fallback path covered by the schema's `.optional()` on the deprecated key).
  2. `pnpm typecheck` clean.
  3. `pnpm lint` clean.
  4. Manual smoke (once the chain lands): `catalyst project list` against a store with a multi-hostname project + a fresh project, confirm both states render.

Migration

None. Additive on the API response, additive output lines — existing consumers parsing the `Name (uuid)` line are 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 May 1, 2026 4:52pm

Request Review

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 22, 2026

🦋 Changeset detected

Latest commit: d8c3886

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 ec92930 (2026-05-01).

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

github-actions Bot commented Apr 23, 2026

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 96

Category Scores

Category Prod Desktop Prod Mobile Preview Desktop Preview Mobile
Performance 72 89 75 89
Accessibility 95 95 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 5.1 s 3.7 s 3.8 s 3.8 s
CLS 0.037 0 0.037 0
FCP 1.1 s 1.2 s 1.2 s 1.2 s
TBT 0 ms 0 ms 30 ms 0 ms
Max Potential FID 50 ms 40 ms 70 ms 60 ms
Time to Interactive 5.1 s 3.7 s 6.0 s 4.2 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>
Track the proto rename + SSE deprecation in interfaces#3993:

project list — ProjectListItem.deployment_urls -> deployment_hostnames
on the schema and the rendering, matching the renamed proto field.
The visible output is unchanged (still one https://-prefixed line per
hostname, or "(not deployed)" for an empty array).

deploy SSE consumer — extend DeploymentStatusSchema to accept both
the deprecated singular `deployment_url` and the new plural
`deployment_hostnames`. Reading logic prefers the new field and falls
back to the deprecated one so older ignition builds (that haven't
shipped the rename yet) still produce a usable deployment URL during
the migration window.

Drops the defensive `startsWith('https://')` guard on the post-deploy
success message since the contract is now strictly hostname-only and
the CLI unconditionally prepends the scheme.

Mocks (handlers.ts) emit both fields on every SSE chunk so the test
exercises the new path.

Refs LTRAC-443
Co-Authored-By: Claude <noreply@anthropic.com>
@jorgemoya jorgemoya changed the title LTRAC-593: feat(cli) - Show deployment URLs in project list output LTRAC-593: feat(cli) - Show deployment hostnames in project list output May 1, 2026
@jorgemoya jorgemoya marked this pull request as ready for review May 5, 2026 13:59
@jorgemoya jorgemoya requested a review from a team as a code owner May 5, 2026 13:59
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