Add godoc comments to exported symbols in pkg/cmd/workflow

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Kynan Ware 2026-03-04 16:08:03 -07:00
parent 9331ee8215
commit 7eb76da40a
8 changed files with 39 additions and 2 deletions

View file

@ -13,6 +13,7 @@ import (
"github.com/spf13/cobra"
)
// DisableOptions holds the options for the disable workflow command.
type DisableOptions struct {
HttpClient func() (*http.Client, error)
IO *iostreams.IOStreams
@ -27,6 +28,7 @@ type iprompter interface {
Select(string, string, []string) (int, error)
}
// NewCmdDisable creates a new cobra command for disabling a workflow.
func NewCmdDisable(f *cmdutil.Factory, runF func(*DisableOptions) error) *cobra.Command {
opts := &DisableOptions{
IO: f.IOStreams,

View file

@ -13,6 +13,7 @@ import (
"github.com/spf13/cobra"
)
// EnableOptions holds the options for the enable workflow command.
type EnableOptions struct {
HttpClient func() (*http.Client, error)
IO *iostreams.IOStreams
@ -27,6 +28,7 @@ type iprompter interface {
Select(string, string, []string) (int, error)
}
// NewCmdEnable creates a new cobra command for enabling a workflow.
func NewCmdEnable(f *cmdutil.Factory, runF func(*EnableOptions) error) *cobra.Command {
opts := &EnableOptions{
IO: f.IOStreams,

View file

@ -15,6 +15,7 @@ import (
const defaultLimit = 50
// ListOptions holds the options for the list workflows command.
type ListOptions struct {
IO *iostreams.IOStreams
HttpClient func() (*http.Client, error)
@ -32,6 +33,7 @@ var workflowFields = []string{
"state",
}
// NewCmdList creates a new cobra command for listing workflows.
func NewCmdList(f *cmdutil.Factory, runF func(*ListOptions) error) *cobra.Command {
opts := &ListOptions{
IO: f.IOStreams,

View file

@ -24,6 +24,7 @@ import (
"gopkg.in/yaml.v3"
)
// RunOptions holds the options for the run workflow command.
type RunOptions struct {
HttpClient func() (*http.Client, error)
IO *iostreams.IOStreams
@ -47,6 +48,7 @@ type iprompter interface {
Select(string, string, []string) (int, error)
}
// NewCmdRun creates a new cobra command for running a workflow.
func NewCmdRun(f *cmdutil.Factory, runF func(*RunOptions) error) *cobra.Command {
opts := &RunOptions{
IO: f.IOStreams,
@ -190,10 +192,12 @@ func parseFields(opts RunOptions) (map[string]string, error) {
return params, nil
}
// InputAnswer collects user-provided input values for workflow dispatch.
type InputAnswer struct {
providedInputs map[string]string
}
// WriteAnswer stores a single input value by name into the answer map.
func (ia *InputAnswer) WriteAnswer(name string, value interface{}) error {
if s, ok := value.(string); ok {
ia.providedInputs[name] = s
@ -390,6 +394,7 @@ func runRun(opts *RunOptions) error {
return nil
}
// WorkflowInput describes a single input parameter defined in a workflow file.
type WorkflowInput struct {
Name string
Required bool

View file

@ -20,8 +20,11 @@ import (
)
const (
Active WorkflowState = "active"
DisabledManually WorkflowState = "disabled_manually"
// Active represents an enabled workflow state.
Active WorkflowState = "active"
// DisabledManually represents a workflow disabled by a user.
DisabledManually WorkflowState = "disabled_manually"
// DisabledInactivity represents a workflow disabled due to inactivity.
DisabledInactivity WorkflowState = "disabled_inactivity"
)
@ -29,8 +32,10 @@ type iprompter interface {
Select(string, string, []string) (int, error)
}
// WorkflowState represents the state of a GitHub Actions workflow.
type WorkflowState string
// Workflow represents a GitHub Actions workflow.
type Workflow struct {
Name string
ID int64
@ -38,22 +43,27 @@ type Workflow struct {
State WorkflowState
}
// WorkflowsPayload is the response payload for listing workflows from the API.
type WorkflowsPayload struct {
Workflows []Workflow
}
// Disabled reports whether the workflow is in a disabled state.
func (w *Workflow) Disabled() bool {
return w.State != Active
}
// Base returns the file name component of the workflow path.
func (w *Workflow) Base() string {
return path.Base(w.Path)
}
// ExportData returns the workflow fields as a map for structured output.
func (w *Workflow) ExportData(fields []string) map[string]interface{} {
return cmdutil.StructExportData(w, fields)
}
// GetWorkflows fetches workflows for a repository, up to the given limit (0 for all).
func GetWorkflows(client *api.Client, repo ghrepo.Interface, limit int) ([]Workflow, error) {
perPage := limit
page := 1
@ -93,6 +103,7 @@ func GetWorkflows(client *api.Client, repo ghrepo.Interface, limit int) ([]Workf
return workflows, nil
}
// FilteredAllError indicates that all workflows were filtered out during selection.
type FilteredAllError struct {
error
}
@ -146,6 +157,7 @@ func FindWorkflow(client *api.Client, repo ghrepo.Interface, workflowSelector st
return getWorkflowsByName(client, repo, workflowSelector, states)
}
// GetWorkflow fetches a single workflow by its database ID.
func GetWorkflow(client *api.Client, repo ghrepo.Interface, workflowID int64) (*Workflow, error) {
return getWorkflowByID(client, repo, strconv.FormatInt(workflowID, 10))
}
@ -189,6 +201,7 @@ func getWorkflowsByName(client *api.Client, repo ghrepo.Interface, name string,
return filtered, nil
}
// ResolveWorkflow finds a workflow by selector or prompts the user to choose one.
func ResolveWorkflow(p iprompter, io *iostreams.IOStreams, client *api.Client, repo ghrepo.Interface, prompt bool, workflowSelector string, states []WorkflowState) (*Workflow, error) {
if prompt {
workflows, err := GetWorkflows(client, repo, 0)
@ -232,6 +245,7 @@ func ResolveWorkflow(p iprompter, io *iostreams.IOStreams, client *api.Client, r
return selectWorkflow(p, workflows, "Which workflow do you mean?", states)
}
// GetWorkflowContent retrieves and decodes the YAML content of a workflow file.
func GetWorkflowContent(client *api.Client, repo ghrepo.Interface, workflow Workflow, ref string) ([]byte, error) {
path := fmt.Sprintf("repos/%s/contents/%s", ghrepo.FullName(repo), workflow.Path)
if ref != "" {

View file

@ -1,13 +1,16 @@
package shared
// AWorkflow is a test fixture representing an active workflow.
var AWorkflow = Workflow{
Name: "a workflow",
ID: 123,
Path: ".github/workflows/flow.yml",
State: Active,
}
// AWorkflowContent is a test fixture with base64-encoded content for AWorkflow.
var AWorkflowContent = `{"content":"bmFtZTogYSB3b3JrZmxvdwo="}`
// DisabledWorkflow is a test fixture representing a manually disabled workflow.
var DisabledWorkflow = Workflow{
Name: "a disabled workflow",
ID: 456,
@ -15,6 +18,7 @@ var DisabledWorkflow = Workflow{
State: DisabledManually,
}
// DisabledInactivityWorkflow is a test fixture representing a workflow disabled due to inactivity.
var DisabledInactivityWorkflow = Workflow{
Name: "a disabled inactivity workflow",
ID: 1206,
@ -22,6 +26,7 @@ var DisabledInactivityWorkflow = Workflow{
State: DisabledInactivity,
}
// AnotherDisabledWorkflow is a test fixture representing a second manually disabled workflow.
var AnotherDisabledWorkflow = Workflow{
Name: "a disabled workflow",
ID: 1213,
@ -29,6 +34,7 @@ var AnotherDisabledWorkflow = Workflow{
State: DisabledManually,
}
// UniqueDisabledWorkflow is a test fixture representing a disabled workflow with a unique name.
var UniqueDisabledWorkflow = Workflow{
Name: "terrible workflow",
ID: 1314,
@ -36,14 +42,17 @@ var UniqueDisabledWorkflow = Workflow{
State: DisabledManually,
}
// AnotherWorkflow is a test fixture representing a second active workflow.
var AnotherWorkflow = Workflow{
Name: "another workflow",
ID: 789,
Path: ".github/workflows/another.yml",
State: Active,
}
// AnotherWorkflowContent is a test fixture with base64-encoded content for AnotherWorkflow.
var AnotherWorkflowContent = `{"content":"bmFtZTogYW5vdGhlciB3b3JrZmxvdwo="}`
// YetAnotherWorkflow is a test fixture representing a third active workflow with a duplicate name.
var YetAnotherWorkflow = Workflow{
Name: "another workflow",
ID: 1011,

View file

@ -21,6 +21,7 @@ import (
"github.com/spf13/cobra"
)
// ViewOptions holds the options for the view workflow command.
type ViewOptions struct {
HttpClient func() (*http.Client, error)
IO *iostreams.IOStreams
@ -42,6 +43,7 @@ type iprompter interface {
Select(string, string, []string) (int, error)
}
// NewCmdView creates a new cobra command for viewing a workflow.
func NewCmdView(f *cmdutil.Factory, runF func(*ViewOptions) error) *cobra.Command {
opts := &ViewOptions{
IO: f.IOStreams,

View file

@ -10,6 +10,7 @@ import (
"github.com/spf13/cobra"
)
// NewCmdWorkflow creates the top-level workflow command for GitHub Actions.
func NewCmdWorkflow(f *cmdutil.Factory) *cobra.Command {
cmd := &cobra.Command{
Use: "workflow <command>",