fix/help: Generate help command list from registered commands - #1377
Open
marcleblanc2 wants to merge 1 commit into
Open
fix/help: Generate help command list from registered commands#1377marcleblanc2 wants to merge 1 commit into
marcleblanc2 wants to merge 1 commit into
Conversation
The "The commands are:" block in 'src help' was a hand-maintained string in main.go. It had drifted from the registered commands: 'debug', 'snapshot', and 'lsp' were never added, and the codeowners description differed from the command's own Usage. Build the list at runtime from both registries (legacy 'commands' and urfave/cli 'migratedCommands'). Legacy commands get a 'description' field and a 'hidden' flag; 'src doc' uses the same flag instead of hard-coding the names to skip. 'version' gets a Usage so it has a description. Tests keep the three lists apples-to-apples: - 'src help' == registered commands (TestHelpListsAllRegisteredCommands) - 'src doc' root index == 'src help' == registered (TestDocRootIndexMatchesHelp) - every visible command has a description (TestRootCommandsAreWellFormed) Amp-Thread-ID: https://ampcode.com/threads/T-01a08410-86ca-72be-9928-2810e837fae1 Co-authored-by: Amp <amp@ampcode.com>
This was referenced Sep 9, 2026
marcleblanc2
added a commit
to sourcegraph/docs
that referenced
this pull request
Sep 11, 2026
Part of [FE-502](https://linear.app/sourcegraph/issue/FE-502). **Step 4 of 4** in a cross-repo stack, but **mergeable now** — it pre-seeds what the generated-docs sync will eventually write, so the live reference gets fixed without waiting on a src-cli release. ## Why The `src` CLI reference is generated by `src doc` and synced here by sourcegraph/sourcegraph's `sync/generated-docs` job. Two generator bugs (fixed in sourcegraph/src-cli#1375) left this reference incomplete: - `search-jobs`, `debug` and `snapshot` were never registered in the generator's `commanders` map, so each is a single page with only the group help; their 16 subcommands have no reference pages. (The 8 `search-jobs/*.mdx` pages here were hand-written by Travis Lyons in May 2025 to paper over this; nothing links to them.) - `index.mdx` lists only the 8 urfave/cli commands (`abc`, `api`, `auth`, `codeowners`, `login`, `orgs`, `users`, `version`) — `batch`, `repos`, `search`, `config`, etc. are missing from https://sourcegraph.com/docs/cli/references today. ## What - `index.mdx`: lists all 19 top-level commands. - `debug/{index,compose,kube,server}.mdx`, `snapshot/{index,databases,restore,summary,test,upload}.mdx`: new. - `search-jobs/index.mdx`: new; `search-jobs/{cancel,create,delete,get,list,logs,restart,results}.mdx`: hand-written pages replaced by generated ones (same usage text, plus a flags table; the `<p className="subtitle">` blurbs go away since the generator doesn't emit them). - Deleted `debug.mdx`, `search-jobs.mdx`, `snapshot.mdx`. - Deleted `teams.mdx` and dropped `teams` from `index.mdx`: teams were removed in Sourcegraph 7.0 and sourcegraph/src-cli#1376 removes the command, so the generator no longer emits this page. No redirect (same call as #1886). The sync job never deletes files, and in contentlayer routing a flat `foo.mdx` shadows `foo/index.mdx` (the same bug #1886 fixed for `auth.mdx`/`codeowners.mdx`), so these have to go by hand for the new index pages to be reachable. Content was produced by running the patched generator (src-cli `main` + #1375) and the same `tools/md2mdx` conversion the sync uses, so the sync PR that follows sourcegraph/sourcegraph#15528 should be a no-op for these paths. No redirects: the three deleted URLs (`/cli/references/{debug,search-jobs,snapshot}`) keep resolving, now to the new index pages. ## Stack 1. sourcegraph/src-cli#1375 — generator fix + tests; sourcegraph/src-cli#1376 (stacked) — remove `src teams`; sourcegraph/src-cli#1377 (stacked) — `src help` generated from registered commands, tests help == docs 2. src-cli 7.7.0 release (none since 7.6.0; blocks 3) 3. sourcegraph/sourcegraph#15528 — pin bump + `OUTPUT_FILES` + regenerate (draft until 2) 4. **this PR** 5. sourcegraph/sourcegraph#15529 — make the docs sync mirror `docs/cli/references/` so removed commands disappear automatically (merge after 3 and this PR) Related: #1886 (removed 28 stale pages for commands that no longer exist). ## Test plan `npx contentlayer build` → 528 documents; routes resolve to the intended files: ``` /cli/references/debug <- cli/references/debug/index.mdx /cli/references/search-jobs <- cli/references/search-jobs/index.mdx /cli/references/snapshot <- cli/references/snapshot/index.mdx ``` plus the 16 subcommand routes. (The `ERR_INVALID_ARG_TYPE`/clipanion stack trace during the build is pre-existing on `main`.) ## Amp threads - [Stale command docs](https://ampcode.com/threads/T-01a08410-86ca-72be-9928-2810e837fae1) --------- Co-authored-by: Amp <amp@ampcode.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of FE-502. Stacked on #1376 (which is stacked on #1375); retarget to
mainonce those merge. Only the last commit is new here.Problem
The "The commands are:" block in
src helpwas a hand-maintained string incmd/src/main.go, and it had drifted from the registered commands:src debug(added 2022),src snapshot(2022) andsrc lsp(2026) were never added to it.codeownerswas described as "manages code ownership information" in help but "manages ingested code ownership data" in the command itself.src docskippeddocandpublishby hard-coded name;publishno longer exists.Nothing checked that
src help,src doc, and the registered commands agreed. #1375 fixed thesrc docside of the drift; this PR makes it impossible for the three lists to diverge again.Change
cmd/src/help.go:rootCommands()merges the legacycommandsregistry and the urfave/climigratedCommandsregistry into one sorted list;usageText()renders the help from it.main.goloses the 55-line constant.commandstruct gainsdescription(one-liner for help) andhidden(excluded from help and fromsrc doc). Every top-level legacy command gets a description;docis marked hidden anddoc.gouses the flag instead of the hard-coded names.version(urfave/cli) gets aUsage, so it has a description like every other migrated command. Side effect:version.mdfromsrc docgains that one-line summary (only generated-content change; file set is unchanged at 77).orgs manages organizations (alias: org)) rather than in the name column, becausebatchhas five aliases and listing them in the column made it 65 characters wide.Rendered:
Tests: help ⇔ registered commands ⇔ generated docs
cmd/src/help_test.gocomputes the expected command set directly from the two registries (independently ofrootCommands()), then:TestHelpListsAllRegisteredCommands: the parsedsrc helplist equals that set.TestRootCommandsAreWellFormed: every visible command has a description; no duplicate names; no alias collides with a name.TestHelpHidesHiddenCommands,TestFormatCommandList.cmd/src/doc_test.go:TestDocRootIndexMatchesHelpreplacesTestDocRootIndexListsAllCommandsand asserts thesrc docrootindex.mdlinks exactly the registered set and exactly thesrc helpset (both directions). Together withTestDocGeneratesExpectedFiles(golden 77-file list mirroringOUTPUT_FILESin sourcegraph/sourcegraph) andTestDocLegacyGroupsHaveSubcommandPagesfrom #1375, a new command that is registered but missing from help or from the docs fails CI.The third leg, "copied into the doc site", is sourcegraph/sourcegraph#15529:
_generated.push.shmirrorsdoc/cli/referencesinto sourcegraph/docs instead of copying over it, so removed commands disappear from the site instead of lingering.Mutation checks I ran locally, each caught by the named test:
lspfromrootCommands()→TestHelpListsAllRegisteredCommandsandTestDocRootIndexMatchesHelpfail listinglspUsagefromversion→TestRootCommandsAreWellFormed:command "version" has no descriptionmaps.Copyargument swap →TestDocRootIndexMatchesHelpfails listing all legacy commandsTest plan
go test ./cmd/src/...passes.go run ./cmd/src helprenders the list above;go run ./cmd/src version -hshows the new NAME line.go run ./cmd/src doc -o /tmp/xvs. the chore: Remove deprecatedsrc teamscommands #1376 output: same 77 files, onlyversion.mddiffers (adds the summary line).