Add PR checks command, iostreams/text packages for colored table output, top-level run/workflow aliases matching gh CLI structure. Enhance actions, issues, PRs, releases, repos, labels, milestones, and wiki commands with improved flags, JSON output, and error handling.
142 lines
5.3 KiB
Go
142 lines
5.3 KiB
Go
package cmd
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// Top-level aliases for "actions run" and "actions workflow" commands,
|
|
// matching gh CLI's command structure (e.g., "fgj run list" instead of "fgj actions run list").
|
|
|
|
func init() {
|
|
// --- run alias ---
|
|
runAliasCmd := &cobra.Command{
|
|
Use: "run",
|
|
Short: "View and manage workflow runs (alias for 'actions run')",
|
|
Long: "List, view, and manage workflow runs.\n\nThis is a top-level alias for 'actions run'.",
|
|
}
|
|
|
|
runAliasListCmd := &cobra.Command{
|
|
Use: "list",
|
|
Short: "List recent workflow runs",
|
|
Long: "List recent workflow runs for a repository.",
|
|
RunE: runRunList,
|
|
}
|
|
addRepoFlags(runAliasListCmd)
|
|
runAliasListCmd.Flags().IntP("limit", "L", 20, "Maximum number of runs to list")
|
|
runAliasListCmd.Flags().Bool("json", false, "Output workflow runs as JSON")
|
|
|
|
runAliasViewCmd := &cobra.Command{
|
|
Use: "view <run-id>",
|
|
Short: "View a workflow run",
|
|
Long: "View details about a specific workflow run.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runRunView,
|
|
}
|
|
addRepoFlags(runAliasViewCmd)
|
|
runAliasViewCmd.Flags().BoolP("verbose", "v", false, "Show job steps")
|
|
runAliasViewCmd.Flags().BoolP("log", "", false, "View full log for either a run or specific job")
|
|
runAliasViewCmd.Flags().StringP("job", "j", "", "View a specific job ID from a run")
|
|
runAliasViewCmd.Flags().BoolP("log-failed", "", false, "View the log for any failed steps in a run or specific job")
|
|
runAliasViewCmd.Flags().Bool("json", false, "Output workflow run as JSON")
|
|
|
|
runAliasWatchCmd := &cobra.Command{
|
|
Use: "watch <run-id>",
|
|
Short: "Watch a workflow run",
|
|
Long: "Poll a workflow run until it completes.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runRunWatch,
|
|
}
|
|
addRepoFlags(runAliasWatchCmd)
|
|
runAliasWatchCmd.Flags().DurationP("interval", "i", 5*time.Second, "Polling interval")
|
|
|
|
runAliasRerunCmd := &cobra.Command{
|
|
Use: "rerun <run-id>",
|
|
Short: "Rerun a workflow run",
|
|
Long: "Trigger a rerun for a specific workflow run.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runRunRerun,
|
|
}
|
|
addRepoFlags(runAliasRerunCmd)
|
|
|
|
runAliasCancelCmd := &cobra.Command{
|
|
Use: "cancel <run-id>",
|
|
Short: "Cancel a workflow run",
|
|
Long: "Cancel a running workflow run.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runRunCancel,
|
|
}
|
|
addRepoFlags(runAliasCancelCmd)
|
|
|
|
runAliasCmd.AddCommand(runAliasListCmd)
|
|
runAliasCmd.AddCommand(runAliasViewCmd)
|
|
runAliasCmd.AddCommand(runAliasWatchCmd)
|
|
runAliasCmd.AddCommand(runAliasRerunCmd)
|
|
runAliasCmd.AddCommand(runAliasCancelCmd)
|
|
rootCmd.AddCommand(runAliasCmd)
|
|
|
|
// --- workflow alias ---
|
|
workflowAliasCmd := &cobra.Command{
|
|
Use: "workflow",
|
|
Short: "Manage workflows (alias for 'actions workflow')",
|
|
Long: "List, view, and run workflows.\n\nThis is a top-level alias for 'actions workflow'.",
|
|
}
|
|
|
|
workflowAliasListCmd := &cobra.Command{
|
|
Use: "list",
|
|
Short: "List workflows",
|
|
Long: "List all workflows in a repository.",
|
|
RunE: runWorkflowList,
|
|
}
|
|
addRepoFlags(workflowAliasListCmd)
|
|
workflowAliasListCmd.Flags().IntP("limit", "L", 20, "Maximum number of workflows to list")
|
|
workflowAliasListCmd.Flags().Bool("json", false, "Output workflows as JSON")
|
|
|
|
workflowAliasViewCmd := &cobra.Command{
|
|
Use: "view <workflow>",
|
|
Short: "View a workflow",
|
|
Long: "View details about a specific workflow. You can specify the workflow by name or filename.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runWorkflowView,
|
|
}
|
|
addRepoFlags(workflowAliasViewCmd)
|
|
workflowAliasViewCmd.Flags().Bool("json", false, "Output workflow as JSON")
|
|
|
|
workflowAliasRunCmd := &cobra.Command{
|
|
Use: "run <workflow>",
|
|
Short: "Run a workflow",
|
|
Long: "Trigger a workflow_dispatch event for a workflow. The workflow must support the workflow_dispatch trigger.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runWorkflowRun,
|
|
}
|
|
addRepoFlags(workflowAliasRunCmd)
|
|
workflowAliasRunCmd.Flags().StringP("ref", "r", "", "Branch or tag name to run the workflow on (defaults to repository's default branch)")
|
|
workflowAliasRunCmd.Flags().StringSliceP("field", "f", nil, "Add a string parameter in key=value format (can be used multiple times)")
|
|
workflowAliasRunCmd.Flags().StringSliceP("raw-field", "F", nil, "Add a string parameter in key=value format, reading from file if value starts with @ (can be used multiple times)")
|
|
|
|
workflowAliasEnableCmd := &cobra.Command{
|
|
Use: "enable <workflow>",
|
|
Short: "Enable a workflow",
|
|
Long: "Enable a workflow so it can be triggered.\n\nNote: This feature requires Forgejo 15.0+ or Gitea 1.24+.\nFor older versions, use the web UI to enable workflows.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runWorkflowEnable,
|
|
}
|
|
addRepoFlags(workflowAliasEnableCmd)
|
|
|
|
workflowAliasDisableCmd := &cobra.Command{
|
|
Use: "disable <workflow>",
|
|
Short: "Disable a workflow",
|
|
Long: "Disable a workflow so it cannot be triggered.\n\nNote: This feature requires Forgejo 15.0+ or Gitea 1.24+.\nFor older versions, use the web UI to disable workflows.",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: runWorkflowDisable,
|
|
}
|
|
addRepoFlags(workflowAliasDisableCmd)
|
|
|
|
workflowAliasCmd.AddCommand(workflowAliasListCmd)
|
|
workflowAliasCmd.AddCommand(workflowAliasViewCmd)
|
|
workflowAliasCmd.AddCommand(workflowAliasRunCmd)
|
|
workflowAliasCmd.AddCommand(workflowAliasEnableCmd)
|
|
workflowAliasCmd.AddCommand(workflowAliasDisableCmd)
|
|
rootCmd.AddCommand(workflowAliasCmd)
|
|
}
|