Skip to content

Commit

Permalink
feat: ignore GitLab Draft MRs
Browse files Browse the repository at this point in the history
  • Loading branch information
becjon committed Aug 24, 2022
1 parent 71233ef commit f04e172
Show file tree
Hide file tree
Showing 3 changed files with 209 additions and 8 deletions.
24 changes: 16 additions & 8 deletions server/events/event_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -617,15 +617,23 @@ func (e *EventParser) ParseGitlabMergeRequestEvent(event gitlab.MergeEvent) (pul
BaseRepo: baseRepo,
}

switch event.ObjectAttributes.Action {
case "open":
eventType = models.OpenedPullEvent
case "update":
eventType = e.ParseGitlabMergeRequestUpdateEvent(event)
case "merge", "close":
eventType = models.ClosedPullEvent
default:
// If it's a draft PR we ignore it for auto-planning if configured to do so
// however it's still possible for users to run plan on it manually via a
// comment so if any draft PR is closed we still need to check if we need
// to delete its locks.
if event.ObjectAttributes.WorkInProgress && event.ObjectAttributes.Action != "close" && !e.AllowDraftPRs {
eventType = models.OtherPullEvent
} else {
switch event.ObjectAttributes.Action {
case "open":
eventType = models.OpenedPullEvent
case "update":
eventType = e.ParseGitlabMergeRequestUpdateEvent(event)
case "merge", "close":
eventType = models.ClosedPullEvent
default:
eventType = models.OtherPullEvent
}
}

user = models.User{
Expand Down
19 changes: 19 additions & 0 deletions server/events/event_parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,25 @@ func TestParseGitlabMergeEvent(t *testing.T) {
Equals(t, models.ClosedPullState, pull.State)
}

func TestParseGitlabMergeEventFromDraft(t *testing.T) {
path := filepath.Join("testdata", "gitlab-merge-request-event-draft.json")
bytes, err := os.ReadFile(path)
Ok(t, err)
var event *gitlab.MergeEvent
err = json.Unmarshal(bytes, &event)
Ok(t, err)

_, evType, _, _, _, err := parser.ParseGitlabMergeRequestEvent(*event)
Ok(t, err)
Equals(t, models.OtherPullEvent, evType)

parser.AllowDraftPRs = true
defer func() { parser.AllowDraftPRs = false }()
_, evType, _, _, _, err = parser.ParseGitlabMergeRequestEvent(*event)
Ok(t, err)
Equals(t, models.OpenedPullEvent, evType)
}

// Should be able to parse a merge event from a repo that is in a subgroup,
// i.e. instead of under an owner/repo it's under an owner/group/subgroup/repo.
func TestParseGitlabMergeEvent_Subgroup(t *testing.T) {
Expand Down
174 changes: 174 additions & 0 deletions server/events/testdata/gitlab-merge-request-event-draft.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
{
"object_kind": "merge_request",
"event_type": "merge_request",
"user": {
"name": "Luke Kysow",
"username": "lkysow",
"avatar_url": "https://secure.gravatar.com/avatar/25fd57e71590fe28736624ff24d41c5f?s=80&d=identicon"
},
"project": {
"id": 4580910,
"name": "atlantis-example",
"description": "",
"web_url": "https://gitlab.com/lkysow/atlantis-example",
"avatar_url": null,
"git_ssh_url": "git@gitlab.com:lkysow/atlantis-example.git",
"git_http_url": "https://gitlab.com/lkysow/atlantis-example.git",
"namespace": "lkysow",
"visibility_level": 20,
"path_with_namespace": "lkysow/atlantis-example",
"default_branch": "master",
"ci_config_path": null,
"homepage": "https://gitlab.com/lkysow/atlantis-example",
"url": "git@gitlab.com:lkysow/atlantis-example.git",
"ssh_url": "git@gitlab.com:lkysow/atlantis-example.git",
"http_url": "https://gitlab.com/lkysow/atlantis-example.git"
},
"object_attributes": {
"assignee_id": null,
"author_id": 1755902,
"created_at": "2018-12-12 16:15:21 UTC",
"description": "",
"head_pipeline_id": null,
"id": 20809239,
"iid": 12,
"last_edited_at": null,
"last_edited_by_id": null,
"merge_commit_sha": null,
"merge_error": null,
"merge_params": {
"force_remove_source_branch": false
},
"merge_status": "unchecked",
"merge_user_id": null,
"merge_when_pipeline_succeeds": false,
"milestone_id": null,
"source_branch": "patch-1",
"source_project_id": 4580910,
"state": "opened",
"target_branch": "master",
"target_project_id": 4580910,
"time_estimate": 0,
"title": "Update main.tf",
"updated_at": "2018-12-12 16:15:21 UTC",
"updated_by_id": null,
"url": "https://gitlab.com/lkysow/atlantis-example/merge_requests/12",
"source": {
"id": 4580910,
"name": "atlantis-example",
"description": "",
"web_url": "https://gitlab.com/sourceorg/atlantis-example",
"avatar_url": null,
"git_ssh_url": "git@gitlab.com:sourceorg/atlantis-example.git",
"git_http_url": "https://gitlab.com/sourceorg/atlantis-example.git",
"namespace": "sourceorg",
"visibility_level": 20,
"path_with_namespace": "sourceorg/atlantis-example",
"default_branch": "master",
"ci_config_path": null,
"homepage": "https://gitlab.com/sourceorg/atlantis-example",
"url": "git@gitlab.com:sourceorg/atlantis-example.git",
"ssh_url": "git@gitlab.com:sourceorg/atlantis-example.git",
"http_url": "https://gitlab.com/sourceorg/atlantis-example.git"
},
"target": {
"id": 4580910,
"name": "atlantis-example",
"description": "",
"web_url": "https://gitlab.com/lkysow/atlantis-example",
"avatar_url": null,
"git_ssh_url": "git@gitlab.com:lkysow/atlantis-example.git",
"git_http_url": "https://gitlab.com/lkysow/atlantis-example.git",
"namespace": "lkysow",
"visibility_level": 20,
"path_with_namespace": "lkysow/atlantis-example",
"default_branch": "master",
"ci_config_path": null,
"homepage": "https://gitlab.com/lkysow/atlantis-example",
"url": "git@gitlab.com:lkysow/atlantis-example.git",
"ssh_url": "git@gitlab.com:lkysow/atlantis-example.git",
"http_url": "https://gitlab.com/lkysow/atlantis-example.git"
},
"last_commit": {
"id": "d2eae324ca26242abca45d7b49d582cddb2a4f15",
"message": "Update main.tf",
"timestamp": "2018-12-12T16:15:10Z",
"url": "https://gitlab.com/lkysow/atlantis-example/commit/d2eae324ca26242abca45d7b49d582cddb2a4f15",
"author": {
"name": "Luke Kysow",
"email": "lkysow@gmail.com"
}
},
"work_in_progress": true,
"total_time_spent": 0,
"human_total_time_spent": null,
"human_time_estimate": null,
"action": "open"
},
"labels": [

],
"changes": {
"author_id": {
"previous": null,
"current": 1755902
},
"created_at": {
"previous": null,
"current": "2018-12-12 16:15:21 UTC"
},
"description": {
"previous": null,
"current": ""
},
"id": {
"previous": null,
"current": 20809239
},
"iid": {
"previous": null,
"current": 12
},
"merge_params": {
"previous": {
},
"current": {
"force_remove_source_branch": false
}
},
"source_branch": {
"previous": null,
"current": "patch-1"
},
"source_project_id": {
"previous": null,
"current": 4580910
},
"target_branch": {
"previous": null,
"current": "master"
},
"target_project_id": {
"previous": null,
"current": 4580910
},
"title": {
"previous": null,
"current": "Update main.tf"
},
"updated_at": {
"previous": null,
"current": "2018-12-12 16:15:21 UTC"
},
"total_time_spent": {
"previous": null,
"current": 0
}
},
"repository": {
"name": "atlantis-example",
"url": "git@gitlab.com:lkysow/atlantis-example.git",
"description": "",
"homepage": "https://gitlab.com/lkysow/atlantis-example"
}
}

0 comments on commit f04e172

Please sign in to comment.