parseIssueTrigger parses issue triggers
(tokens []string)
| 324 | |
| 325 | // parseIssueTrigger parses issue triggers |
| 326 | func parseIssueTrigger(tokens []string) (*TriggerIR, error) { |
| 327 | if len(tokens) < 2 { |
| 328 | return nil, errors.New("issue trigger requires an activity type. Expected format: 'issue <type>'. Valid types: opened, edited, closed, reopened, assigned, unassigned, labeled, unlabeled, deleted, transferred. Example: 'issue opened'") |
| 329 | } |
| 330 | |
| 331 | activityType := tokens[1] |
| 332 | |
| 333 | // Map common activity types |
| 334 | validTypes := map[string]struct { |
| 335 | }{ |
| 336 | "opened": {}, |
| 337 | "edited": {}, |
| 338 | "closed": {}, |
| 339 | "reopened": {}, |
| 340 | "assigned": {}, |
| 341 | "unassigned": {}, |
| 342 | "labeled": {}, |
| 343 | "unlabeled": {}, |
| 344 | "deleted": {}, |
| 345 | "transferred": {}, |
| 346 | } |
| 347 | |
| 348 | if !setutil.Contains(validTypes, activityType) { |
| 349 | return nil, fmt.Errorf("invalid issue activity type: '%s'. Valid types: opened, edited, closed, reopened, assigned, unassigned, labeled, unlabeled, deleted, transferred. Example: 'issue opened'", activityType) |
| 350 | } |
| 351 | |
| 352 | ir := &TriggerIR{ |
| 353 | Event: "issues", |
| 354 | Types: []string{activityType}, |
| 355 | AdditionalEvents: map[string]any{ |
| 356 | "workflow_dispatch": nil, |
| 357 | }, |
| 358 | } |
| 359 | |
| 360 | // Check for label filter: "issue opened labeled <label>" |
| 361 | if len(tokens) >= 4 && tokens[2] == "labeled" { |
| 362 | label := strings.Join(tokens[3:], " ") |
| 363 | triggerParserLog.Printf("Parsed issue trigger with label filter: type=%s, label=%s", activityType, label) |
| 364 | ir.Conditions = []string{ |
| 365 | fmt.Sprintf("contains(github.event.issue.labels.*.name, '%s')", label), |
| 366 | } |
| 367 | } else { |
| 368 | triggerParserLog.Printf("Parsed issue trigger: type=%s", activityType) |
| 369 | } |
| 370 | |
| 371 | return ir, nil |
| 372 | } |
| 373 | |
| 374 | // parseDiscussionTrigger parses discussion triggers |
| 375 | func parseDiscussionTrigger(tokens []string) (*TriggerIR, error) { |
no test coverage detected