diff --git a/internal/pipe/brew/brew.go b/internal/pipe/brew/brew.go index 9545a569375..5e722dafa01 100644 --- a/internal/pipe/brew/brew.go +++ b/internal/pipe/brew/brew.go @@ -171,9 +171,27 @@ func doPublish(ctx *context.Context, formula *artifact.Artifact, cl client.Clien return err } + base := client.Repo{ + Name: brew.Repository.PullRequest.Base.Name, + Owner: brew.Repository.PullRequest.Base.Owner, + Branch: brew.Repository.PullRequest.Base.Branch, + } + + // try to sync branch + fscli, ok := cl.(client.ForkSyncer) + if ok && brew.Repository.PullRequest.Enabled { + if err := fscli.SyncFork(ctx, repo, base); err != nil { + log.WithError(err).Warn("could not sync fork") + } + } + + if err := cl.CreateFile(ctx, author, repo, content, gpath, msg); err != nil { + return err + } + if !brew.Repository.PullRequest.Enabled { log.Debug("brews.pull_request disabled") - return cl.CreateFile(ctx, author, repo, content, gpath, msg) + return nil } log.Info("brews.pull_request enabled, creating a PR") @@ -182,15 +200,7 @@ func doPublish(ctx *context.Context, formula *artifact.Artifact, cl client.Clien return fmt.Errorf("client does not support pull requests") } - if err := cl.CreateFile(ctx, author, repo, content, gpath, msg); err != nil { - return err - } - - return pcl.OpenPullRequest(ctx, client.Repo{ - Name: brew.Repository.PullRequest.Base.Name, - Owner: brew.Repository.PullRequest.Base.Owner, - Branch: brew.Repository.PullRequest.Base.Branch, - }, repo, msg, brew.Repository.PullRequest.Draft) + return pcl.OpenPullRequest(ctx, base, repo, msg, brew.Repository.PullRequest.Draft) } func doRun(ctx *context.Context, brew config.Homebrew, cl client.ReleaseURLTemplater) error { diff --git a/internal/pipe/brew/brew_test.go b/internal/pipe/brew/brew_test.go index e3f0c7ac302..cf86f78f131 100644 --- a/internal/pipe/brew/brew_test.go +++ b/internal/pipe/brew/brew_test.go @@ -1107,6 +1107,7 @@ func TestRunPipePullRequest(t *testing.T) { require.NoError(t, publishAll(ctx, client)) require.True(t, client.CreatedFile) require.True(t, client.OpenedPullRequest) + require.True(t, client.SyncedFork) golden.RequireEqualRb(t, []byte(client.Content)) }