Skip to content

Commit 7380d8f

Browse files
author
Tanmay Sardesai
authored
support skiping a push if one a PR already exists (#310)
helps when some pushes fail from timeouts or internet connectivity
1 parent 9200fda commit 7380d8f

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.0.36
1+
0.0.37

cmd/push.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var pushFlagThrottle string
2121
var pushFlagBodyFile string
2222
var pushFlagLabels []string
2323
var pushFlagDraft bool
24+
var pushFlagPlannedOnly bool
2425

2526
// rate limits the # of git pushes. used to prevent load on CI system
2627
var pushThrottle *time.Ticker
@@ -29,6 +30,7 @@ var prAssignee string
2930
var prBody string
3031
var prLabels []string
3132
var prDraft bool
33+
var prPlannedOnly bool
3234

3335
var pushCmd = &cobra.Command{
3436
Use: "push",
@@ -83,6 +85,12 @@ var pushCmd = &cobra.Command{
8385
}
8486
prDraft = draft
8587

88+
plannedOnly, err := cmd.Flags().GetBool("planned-only")
89+
if err != nil {
90+
log.Fatal(err)
91+
}
92+
prPlannedOnly = plannedOnly
93+
8694
repos, err := whichRepos(cmd)
8795
if err != nil {
8896
log.Fatal(err)
@@ -114,6 +122,18 @@ func pushOneRepo(r lib.Repo, ctx context.Context) error {
114122
return nil
115123
}
116124

125+
// Exit early if already pushed and --planned-only flag is used
126+
if prPlannedOnly {
127+
var pushOutput struct {
128+
push.Output
129+
Error string
130+
}
131+
if loadJSON(outputPath(r.Name, "push"), &pushOutput) == nil && pushOutput.Success {
132+
log.Printf("%s/%s - already pushed (skipping due to --planned-only)", r.Owner, r.Name)
133+
return nil
134+
}
135+
}
136+
117137
// Get previous step's output
118138
var planOutput plan.Output
119139
if loadJSON(outputPath(r.Name, "plan"), &planOutput) != nil || !planOutput.Success {
@@ -165,4 +185,5 @@ func init() {
165185
pushCmd.Flags().StringVarP(&pushFlagBodyFile, "body-file", "b", "", "body of PR")
166186
pushCmd.Flags().StringSliceVarP(&pushFlagLabels, "labels", "l", nil, "labels to attach to PR. for example: `-l 'first label' -l 'second label'`")
167187
pushCmd.Flags().BoolVarP(&pushFlagDraft, "draft", "d", false, "push a draft pull request (only supported for github)")
188+
pushCmd.Flags().BoolVarP(&pushFlagPlannedOnly, "planned-only", "p", false, "only push repositories that are in planned state (skip already pushed)")
168189
}

0 commit comments

Comments
 (0)