@@ -3,10 +3,12 @@ package forgejo
33import (
44 "context"
55 "fmt"
6+ "io"
67 "log/slog"
78 "os/exec"
89 "strings"
910 "testing"
11+ "time"
1012
1113 "codeberg.org/mvdkleijn/forgejo-sdk/forgejo/v2"
1214 "github.com/go-git/go-git/v5/plumbing/transport"
@@ -143,12 +145,40 @@ func (f *TestForge) ListOpenPRs(t *testing.T, repo *e2e.Repository) ([]*git.Pull
143145func (f * TestForge ) MergePR (t * testing.T , repo * e2e.Repository , pr * git.PullRequest ) error {
144146 t .Helper ()
145147
146- ok , _ , err := f .client .MergePullRequest (f .username , repo .Name , pr .ID , forgejo.MergePullRequestOption {Style : forgejo .MergeStyleSquash })
148+ // Wait for the PR to become mergable
149+ retries := 10
150+ sleep := 1 * time .Second
151+
152+ var fPR * forgejo.PullRequest
153+ var err error
154+ for range retries {
155+ fPR , _ , err = f .client .GetPullRequest (f .username , repo .Name , pr .ID )
156+ if err != nil {
157+ t .Logf ("sleeping, error while checking pr mergeable status: %v" , err )
158+ time .Sleep (sleep )
159+ continue
160+ }
161+
162+ if ! fPR .Mergeable {
163+ t .Log ("sleeping, pr not marked as mergeable yet" )
164+ time .Sleep (sleep )
165+ continue
166+ }
167+
168+ break
169+ }
170+
171+ if ! fPR .Mergeable {
172+ return fmt .Errorf ("pull request not marked as mergable by forgejo after retries" )
173+ }
174+
175+ ok , resp , err := f .client .MergePullRequest (f .username , repo .Name , pr .ID , forgejo.MergePullRequestOption {Style : forgejo .MergeStyleSquash })
147176 if err != nil {
148177 return err
149178 }
150179 if ! ok {
151- return fmt .Errorf ("merging pull request #%d failed" , pr .ID )
180+ respBody , _ := io .ReadAll (resp .Body )
181+ return fmt .Errorf ("merging pull request #%d failed: %v" , pr .ID , string (respBody ))
152182 }
153183
154184 return nil
0 commit comments