Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add support for listing Git runbooks #443

Merged
merged 29 commits into from
Nov 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
555c6a9
Separate package version and Git resource functions from create release
geofflamrock Nov 1, 2024
6b1cb43
Add support for running Git runbook
geofflamrock Nov 1, 2024
0b80fc3
Fix channel rule version query parameters
geofflamrock Nov 1, 2024
f15a33b
Merge branch 'geoffl-git-runbooks-part-1' into geoffl-git-runbooks-pa…
geofflamrock Nov 1, 2024
885eed0
Fix build
geofflamrock Nov 1, 2024
ef968d3
Use updated function names
geofflamrock Nov 4, 2024
81561fc
Use util function
geofflamrock Nov 4, 2024
407dcb2
Re-enable some runbook run tests
geofflamrock Nov 13, 2024
9fb32c9
Re-enable some of the runbook run tests
geofflamrock Nov 14, 2024
7010659
Put the default branch to the top of the list
geofflamrock Nov 14, 2024
42c3f46
Add support for listing Git runbooks
geofflamrock Nov 17, 2024
19dceb8
Merge remote-tracking branch 'origin/geoffl-run-runbook-tests' into g…
geofflamrock Nov 18, 2024
e8329cc
Add Git runbook run tests
geofflamrock Nov 18, 2024
9b091a4
Merge branch 'geoffl-git-runbooks-part-2' into geoffl-git-runbooks-list
geofflamrock Nov 18, 2024
1399fe3
Merge branch 'main' into geoffl-git-runbooks-part-1
geofflamrock Nov 19, 2024
6fb1594
Merge branch 'geoffl-git-runbooks-part-1' into geoffl-git-runbooks-pa…
geofflamrock Nov 19, 2024
bf6d488
Merge branch 'geoffl-git-runbooks-part-2' into geoffl-git-runbooks-list
geofflamrock Nov 19, 2024
fdee463
Fix comment
geofflamrock Nov 19, 2024
e1bdce5
Merge branch 'geoffl-git-runbooks-part-1' into geoffl-git-runbooks-pa…
geofflamrock Nov 19, 2024
1de9328
Merge branch 'geoffl-git-runbooks-part-2' into geoffl-git-runbooks-list
geofflamrock Nov 19, 2024
c736f83
Actually use the package version and git resource flags
geofflamrock Nov 19, 2024
3cc6bdd
Merge branch 'main' into geoffl-git-runbooks-part-2
geofflamrock Nov 19, 2024
4341162
Merge branch 'geoffl-git-runbooks-part-2' into geoffl-git-runbooks-list
geofflamrock Nov 19, 2024
4ca7b2d
Update to latest go library
geofflamrock Nov 20, 2024
ebb3c63
Merge branch 'main' into geoffl-git-runbooks-part-2
geofflamrock Nov 20, 2024
62dfc63
Merge branch 'geoffl-git-runbooks-part-2' into geoffl-git-runbooks-list
geofflamrock Nov 20, 2024
f508398
Merge branch 'main' into geoffl-git-runbooks-part-2
geofflamrock Nov 22, 2024
57b19aa
Merge branch 'geoffl-git-runbooks-part-2' into geoffl-git-runbooks-list
geofflamrock Nov 22, 2024
78d0dc7
Merge branch 'main' into geoffl-git-runbooks-list
geofflamrock Nov 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 47 additions & 2 deletions pkg/cmd/runbook/list/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@ package list

import (
"errors"
"github.com/OctopusDeploy/cli/pkg/apiclient"
"math"

"github.com/OctopusDeploy/cli/pkg/apiclient"

"github.com/MakeNowJust/heredoc/v2"
"github.com/OctopusDeploy/cli/pkg/constants"
"github.com/OctopusDeploy/cli/pkg/factory"
"github.com/OctopusDeploy/cli/pkg/output"
"github.com/OctopusDeploy/cli/pkg/question/selectors"
"github.com/OctopusDeploy/cli/pkg/util/flag"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/projects"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/runbooks"
"github.com/spf13/cobra"
)
Expand All @@ -20,19 +22,22 @@ const (
FlagProject = "project"
FlagLimit = "limit"
FlagFilter = "filter"
FlagGitRef = "git-ref"
)

type ListFlags struct {
Project *flag.Flag[string]
Limit *flag.Flag[int32]
Filter *flag.Flag[string]
GitRef *flag.Flag[string]
}

func NewListFlags() *ListFlags {
return &ListFlags{
Project: flag.New[string](FlagProject, false),
Limit: flag.New[int32](FlagLimit, false),
Filter: flag.New[string](FlagFilter, false),
GitRef: flag.New[string](FlagGitRef, false),
}
}

Expand Down Expand Up @@ -62,6 +67,7 @@ func NewCmdList(f factory.Factory) *cobra.Command {
flags.StringVarP(&listFlags.Project.Value, listFlags.Project.Name, "p", "", "Name or ID of the project to list runbooks for")
flags.Int32Var(&listFlags.Limit.Value, listFlags.Limit.Name, 0, "limit the maximum number of results that will be returned")
flags.StringVarP(&listFlags.Filter.Value, listFlags.Filter.Name, "q", "", "filter runbooks to match only ones with a name containing the given string")
flags.StringVarP(&listFlags.GitRef.Value, listFlags.GitRef.Name, "", "", "Git reference to list runbooks for e.g. refs/heads/main. Only relevant for config-as-code projects where runbooks are stored in Git.")
return cmd
}

Expand All @@ -80,6 +86,7 @@ func listRun(cmd *cobra.Command, f factory.Factory, flags *ListFlags) error {
limit := flags.Limit.Value
filter := flags.Filter.Value
projectNameOrID := flags.Project.Value
gitReference := flags.GitRef.Value

octopus, err := f.GetSpacedClient(apiclient.NewRequester(cmd))
if err != nil {
Expand Down Expand Up @@ -112,10 +119,48 @@ func listRun(cmd *cobra.Command, f factory.Factory, flags *ListFlags) error {
}
}

var foundRunbooks *resources.Resources[*runbooks.Runbook]
runbooksAreInGit := false

if selectedProject.PersistenceSettings.Type() == projects.PersistenceSettingsTypeVersionControlled {
runbooksAreInGit = selectedProject.PersistenceSettings.(projects.GitPersistenceSettings).RunbooksAreInGit()
}

if limit <= 0 {
limit = math.MaxInt32
}
foundRunbooks, err := runbooks.List(octopus, f.GetCurrentSpace().ID, selectedProject.ID, filter, int(limit))

if runbooksAreInGit {
if f.IsPromptEnabled() {
if gitReference == "" { // we need a git ref; ask for one
gitRef, err := selectors.GitReference("Select the Git reference to list runbooks for", octopus, f.Ask, selectedProject)
if err != nil {
return err
}
gitReference = gitRef.CanonicalName // e.g /refs/heads/main
} else {
if !constants.IsProgrammaticOutputFormat(outputFormat) {
cmd.Printf("Git reference %s\n", output.Cyan(gitReference))
}
}
} else {
if gitReference == "" {
return errors.New("git reference must be specified")
}
}

foundRunbooks, err = runbooks.ListGitRunbooks(octopus, f.GetCurrentSpace().ID, selectedProject.ID, gitReference, filter, int(limit))

if err != nil {
return err
}
} else {
foundRunbooks, err = runbooks.List(octopus, f.GetCurrentSpace().ID, selectedProject.ID, filter, int(limit))

if err != nil {
return err
}
}

return output.PrintArray(foundRunbooks.Items, cmd, output.Mappers[*runbooks.Runbook]{
Json: func(item *runbooks.Runbook) any {
Expand Down
Loading