fj/cmd/aliases.go

17 lines
700 B
Go
Raw Permalink Normal View History

package cmd
refactor(cmd): unify actions/aliases command trees via factory functions The remaining audit finding: cmd/aliases.go rebuilt parallel `run *` and `workflow *` command subtrees by hand to expose them at top level (matching gh CLI's `gh run list` ergonomics). That duplication is what let the `--json` Bool/string mismatch fixed in 0c181df slip in — the flag was registered correctly under `actions run list` but Bool-typed under the top-level `run list`, and `wantJSON` silently swallowed the type-error return. Switch each `run *` and `workflow *` command from a package-level `var xxxCmd = &cobra.Command{...}` declaration to a factory function `newXxxCmd() *cobra.Command` that returns a fully-configured Command (struct, examples, args, RunE, AND its own flag registrations). Each parent factory (newRunCmd, newWorkflowCmd) takes a `parentLabel` string that's appended to the parent's Short/Long, so the alias-tree variant says "(alias for 'actions run')" without the children diverging. actions.go init() now does: actionsCmd.AddCommand(newRunCmd("")) actionsCmd.AddCommand(newWorkflowCmd("")) aliases.go shrinks from 142 lines to 17 lines: rootCmd.AddCommand(newRunCmd(" (alias for 'actions run')")) rootCmd.AddCommand(newWorkflowCmd(" (alias for 'actions workflow')")) Verified: `diff` of `fj run list --help` flags vs `fj actions run list --help` flags is empty. Both trees produce IDENTICAL surfaces. Future flag changes touch one factory and propagate to both paths. Note: secret/variable subcommands aren't aliased so they keep the package-level var pattern. Only the run/workflow subtrees moved.
2026-05-02 15:56:58 -06:00
// Top-level aliases for "actions run" and "actions workflow" — matches gh
// CLI's ergonomics so users can type `fj run list` and `fj workflow list`
// instead of `fj actions run list`.
//
// Both trees are built from the same factory functions defined in
// `cmd/actions.go` (newRunCmd / newWorkflowCmd), which means flags and
// help text are guaranteed identical between the two paths. Previously
// this file rebuilt parallel trees by hand and silently drifted (the
// `--json` Bool/string mismatch was the symptom that surfaced).
func init() {
refactor(cmd): unify actions/aliases command trees via factory functions The remaining audit finding: cmd/aliases.go rebuilt parallel `run *` and `workflow *` command subtrees by hand to expose them at top level (matching gh CLI's `gh run list` ergonomics). That duplication is what let the `--json` Bool/string mismatch fixed in 0c181df slip in — the flag was registered correctly under `actions run list` but Bool-typed under the top-level `run list`, and `wantJSON` silently swallowed the type-error return. Switch each `run *` and `workflow *` command from a package-level `var xxxCmd = &cobra.Command{...}` declaration to a factory function `newXxxCmd() *cobra.Command` that returns a fully-configured Command (struct, examples, args, RunE, AND its own flag registrations). Each parent factory (newRunCmd, newWorkflowCmd) takes a `parentLabel` string that's appended to the parent's Short/Long, so the alias-tree variant says "(alias for 'actions run')" without the children diverging. actions.go init() now does: actionsCmd.AddCommand(newRunCmd("")) actionsCmd.AddCommand(newWorkflowCmd("")) aliases.go shrinks from 142 lines to 17 lines: rootCmd.AddCommand(newRunCmd(" (alias for 'actions run')")) rootCmd.AddCommand(newWorkflowCmd(" (alias for 'actions workflow')")) Verified: `diff` of `fj run list --help` flags vs `fj actions run list --help` flags is empty. Both trees produce IDENTICAL surfaces. Future flag changes touch one factory and propagate to both paths. Note: secret/variable subcommands aren't aliased so they keep the package-level var pattern. Only the run/workflow subtrees moved.
2026-05-02 15:56:58 -06:00
rootCmd.AddCommand(newRunCmd(" (alias for 'actions run')"))
rootCmd.AddCommand(newWorkflowCmd(" (alias for 'actions workflow')"))
}