|
9 | 9 | "fmt"
|
10 | 10 | "net/url"
|
11 | 11 | "strconv"
|
| 12 | + "strings" |
12 | 13 |
|
13 | 14 | "github.com/drone/go-scm/scm"
|
14 | 15 | )
|
@@ -209,6 +210,10 @@ func (s *repositoryService) CreateHook(ctx context.Context, repo string, input *
|
209 | 210 | )
|
210 | 211 | out := new(hook)
|
211 | 212 | res, err := s.client.do(ctx, "POST", path, in, out)
|
| 213 | + if err != nil && isUnknownHookEvent(err) { |
| 214 | + downgradeHookInput(in) |
| 215 | + res, err = s.client.do(ctx, "POST", path, in, out) |
| 216 | + } |
212 | 217 | return convertHook(out), res, err
|
213 | 218 | }
|
214 | 219 |
|
@@ -246,6 +251,10 @@ func (s *repositoryService) UpdateHook(ctx context.Context, repo, id string, inp
|
246 | 251 | )
|
247 | 252 | out := new(hook)
|
248 | 253 | res, err := s.client.do(ctx, "PUT", path, in, out)
|
| 254 | + if err != nil && isUnknownHookEvent(err) { |
| 255 | + downgradeHookInput(in) |
| 256 | + res, err = s.client.do(ctx, "PUT", path, in, out) |
| 257 | + } |
249 | 258 | return convertHook(out), res, err
|
250 | 259 | }
|
251 | 260 |
|
@@ -345,6 +354,20 @@ func convertFromHookEvents(from scm.HookEvents) []string {
|
345 | 354 | return events
|
346 | 355 | }
|
347 | 356 |
|
| 357 | +func isUnknownHookEvent(err error) bool { |
| 358 | + return strings.Contains(err.Error(), "pr:from_ref_updated is unknown") |
| 359 | +} |
| 360 | + |
| 361 | +func downgradeHookInput(in *hookInput) { |
| 362 | + var events []string |
| 363 | + for _, event := range in.Events { |
| 364 | + if event != "pr:from_ref_updated" { |
| 365 | + events = append(events, event) |
| 366 | + } |
| 367 | + } |
| 368 | + in.Events = events |
| 369 | +} |
| 370 | + |
348 | 371 | func convertFromState(from scm.State) string {
|
349 | 372 | switch from {
|
350 | 373 | case scm.StatePending, scm.StateRunning:
|
|
0 commit comments