-
Notifications
You must be signed in to change notification settings - Fork 83
/
cleanups.go
51 lines (43 loc) · 1.8 KB
/
cleanups.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package kubeinteraction
import (
"context"
"fmt"
"github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/keys"
"github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
psort "github.com/openshift-pipelines/pipelines-as-code/pkg/sort"
"github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
"go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"knative.dev/pkg/apis"
)
func (k Interaction) CleanupPipelines(ctx context.Context, logger *zap.SugaredLogger, repo *v1alpha1.Repository, pr *v1beta1.PipelineRun, maxKeep int) error {
if _, ok := pr.GetLabels()[keys.OriginalPRName]; !ok {
return fmt.Errorf("generate pipelienrun should have had the %s label for selection set but we could not find"+
" it",
keys.OriginalPRName)
}
// Select PR by repository and by its true pipelineRun name (not auto generated one)
labelSelector := fmt.Sprintf("%s=%s,%s=%s",
keys.Repository, repo.GetName(), keys.OriginalPRName, pr.GetLabels()[keys.OriginalPRName])
logger.Infof("selecting pipelineruns by labels \"%s\" for deletion", labelSelector)
pruns, err := k.Run.Clients.Tekton.TektonV1beta1().PipelineRuns(repo.GetNamespace()).List(ctx,
metav1.ListOptions{LabelSelector: labelSelector})
if err != nil {
return err
}
for c, prun := range psort.PipelineRunSortByCompletionTime(pruns.Items) {
if prun.GetStatusCondition().GetCondition(apis.ConditionSucceeded).GetReason() == "Running" {
logger.Infof("skipping %s since currently running", prun.GetName())
continue
}
if c >= maxKeep {
logger.Infof("cleaning old PipelineRun: %s", prun.GetName())
err := k.Run.Clients.Tekton.TektonV1beta1().PipelineRuns(repo.GetNamespace()).Delete(
ctx, prun.GetName(), metav1.DeleteOptions{})
if err != nil {
return err
}
}
}
return nil
}