Skip to content

Commit

Permalink
Merge pull request #489 from jenkins-x-plugins/gc_drafts
Browse files Browse the repository at this point in the history
feat: support destroying previews for draft PRs as well
  • Loading branch information
jenkins-x-bot committed May 28, 2024
2 parents 6b4a3b7 + 1b1e1ea commit 5fcab75
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 18 deletions.
2 changes: 1 addition & 1 deletion charts/jx-preview/templates/gc-jobs-cj.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ spec:
- command:
- /bin/sh
- -c
- jx gitops git setup --namespace {{ .Release.Namespace }} --secret tekton-git --git-provider {{ .Values.jxRequirements.cluster.gitServer | default "https://gitlab.com" }} && jx preview gc
- jx gitops git setup --namespace {{ .Release.Namespace }} --secret tekton-git --git-provider {{ .Values.jxRequirements.cluster.gitServer | default "https://gitlab.com" }} && jx preview gc {{ .Values.gcJobs.extraArgs }}
env:
- name: XDG_CONFIG_HOME
value: /home
Expand Down
3 changes: 3 additions & 0 deletions charts/jx-preview/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ gcJobs:
# gcJobs.concurrencyPolicy -- Drives the job's concurrency policy
concurrencyPolicy: Forbid

# Extra arguments to the jx preview gc command
extraArgs: ""


jxRequirements:
cluster:
Expand Down
14 changes: 6 additions & 8 deletions pkg/cmd/gc/gc.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package gc
import (
"context"
"fmt"
"strings"

"github.com/jenkins-x-plugins/jx-preview/pkg/cmd/destroy"
"github.com/jenkins-x-plugins/jx-preview/pkg/previews"
Expand All @@ -24,7 +23,8 @@ import (
type Options struct {
destroy.Options

Deleted []string
Deleted []string
DestroyDrafts bool
}

var (
Expand All @@ -42,7 +42,6 @@ var (
`)
)

// NewCmd s a command object for the "step" command
func NewCmdGCPreviews() (*cobra.Command, *Options) {
options := &Options{}

Expand All @@ -56,6 +55,8 @@ func NewCmdGCPreviews() (*cobra.Command, *Options) {
helper.CheckErr(err)
},
}
cmd.Flags().BoolVarP(&options.DestroyDrafts, "gc-drafts", "", false, "Also garbage collect drafts")

return cmd, options
}

Expand Down Expand Up @@ -125,10 +126,7 @@ func (o *Options) Run() error {
return errors.Wrapf(err, "failed to query PullRequest %s", prLink)
}

lowerState := strings.ToLower(pullRequest.State)

if strings.HasPrefix(lowerState, "clos") || strings.HasPrefix(lowerState, "merged") || strings.HasPrefix(lowerState, "superseded") || strings.HasPrefix(lowerState, "declined") {

if pullRequest.Closed || pullRequest.Merged || (o.DestroyDrafts && pullRequest.Draft && !scmhelpers.ContainsLabel(pullRequest.Labels, "ok-to-test")) {
err = o.Destroy(name)
if err != nil {
return fmt.Errorf("failed to destroy preview environment %s: %v", name, err)
Expand All @@ -138,7 +136,7 @@ func (o *Options) Run() error {
}
}
if len(o.Deleted) == 0 {
log.Logger().Debug("no preview environments found")
log.Logger().Debug("no preview environments to garbage collect where found")
return nil
}
return nil
Expand Down
42 changes: 33 additions & 9 deletions pkg/cmd/gc/gc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/jenkins-x-plugins/jx-preview/pkg/client/clientset/versioned/fake"
"github.com/jenkins-x-plugins/jx-preview/pkg/cmd/gc"
"github.com/jenkins-x-plugins/jx-preview/pkg/previews/fakepreviews"
"github.com/jenkins-x/go-scm/scm"
fakescm "github.com/jenkins-x/go-scm/scm/driver/fake"
jxfake "github.com/jenkins-x/jx-api/v4/pkg/client/clientset/versioned/fake"
"github.com/jenkins-x/jx-helpers/v3/pkg/cmdrunner/fakerunner"
Expand All @@ -26,10 +27,11 @@ func TestPreviewGC(t *testing.T) {
preview1, pr1 := fakepreviews.CreateTestPreviewAndPullRequest(fakeScmData, ns, "myower", "myrepo", 2)
preview2, _ := fakepreviews.CreateTestPreviewAndPullRequest(fakeScmData, ns, "myower", "myrepo", 3)
preview3, pr3 := fakepreviews.CreateTestPreviewAndPullRequest(fakeScmData, ns, "myower", "another", 1)
preview4, pr4 := fakepreviews.CreateTestPreviewAndPullRequest(fakeScmData, ns, "myower", "athird", 4)

fakeScmData.CurrentUser.Login = gitUser

previewClient := fake.NewSimpleClientset(preview1, preview2, preview3)
previewClient := fake.NewSimpleClientset(preview1, preview2, preview3, preview4)
kubeClient := fakekube.NewSimpleClientset()

devEnv := jxenv.CreateDefaultDevEnvironment(ns)
Expand All @@ -41,17 +43,16 @@ func TestPreviewGC(t *testing.T) {
testCases := []struct {
name string
expectedDeleted []string
initialise func() error
initialise func(o *gc.Options) error
}{
{
name: "startup",
},
{
name: "gc1",
expectedDeleted: []string{preview1.Name},
initialise: func() error {
pr1.State = "Closed"
t.Logf("modified state of PR %s to: %s", pr1.Link, pr1.State)
initialise: func(o *gc.Options) error {
pr1.Closed = true
return nil
},
},
Expand All @@ -61,9 +62,32 @@ func TestPreviewGC(t *testing.T) {
{
name: "gc3",
expectedDeleted: []string{preview3.Name},
initialise: func() error {
pr3.State = "Merged"
t.Logf("modified state of PR %s to: %s", pr3.Link, pr3.State)
initialise: func(o *gc.Options) error {
pr3.Merged = true
return nil
},
},
{
name: "gc4",
initialise: func(o *gc.Options) error {
pr4.Draft = true
return nil
},
},
{
name: "gc5",
initialise: func(o *gc.Options) error {
o.DestroyDrafts = true
pr4.Labels = []*scm.Label{{Name: "ok-to-test"}}
return nil
},
},
{
name: "gc6",
expectedDeleted: []string{preview4.Name},
initialise: func(o *gc.Options) error {
o.DestroyDrafts = true
pr4.Labels = nil
return nil
},
},
Expand All @@ -83,7 +107,7 @@ func TestPreviewGC(t *testing.T) {
o.CommandRunner = runner.Run

if tc.initialise != nil {
err := tc.initialise()
err := tc.initialise(o)
require.NoError(t, err, "failed to initialise test %s", tc.name)
}
t.Logf("running GC for test: %s\n", tc.name)
Expand Down

0 comments on commit 5fcab75

Please sign in to comment.