From 2e77e7a61cc759b4e7a585f533522095774fda6f Mon Sep 17 00:00:00 2001 From: Sebastian Krebs Date: Thu, 27 Apr 2023 14:28:37 +0200 Subject: [PATCH 1/6] feat: add dry-run to ci list --- commands/ci/delete/delete.go | 42 +++++++++++++++++-------------- commands/ci/delete/delete_test.go | 3 --- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/commands/ci/delete/delete.go b/commands/ci/delete/delete.go index 8c1020d62..fdea3b841 100644 --- a/commands/ci/delete/delete.go +++ b/commands/ci/delete/delete.go @@ -7,12 +7,10 @@ import ( "github.com/xanzy/go-gitlab" - "gitlab.com/gitlab-org/cli/api" - "gitlab.com/gitlab-org/cli/commands/cmdutils" - "gitlab.com/gitlab-org/cli/pkg/utils" - "github.com/MakeNowJust/heredoc" "github.com/spf13/cobra" + "gitlab.com/gitlab-org/cli/api" + "gitlab.com/gitlab-org/cli/commands/cmdutils" ) func NewCmdDelete(f *cmdutils.Factory) *cobra.Command { @@ -47,42 +45,48 @@ func NewCmdDelete(f *cmdutils.Factory) *cobra.Command { return err } + var pipelineIDs []int + if m, _ := cmd.Flags().GetString("status"); m != "" { - l := &gitlab.ListProjectPipelinesOptions{} - l.Status = gitlab.BuildState(gitlab.BuildStateValue(m)) - pipes, err := api.ListProjectPipelines(apiClient, repo.FullName(), l) + pipes, err := api.ListProjectPipelines(apiClient, repo.FullName(), &gitlab.ListProjectPipelinesOptions{ + Status: gitlab.BuildState(gitlab.BuildStateValue(m)), + }) if err != nil { return err } + for _, item := range pipes { - err := api.DeletePipeline(apiClient, repo.FullName(), item.ID) + pipelineIDs = append(pipelineIDs, item.ID) + } + } else { + for _, stringID := range strings.Split(strings.Trim(args[0], "[] "), ",") { + id, err := strconv.Atoi(stringID) if err != nil { return err } - - fmt.Fprintln(f.IO.StdOut, c.RedCheck(), "Pipeline #"+strconv.Itoa(item.ID)+" deleted successfully") + pipelineIDs = append(pipelineIDs, id) } + } - } else { - pipelineID := args[0] - - arrIds := strings.Split(strings.Trim(pipelineID, "[] "), ",") - for _, i2 := range arrIds { - fmt.Fprintln(f.IO.StdOut, "Deleting pipeline #"+i2) - err := api.DeletePipeline(apiClient, repo.FullName(), utils.StringToInt(i2)) + for _, id := range pipelineIDs { + if dryRun, _ := cmd.Flags().GetBool("dry-run"); dryRun { + fmt.Fprintf(f.IO.StdOut, "%s Pipeline #%d will be deleted\n", c.DotWarnIcon(), id) + } else { + err := api.DeletePipeline(apiClient, repo.FullName(), id) if err != nil { return err } - fmt.Fprintln(f.IO.StdOut, c.RedCheck(), "Pipeline #"+i2+" deleted successfully") + fmt.Fprintf(f.IO.StdOut, "%s Pipeline #%d deleted successfully\n", c.RedCheck(), id) } - fmt.Println() } + fmt.Println() return nil }, } + pipelineDeleteCmd.Flags().BoolP("dry-run", "", false, "simulate process, but do not delete anything") pipelineDeleteCmd.Flags().StringP("status", "s", "", "delete pipelines by status: {running|pending|success|failed|canceled|skipped|created|manual}") return pipelineDeleteCmd diff --git a/commands/ci/delete/delete_test.go b/commands/ci/delete/delete_test.go index 169c5626d..e76595bf2 100644 --- a/commands/ci/delete/delete_test.go +++ b/commands/ci/delete/delete_test.go @@ -44,7 +44,6 @@ func TestCiDelete(t *testing.T) { out := output.String() assert.Equal(t, heredoc.Doc(` - Deleting pipeline #11111111 ✓ Pipeline #11111111 deleted successfully `), out) assert.Empty(t, output.Stderr()) @@ -150,9 +149,7 @@ func TestCiDeleteMultiple(t *testing.T) { out := output.String() assert.Equal(t, heredoc.Doc(` - Deleting pipeline #11111111 ✓ Pipeline #11111111 deleted successfully - Deleting pipeline #22222222 ✓ Pipeline #22222222 deleted successfully `), out) assert.Empty(t, output.Stderr()) -- GitLab From 870ec55c9201d1ffcbfc5209618e0e0df84de9cd Mon Sep 17 00:00:00 2001 From: Sebastian Krebs Date: Thu, 27 Apr 2023 14:46:01 +0200 Subject: [PATCH 2/6] fix: update docs --- docs/source/ci/delete.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/ci/delete.md b/docs/source/ci/delete.md index bd5e8d08a..3d7a3c64e 100644 --- a/docs/source/ci/delete.md +++ b/docs/source/ci/delete.md @@ -29,6 +29,7 @@ glab ci delete --status=failed ## Options ```plaintext + --dry-run simulate process, but do not delete anything -s, --status string delete pipelines by status: {running|pending|success|failed|canceled|skipped|created|manual} ``` -- GitLab From 7797f2386844c9992bdf95c78c5d525702d00ad5 Mon Sep 17 00:00:00 2001 From: Sebastian Krebs Date: Wed, 3 May 2023 11:44:31 +0200 Subject: [PATCH 3/6] feat: add test for ci-delete --dry-run --- commands/ci/delete/delete_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/commands/ci/delete/delete_test.go b/commands/ci/delete/delete_test.go index e76595bf2..1d4bf842b 100644 --- a/commands/ci/delete/delete_test.go +++ b/commands/ci/delete/delete_test.go @@ -154,3 +154,22 @@ func TestCiDeleteMultiple(t *testing.T) { `), out) assert.Empty(t, output.Stderr()) } + +func TestCiDryRunDeleteNothing(t *testing.T) { + fakeHTTP := httpmock.New() + defer fakeHTTP.Verify(t) + + pipelineId := "--dry-run 11111111,22222222" + output, err := runCommand(fakeHTTP, pipelineId) + if err != nil { + t.Errorf("error running command `ci delete %s`: %v", pipelineId, err) + } + + out := output.String() + + assert.Equal(t, heredoc.Doc(` + • Pipeline #11111111 will be deleted + • Pipeline #22222222 will be deleted + `), out) + assert.Empty(t, output.Stderr()) +} -- GitLab From fb0f2b0eaa20f14b0ef711030cf7d7e05aee392b Mon Sep 17 00:00:00 2001 From: Sebastian Krebs Date: Wed, 3 May 2023 11:47:09 +0200 Subject: [PATCH 4/6] feat: reordered imports, so they match the original ones again --- commands/ci/delete/delete.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/commands/ci/delete/delete.go b/commands/ci/delete/delete.go index fdea3b841..8a0b824fd 100644 --- a/commands/ci/delete/delete.go +++ b/commands/ci/delete/delete.go @@ -7,10 +7,11 @@ import ( "github.com/xanzy/go-gitlab" - "github.com/MakeNowJust/heredoc" - "github.com/spf13/cobra" "gitlab.com/gitlab-org/cli/api" "gitlab.com/gitlab-org/cli/commands/cmdutils" + + "github.com/MakeNowJust/heredoc" + "github.com/spf13/cobra" ) func NewCmdDelete(f *cmdutils.Factory) *cobra.Command { -- GitLab From 8134fe376af35a31c8fcf99c11cf493caea687f4 Mon Sep 17 00:00:00 2001 From: Jay McCure Date: Thu, 4 May 2023 07:17:28 +0000 Subject: [PATCH 5/6] Apply 1 suggestion(s) to 1 file(s) --- commands/ci/delete/delete_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/commands/ci/delete/delete_test.go b/commands/ci/delete/delete_test.go index 1d4bf842b..f529b0cbc 100644 --- a/commands/ci/delete/delete_test.go +++ b/commands/ci/delete/delete_test.go @@ -159,10 +159,10 @@ func TestCiDryRunDeleteNothing(t *testing.T) { fakeHTTP := httpmock.New() defer fakeHTTP.Verify(t) - pipelineId := "--dry-run 11111111,22222222" - output, err := runCommand(fakeHTTP, pipelineId) + args := "--dry-run 11111111,22222222" + output, err := runCommand(fakeHTTP, args) if err != nil { - t.Errorf("error running command `ci delete %s`: %v", pipelineId, err) + t.Errorf("error running command `ci delete %s`: %v", args, err) } out := output.String() -- GitLab From 83bc5f5c57cebcaa0c46a08b403dcaf9522ed31c Mon Sep 17 00:00:00 2001 From: Sebastian Krebs Date: Thu, 4 May 2023 09:21:49 +0200 Subject: [PATCH 6/6] feat: add test for --dry-run with filter --- commands/ci/delete/delete_test.go | 48 +++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/commands/ci/delete/delete_test.go b/commands/ci/delete/delete_test.go index f529b0cbc..f4302d550 100644 --- a/commands/ci/delete/delete_test.go +++ b/commands/ci/delete/delete_test.go @@ -173,3 +173,51 @@ func TestCiDryRunDeleteNothing(t *testing.T) { `), out) assert.Empty(t, output.Stderr()) } + +func TestCiDeletedDryRunWithFilterDoesNotDelete(t *testing.T) { + fakeHTTP := httpmock.New() + fakeHTTP.MatchURL = httpmock.PathAndQuerystring + defer fakeHTTP.Verify(t) + + fakeHTTP.RegisterResponder(http.MethodGet, "/api/v4/projects/OWNER/REPO/pipelines?status=success", + httpmock.NewStringResponse(http.StatusOK, ` + [ + { + "id": 11111111, + "iid": 3, + "project_id": 5, + "sha": "c366255c71600e17519e802850ddcf7105d3cf66", + "ref": "refs/merge-requests/1107/merge", + "status": "success", + "source": "merge_request_event", + "created_at": "2020-12-01T01:15:50.559Z", + "updated_at": "2020-12-01T01:36:41.737Z", + "web_url": "https://gitlab.com/OWNER/REPO/-/pipelines/710046436" + }, + { + "id": 22222222, + "iid": 4, + "project_id": 5, + "sha": "c9a7c0d9351cd1e71d1c2ad8277f3bc7e3c47d1f", + "ref": "main", + "status": "success", + "source": "push", + "created_at": "2020-11-30T18:20:47.571Z", + "updated_at": "2020-11-30T18:39:40.092Z", + "web_url": "https://gitlab.com/OWNER/REPO/-/pipelines/709793838" + } + ] + `)) + + args := "--dry-run --status=success" + output, err := runCommand(fakeHTTP, args) + require.NoError(t, err) + + out := output.String() + + assert.Equal(t, heredoc.Doc(` + • Pipeline #11111111 will be deleted + • Pipeline #22222222 will be deleted + `), out) + assert.Empty(t, output.Stderr()) +} -- GitLab