Count reopening an pull as opening an pull (#5370)

This commit is contained in:
6543 2025-08-05 23:02:36 +02:00 committed by GitHub
parent e9ab04f88b
commit f080070684
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 1614 additions and 10 deletions

View file

@ -0,0 +1,396 @@
{
"action": "reopened",
"number": 1,
"pull_request": {
"id": 701944,
"url": "https://codeberg.org/test_it/test_ci_thing/pulls/1",
"number": 1,
"user": {
"id": 2628,
"login": "6543",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "6543@obermui.de",
"avatar_url": "https://codeberg.org/avatars/09a234c768cb9bca78f6b2f82d6af173",
"html_url": "https://codeberg.org/6543",
"language": "en-US",
"is_admin": false,
"last_login": "2025-08-05T17:04:55+02:00",
"created": "2019-10-12T05:05:49+02:00",
"restricted": false,
"active": true,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "https://mh.obermui.de",
"description": "\u003ca href=\"https://matrix.to/#/@marddl:obermui.de\" rel=\"nofollow\"\u003e\u003cimg src=\"https://codeberg.org/6543/content/raw/branch/main/matrix-logo.png\"\u003e\u003c/a\u003e\r\n\u003ca rel=\"me\" href=\"https://chaos.social/@6543\"\u003eMastodon\u003c/a\u003e",
"visibility": "public",
"followers_count": 46,
"following_count": 33,
"starred_repos_count": 92,
"username": "6543"
},
"title": "Some ned more AAAA",
"body": "",
"labels": [],
"milestone": null,
"assignee": null,
"assignees": null,
"requested_reviewers": [],
"requested_reviewers_teams": [],
"state": "open",
"draft": false,
"is_locked": false,
"comments": 0,
"review_comments": 1,
"additions": 1,
"deletions": 0,
"changed_files": 1,
"html_url": "https://codeberg.org/test_it/test_ci_thing/pulls/1",
"diff_url": "https://codeberg.org/test_it/test_ci_thing/pulls/1.diff",
"patch_url": "https://codeberg.org/test_it/test_ci_thing/pulls/1.patch",
"mergeable": false,
"merged": false,
"merged_at": null,
"merge_commit_sha": null,
"merged_by": null,
"allow_maintainer_edit": false,
"base": {
"label": "main",
"ref": "main",
"sha": "67012991d6c69b1c58378346fca366b864d8d1a1",
"repo_id": 138564,
"repo": {
"id": 138564,
"owner": {
"id": 90470,
"login": "test_it",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
"html_url": "https://codeberg.org/test_it",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2023-04-02T15:13:07+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "",
"description": "the [link](https://stackoverflow.com/questions/4212503/how-can-i-set-the-request-header-for-curl#4212535) us curl-ish",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test_it"
},
"name": "test_ci_thing",
"full_name": "test_it/test_ci_thing",
"description": "",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 34,
"language": "",
"languages_url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing/languages",
"html_url": "https://codeberg.org/test_it/test_ci_thing",
"url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing",
"link": "",
"ssh_url": "ssh://git@codeberg.org/test_it/test_ci_thing.git",
"clone_url": "https://codeberg.org/test_it/test_ci_thing.git",
"original_url": "",
"website": "",
"stars_count": 1,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2023-08-27T03:32:56+02:00",
"updated_at": "2025-07-29T16:45:07+02:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"wiki_branch": "master",
"globally_editable_wiki": false,
"has_pull_requests": true,
"has_projects": true,
"has_releases": true,
"has_packages": true,
"has_actions": false,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": false,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"default_update_style": "merge",
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": []
}
},
"head": {
"label": "6543-patch-1",
"ref": "6543-patch-1",
"sha": "36b5813240a9d2daa29b05046d56a53e18f39a3e",
"repo_id": 138564,
"repo": {
"id": 138564,
"owner": {
"id": 90470,
"login": "test_it",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
"html_url": "https://codeberg.org/test_it",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2023-04-02T15:13:07+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "",
"description": "the [link](https://stackoverflow.com/questions/4212503/how-can-i-set-the-request-header-for-curl#4212535) us curl-ish",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test_it"
},
"name": "test_ci_thing",
"full_name": "test_it/test_ci_thing",
"description": "",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 34,
"language": "",
"languages_url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing/languages",
"html_url": "https://codeberg.org/test_it/test_ci_thing",
"url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing",
"link": "",
"ssh_url": "ssh://git@codeberg.org/test_it/test_ci_thing.git",
"clone_url": "https://codeberg.org/test_it/test_ci_thing.git",
"original_url": "",
"website": "",
"stars_count": 1,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2023-08-27T03:32:56+02:00",
"updated_at": "2025-07-29T16:45:07+02:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"wiki_branch": "master",
"globally_editable_wiki": false,
"has_pull_requests": true,
"has_projects": true,
"has_releases": true,
"has_packages": true,
"has_actions": false,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": false,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"default_update_style": "merge",
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": []
}
},
"merge_base": "67012991d6c69b1c58378346fca366b864d8d1a1",
"due_date": null,
"created_at": "2025-07-29T16:45:09+02:00",
"updated_at": "2025-08-05T17:06:49+02:00",
"closed_at": null,
"pin_order": 0,
"flow": 0
},
"requested_reviewer": null,
"repository": {
"id": 138564,
"owner": {
"id": 90470,
"login": "test_it",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
"html_url": "https://codeberg.org/test_it",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2023-04-02T15:13:07+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "",
"description": "the [link](https://stackoverflow.com/questions/4212503/how-can-i-set-the-request-header-for-curl#4212535) us curl-ish",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test_it"
},
"name": "test_ci_thing",
"full_name": "test_it/test_ci_thing",
"description": "",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 34,
"language": "",
"languages_url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing/languages",
"html_url": "https://codeberg.org/test_it/test_ci_thing",
"url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing",
"link": "",
"ssh_url": "ssh://git@codeberg.org/test_it/test_ci_thing.git",
"clone_url": "https://codeberg.org/test_it/test_ci_thing.git",
"original_url": "",
"website": "",
"stars_count": 1,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2023-08-27T03:32:56+02:00",
"updated_at": "2025-07-29T16:45:07+02:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"wiki_branch": "master",
"globally_editable_wiki": false,
"has_pull_requests": true,
"has_projects": true,
"has_releases": true,
"has_packages": true,
"has_actions": false,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": false,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"default_update_style": "merge",
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": []
},
"sender": {
"id": 2628,
"login": "6543",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "6543@noreply.codeberg.org",
"avatar_url": "https://codeberg.org/avatars/09a234c768cb9bca78f6b2f82d6af173",
"html_url": "https://codeberg.org/6543",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2019-10-12T05:05:49+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "https://mh.obermui.de",
"description": "\u003ca href=\"https://matrix.to/#/@marddl:obermui.de\" rel=\"nofollow\"\u003e\u003cimg src=\"https://codeberg.org/6543/content/raw/branch/main/matrix-logo.png\"\u003e\u003c/a\u003e\r\n\u003ca rel=\"me\" href=\"https://chaos.social/@6543\"\u003eMastodon\u003c/a\u003e",
"visibility": "public",
"followers_count": 46,
"following_count": 33,
"starred_repos_count": 92,
"username": "6543"
},
"commit_id": "",
"review": null
}

View file

@ -52,3 +52,6 @@ var HookPullRequestClosed string
//go:embed HookRelease.json
var HookRelease string
//go:embed HookPullRequestReopened.json
var HookPullRequestReopened string

View file

@ -32,9 +32,10 @@ const (
hookPullRequest = "pull_request"
hookRelease = "release"
actionOpen = "opened"
actionSync = "synchronized"
actionClose = "closed"
actionOpen = "opened"
actionSync = "synchronized"
actionClose = "closed"
actionReopen = "reopened"
refBranch = "branch"
refTag = "tag"
@ -111,7 +112,10 @@ func parsePullRequestHook(payload io.Reader) (*model.Repo, *model.Pipeline, erro
}
// Don't trigger pipelines for non-code changes ...
if pr.Action != actionOpen && pr.Action != actionSync && pr.Action != actionClose {
if pr.Action != actionOpen &&
pr.Action != actionSync &&
pr.Action != actionClose &&
pr.Action != actionReopen {
log.Debug().Msgf("pull_request action is '%s' and no open or sync", pr.Action)
return nil, nil, nil
}

View file

@ -214,6 +214,44 @@ func TestForgejoParser(t *testing.T) {
PullRequestLabels: []string{},
},
},
{
name: "pull-request reopen events should handle a PR as it was first created",
data: fixtures.HookPullRequestReopened,
event: "pull_request",
repo: &model.Repo{
ForgeRemoteID: "138564",
Owner: "test_it",
Name: "test_ci_thing",
FullName: "test_it/test_ci_thing",
Avatar: "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
ForgeURL: "https://codeberg.org/test_it/test_ci_thing",
Clone: "https://codeberg.org/test_it/test_ci_thing.git",
CloneSSH: "ssh://git@codeberg.org/test_it/test_ci_thing.git",
Branch: "main",
PREnabled: true,
IsSCMPrivate: false,
Perm: &model.Perm{
Pull: true,
Push: true,
Admin: true,
},
},
pipe: &model.Pipeline{
Author: "6543",
Event: "pull_request",
Commit: "36b5813240a9d2daa29b05046d56a53e18f39a3e",
Branch: "main",
Ref: "refs/pull/1/head",
Refspec: "6543-patch-1:main",
Title: "Some ned more AAAA",
Message: "Some ned more AAAA",
Sender: "6543",
Avatar: "https://codeberg.org/avatars/09a234c768cb9bca78f6b2f82d6af173",
Email: "6543@noreply.codeberg.org",
ForgeURL: "https://codeberg.org/test_it/test_ci_thing/pulls/1",
PullRequestLabels: []string{},
},
},
{
name: "pull-request events should handle a PR hook when PR got updated",
data: fixtures.HookPullRequestUpdated,

View file

@ -0,0 +1,396 @@
{
"action": "reopened",
"number": 1,
"pull_request": {
"id": 701944,
"url": "https://codeberg.org/test_it/test_ci_thing/pulls/1",
"number": 1,
"user": {
"id": 2628,
"login": "6543",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "6543@obermui.de",
"avatar_url": "https://codeberg.org/avatars/09a234c768cb9bca78f6b2f82d6af173",
"html_url": "https://codeberg.org/6543",
"language": "en-US",
"is_admin": false,
"last_login": "2025-08-05T17:04:55+02:00",
"created": "2019-10-12T05:05:49+02:00",
"restricted": false,
"active": true,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "https://mh.obermui.de",
"description": "\u003ca href=\"https://matrix.to/#/@marddl:obermui.de\" rel=\"nofollow\"\u003e\u003cimg src=\"https://codeberg.org/6543/content/raw/branch/main/matrix-logo.png\"\u003e\u003c/a\u003e\r\n\u003ca rel=\"me\" href=\"https://chaos.social/@6543\"\u003eMastodon\u003c/a\u003e",
"visibility": "public",
"followers_count": 46,
"following_count": 33,
"starred_repos_count": 92,
"username": "6543"
},
"title": "Some ned more AAAA",
"body": "",
"labels": [],
"milestone": null,
"assignee": null,
"assignees": null,
"requested_reviewers": [],
"requested_reviewers_teams": [],
"state": "open",
"draft": false,
"is_locked": false,
"comments": 0,
"review_comments": 1,
"additions": 1,
"deletions": 0,
"changed_files": 1,
"html_url": "https://codeberg.org/test_it/test_ci_thing/pulls/1",
"diff_url": "https://codeberg.org/test_it/test_ci_thing/pulls/1.diff",
"patch_url": "https://codeberg.org/test_it/test_ci_thing/pulls/1.patch",
"mergeable": false,
"merged": false,
"merged_at": null,
"merge_commit_sha": null,
"merged_by": null,
"allow_maintainer_edit": false,
"base": {
"label": "main",
"ref": "main",
"sha": "67012991d6c69b1c58378346fca366b864d8d1a1",
"repo_id": 138564,
"repo": {
"id": 138564,
"owner": {
"id": 90470,
"login": "test_it",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
"html_url": "https://codeberg.org/test_it",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2023-04-02T15:13:07+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "",
"description": "the [link](https://stackoverflow.com/questions/4212503/how-can-i-set-the-request-header-for-curl#4212535) us curl-ish",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test_it"
},
"name": "test_ci_thing",
"full_name": "test_it/test_ci_thing",
"description": "",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 34,
"language": "",
"languages_url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing/languages",
"html_url": "https://codeberg.org/test_it/test_ci_thing",
"url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing",
"link": "",
"ssh_url": "git@codeberg.org/test_it/test_ci_thing.git",
"clone_url": "https://codeberg.org/test_it/test_ci_thing.git",
"original_url": "",
"website": "",
"stars_count": 1,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2023-08-27T03:32:56+02:00",
"updated_at": "2025-07-29T16:45:07+02:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"wiki_branch": "master",
"globally_editable_wiki": false,
"has_pull_requests": true,
"has_projects": true,
"has_releases": true,
"has_packages": true,
"has_actions": false,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": false,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"default_update_style": "merge",
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": []
}
},
"head": {
"label": "6543-patch-1",
"ref": "6543-patch-1",
"sha": "36b5813240a9d2daa29b05046d56a53e18f39a3e",
"repo_id": 138564,
"repo": {
"id": 138564,
"owner": {
"id": 90470,
"login": "test_it",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
"html_url": "https://codeberg.org/test_it",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2023-04-02T15:13:07+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "",
"description": "the [link](https://stackoverflow.com/questions/4212503/how-can-i-set-the-request-header-for-curl#4212535) us curl-ish",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test_it"
},
"name": "test_ci_thing",
"full_name": "test_it/test_ci_thing",
"description": "",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 34,
"language": "",
"languages_url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing/languages",
"html_url": "https://codeberg.org/test_it/test_ci_thing",
"url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing",
"link": "",
"ssh_url": "git@codeberg.org/test_it/test_ci_thing.git",
"clone_url": "https://codeberg.org/test_it/test_ci_thing.git",
"original_url": "",
"website": "",
"stars_count": 1,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2023-08-27T03:32:56+02:00",
"updated_at": "2025-07-29T16:45:07+02:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"wiki_branch": "master",
"globally_editable_wiki": false,
"has_pull_requests": true,
"has_projects": true,
"has_releases": true,
"has_packages": true,
"has_actions": false,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": false,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"default_update_style": "merge",
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": []
}
},
"merge_base": "67012991d6c69b1c58378346fca366b864d8d1a1",
"due_date": null,
"created_at": "2025-07-29T16:45:09+02:00",
"updated_at": "2025-08-05T17:06:49+02:00",
"closed_at": null,
"pin_order": 0,
"flow": 0
},
"requested_reviewer": null,
"repository": {
"id": 138564,
"owner": {
"id": 90470,
"login": "test_it",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "",
"avatar_url": "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
"html_url": "https://codeberg.org/test_it",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2023-04-02T15:13:07+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "",
"description": "the [link](https://stackoverflow.com/questions/4212503/how-can-i-set-the-request-header-for-curl#4212535) us curl-ish",
"visibility": "public",
"followers_count": 0,
"following_count": 0,
"starred_repos_count": 0,
"username": "test_it"
},
"name": "test_ci_thing",
"full_name": "test_it/test_ci_thing",
"description": "",
"empty": false,
"private": false,
"fork": false,
"template": false,
"parent": null,
"mirror": false,
"size": 34,
"language": "",
"languages_url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing/languages",
"html_url": "https://codeberg.org/test_it/test_ci_thing",
"url": "https://codeberg.org/api/v1/repos/test_it/test_ci_thing",
"link": "",
"ssh_url": "git@codeberg.org/test_it/test_ci_thing.git",
"clone_url": "https://codeberg.org/test_it/test_ci_thing.git",
"original_url": "",
"website": "",
"stars_count": 1,
"forks_count": 0,
"watchers_count": 1,
"open_issues_count": 0,
"open_pr_counter": 0,
"release_counter": 0,
"default_branch": "main",
"archived": false,
"created_at": "2023-08-27T03:32:56+02:00",
"updated_at": "2025-07-29T16:45:07+02:00",
"archived_at": "1970-01-01T01:00:00+01:00",
"permissions": {
"admin": true,
"push": true,
"pull": true
},
"has_issues": true,
"internal_tracker": {
"enable_time_tracker": true,
"allow_only_contributors_to_track_time": true,
"enable_issue_dependencies": true
},
"has_wiki": true,
"wiki_branch": "master",
"globally_editable_wiki": false,
"has_pull_requests": true,
"has_projects": true,
"has_releases": true,
"has_packages": true,
"has_actions": false,
"ignore_whitespace_conflicts": false,
"allow_merge_commits": true,
"allow_rebase": true,
"allow_rebase_explicit": true,
"allow_squash_merge": true,
"allow_fast_forward_only_merge": false,
"allow_rebase_update": true,
"default_delete_branch_after_merge": false,
"default_merge_style": "merge",
"default_allow_maintainer_edit": false,
"default_update_style": "merge",
"avatar_url": "",
"internal": false,
"mirror_interval": "",
"object_format_name": "sha1",
"mirror_updated": "0001-01-01T00:00:00Z",
"repo_transfer": null,
"topics": []
},
"sender": {
"id": 2628,
"login": "6543",
"login_name": "",
"source_id": 0,
"full_name": "",
"email": "6543@noreply.codeberg.org",
"avatar_url": "https://codeberg.org/avatars/09a234c768cb9bca78f6b2f82d6af173",
"html_url": "https://codeberg.org/6543",
"language": "",
"is_admin": false,
"last_login": "0001-01-01T00:00:00Z",
"created": "2019-10-12T05:05:49+02:00",
"restricted": false,
"active": false,
"prohibit_login": false,
"location": "",
"pronouns": "",
"website": "https://mh.obermui.de",
"description": "\u003ca href=\"https://matrix.to/#/@marddl:obermui.de\" rel=\"nofollow\"\u003e\u003cimg src=\"https://codeberg.org/6543/content/raw/branch/main/matrix-logo.png\"\u003e\u003c/a\u003e\r\n\u003ca rel=\"me\" href=\"https://chaos.social/@6543\"\u003eMastodon\u003c/a\u003e",
"visibility": "public",
"followers_count": 46,
"following_count": 33,
"starred_repos_count": 92,
"username": "6543"
},
"commit_id": "",
"review": null
}

View file

@ -52,3 +52,6 @@ var HookPullRequestClosed string
//go:embed HookRelease.json
var HookRelease string
//go:embed HookPullRequestReopened.json
var HookPullRequestReopened string

View file

@ -34,9 +34,10 @@ const (
hookPullRequest = "pull_request"
hookRelease = "release"
actionOpen = "opened"
actionSync = "synchronized"
actionClose = "closed"
actionOpen = "opened"
actionSync = "synchronized"
actionClose = "closed"
actionReopen = "reopened"
refBranch = "branch"
refTag = "tag"
@ -118,7 +119,10 @@ func parsePullRequestHook(payload io.Reader) (*model.Repo, *model.Pipeline, erro
}
// Don't trigger pipelines for non-code changes ...
if pr.Action != actionOpen && pr.Action != actionSync && pr.Action != actionClose {
if pr.Action != actionOpen &&
pr.Action != actionSync &&
pr.Action != actionClose &&
pr.Action != actionReopen {
log.Debug().Msgf("pull_request action is '%s' and no open or sync", pr.Action)
return nil, nil, nil
}

View file

@ -215,6 +215,44 @@ func TestGiteaParser(t *testing.T) {
PullRequestLabels: []string{},
},
},
{
name: "pull-request reopen events should handle a PR as it was first created",
data: fixtures.HookPullRequestReopened,
event: "pull_request",
repo: &model.Repo{
ForgeRemoteID: "138564",
Owner: "test_it",
Name: "test_ci_thing",
FullName: "test_it/test_ci_thing",
Avatar: "https://codeberg.org/avatars/bb6f3159a98a869b43f20b350542f8fb",
ForgeURL: "https://codeberg.org/test_it/test_ci_thing",
Clone: "https://codeberg.org/test_it/test_ci_thing.git",
CloneSSH: "git@codeberg.org/test_it/test_ci_thing.git",
Branch: "main",
PREnabled: true,
IsSCMPrivate: false,
Perm: &model.Perm{
Pull: true,
Push: true,
Admin: true,
},
},
pipe: &model.Pipeline{
Author: "6543",
Event: "pull_request",
Commit: "36b5813240a9d2daa29b05046d56a53e18f39a3e",
Branch: "main",
Ref: "refs/pull/1/head",
Refspec: "6543-patch-1:main",
Title: "Some ned more AAAA",
Message: "Some ned more AAAA",
Sender: "6543",
Avatar: "https://codeberg.org/avatars/09a234c768cb9bca78f6b2f82d6af173",
Email: "6543@noreply.codeberg.org",
ForgeURL: "https://codeberg.org/test_it/test_ci_thing/pulls/1",
PullRequestLabels: []string{},
},
},
{
name: "pull-request events should handle a PR hook when PR got updated",
data: fixtures.HookPullRequestUpdated,

View file

@ -0,0 +1,505 @@
{
"action": "reopened",
"number": 1,
"pull_request": {
"url": "https://api.github.com/repos/6543/test_ci_tmp/pulls/1",
"id": 2705176047,
"node_id": "PR_kwDOPU9UaM6hPbXv",
"html_url": "https://github.com/6543/test_ci_tmp/pull/1",
"diff_url": "https://github.com/6543/test_ci_tmp/pull/1.diff",
"patch_url": "https://github.com/6543/test_ci_tmp/pull/1.patch",
"issue_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/1",
"number": 1,
"state": "open",
"locked": false,
"title": "Some ned more AAAA",
"user": {
"login": "6543",
"id": 24977596,
"node_id": "MDQ6VXNlcjI0OTc3NTk2",
"avatar_url": "https://avatars.githubusercontent.com/u/24977596?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/6543",
"html_url": "https://github.com/6543",
"followers_url": "https://api.github.com/users/6543/followers",
"following_url": "https://api.github.com/users/6543/following{/other_user}",
"gists_url": "https://api.github.com/users/6543/gists{/gist_id}",
"starred_url": "https://api.github.com/users/6543/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/6543/subscriptions",
"organizations_url": "https://api.github.com/users/6543/orgs",
"repos_url": "https://api.github.com/users/6543/repos",
"events_url": "https://api.github.com/users/6543/events{/privacy}",
"received_events_url": "https://api.github.com/users/6543/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"body": "yeaaa",
"created_at": "2025-07-29T20:00:54Z",
"updated_at": "2025-08-05T14:34:19Z",
"closed_at": null,
"merged_at": null,
"merge_commit_sha": null,
"assignee": null,
"assignees": [],
"requested_reviewers": [],
"requested_teams": [],
"labels": [
{
"id": 9024465376,
"node_id": "LA_kwDOPU9UaM8AAAACGeZp4A",
"url": "https://api.github.com/repos/6543/test_ci_tmp/labels/documentation",
"name": "documentation",
"color": "0075ca",
"default": true,
"description": "Improvements or additions to documentation"
}
],
"milestone": null,
"draft": false,
"commits_url": "https://api.github.com/repos/6543/test_ci_tmp/pulls/1/commits",
"review_comments_url": "https://api.github.com/repos/6543/test_ci_tmp/pulls/1/comments",
"review_comment_url": "https://api.github.com/repos/6543/test_ci_tmp/pulls/comments{/number}",
"comments_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/1/comments",
"statuses_url": "https://api.github.com/repos/6543/test_ci_tmp/statuses/36b5813240a9d2daa29b05046d56a53e18f39a3e",
"head": {
"label": "6543:6543-patch-1",
"ref": "6543-patch-1",
"sha": "36b5813240a9d2daa29b05046d56a53e18f39a3e",
"user": {
"login": "6543",
"id": 24977596,
"node_id": "MDQ6VXNlcjI0OTc3NTk2",
"avatar_url": "https://avatars.githubusercontent.com/u/24977596?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/6543",
"html_url": "https://github.com/6543",
"followers_url": "https://api.github.com/users/6543/followers",
"following_url": "https://api.github.com/users/6543/following{/other_user}",
"gists_url": "https://api.github.com/users/6543/gists{/gist_id}",
"starred_url": "https://api.github.com/users/6543/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/6543/subscriptions",
"organizations_url": "https://api.github.com/users/6543/orgs",
"repos_url": "https://api.github.com/users/6543/repos",
"events_url": "https://api.github.com/users/6543/events{/privacy}",
"received_events_url": "https://api.github.com/users/6543/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"repo": {
"id": 1028609128,
"node_id": "R_kgDOPU9UaA",
"name": "test_ci_tmp",
"full_name": "6543/test_ci_tmp",
"private": false,
"owner": {
"login": "6543",
"id": 24977596,
"node_id": "MDQ6VXNlcjI0OTc3NTk2",
"avatar_url": "https://avatars.githubusercontent.com/u/24977596?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/6543",
"html_url": "https://github.com/6543",
"followers_url": "https://api.github.com/users/6543/followers",
"following_url": "https://api.github.com/users/6543/following{/other_user}",
"gists_url": "https://api.github.com/users/6543/gists{/gist_id}",
"starred_url": "https://api.github.com/users/6543/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/6543/subscriptions",
"organizations_url": "https://api.github.com/users/6543/orgs",
"repos_url": "https://api.github.com/users/6543/repos",
"events_url": "https://api.github.com/users/6543/events{/privacy}",
"received_events_url": "https://api.github.com/users/6543/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/6543/test_ci_tmp",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/6543/test_ci_tmp",
"forks_url": "https://api.github.com/repos/6543/test_ci_tmp/forks",
"keys_url": "https://api.github.com/repos/6543/test_ci_tmp/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/6543/test_ci_tmp/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/6543/test_ci_tmp/teams",
"hooks_url": "https://api.github.com/repos/6543/test_ci_tmp/hooks",
"issue_events_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/events{/number}",
"events_url": "https://api.github.com/repos/6543/test_ci_tmp/events",
"assignees_url": "https://api.github.com/repos/6543/test_ci_tmp/assignees{/user}",
"branches_url": "https://api.github.com/repos/6543/test_ci_tmp/branches{/branch}",
"tags_url": "https://api.github.com/repos/6543/test_ci_tmp/tags",
"blobs_url": "https://api.github.com/repos/6543/test_ci_tmp/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/6543/test_ci_tmp/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/6543/test_ci_tmp/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/6543/test_ci_tmp/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/6543/test_ci_tmp/statuses/{sha}",
"languages_url": "https://api.github.com/repos/6543/test_ci_tmp/languages",
"stargazers_url": "https://api.github.com/repos/6543/test_ci_tmp/stargazers",
"contributors_url": "https://api.github.com/repos/6543/test_ci_tmp/contributors",
"subscribers_url": "https://api.github.com/repos/6543/test_ci_tmp/subscribers",
"subscription_url": "https://api.github.com/repos/6543/test_ci_tmp/subscription",
"commits_url": "https://api.github.com/repos/6543/test_ci_tmp/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/6543/test_ci_tmp/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/6543/test_ci_tmp/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/6543/test_ci_tmp/contents/{+path}",
"compare_url": "https://api.github.com/repos/6543/test_ci_tmp/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/6543/test_ci_tmp/merges",
"archive_url": "https://api.github.com/repos/6543/test_ci_tmp/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/6543/test_ci_tmp/downloads",
"issues_url": "https://api.github.com/repos/6543/test_ci_tmp/issues{/number}",
"pulls_url": "https://api.github.com/repos/6543/test_ci_tmp/pulls{/number}",
"milestones_url": "https://api.github.com/repos/6543/test_ci_tmp/milestones{/number}",
"notifications_url": "https://api.github.com/repos/6543/test_ci_tmp/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/6543/test_ci_tmp/labels{/name}",
"releases_url": "https://api.github.com/repos/6543/test_ci_tmp/releases{/id}",
"deployments_url": "https://api.github.com/repos/6543/test_ci_tmp/deployments",
"created_at": "2025-07-29T19:35:41Z",
"updated_at": "2025-07-29T19:36:23Z",
"pushed_at": "2025-07-29T19:36:21Z",
"git_url": "git://github.com/6543/test_ci_tmp.git",
"ssh_url": "git@github.com:6543/test_ci_tmp.git",
"clone_url": "https://github.com/6543/test_ci_tmp.git",
"svn_url": "https://github.com/6543/test_ci_tmp",
"homepage": null,
"size": 3,
"stargazers_count": 0,
"watchers_count": 0,
"language": "Dockerfile",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 1,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [],
"visibility": "public",
"forks": 0,
"open_issues": 1,
"watchers": 0,
"default_branch": "main",
"allow_squash_merge": true,
"allow_merge_commit": true,
"allow_rebase_merge": true,
"allow_auto_merge": false,
"delete_branch_on_merge": false,
"allow_update_branch": false,
"use_squash_pr_title_as_default": false,
"squash_merge_commit_message": "COMMIT_MESSAGES",
"squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
"merge_commit_message": "PR_TITLE",
"merge_commit_title": "MERGE_MESSAGE"
}
},
"base": {
"label": "6543:main",
"ref": "main",
"sha": "67012991d6c69b1c58378346fca366b864d8d1a1",
"user": {
"login": "6543",
"id": 24977596,
"node_id": "MDQ6VXNlcjI0OTc3NTk2",
"avatar_url": "https://avatars.githubusercontent.com/u/24977596?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/6543",
"html_url": "https://github.com/6543",
"followers_url": "https://api.github.com/users/6543/followers",
"following_url": "https://api.github.com/users/6543/following{/other_user}",
"gists_url": "https://api.github.com/users/6543/gists{/gist_id}",
"starred_url": "https://api.github.com/users/6543/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/6543/subscriptions",
"organizations_url": "https://api.github.com/users/6543/orgs",
"repos_url": "https://api.github.com/users/6543/repos",
"events_url": "https://api.github.com/users/6543/events{/privacy}",
"received_events_url": "https://api.github.com/users/6543/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"repo": {
"id": 1028609128,
"node_id": "R_kgDOPU9UaA",
"name": "test_ci_tmp",
"full_name": "6543/test_ci_tmp",
"private": false,
"owner": {
"login": "6543",
"id": 24977596,
"node_id": "MDQ6VXNlcjI0OTc3NTk2",
"avatar_url": "https://avatars.githubusercontent.com/u/24977596?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/6543",
"html_url": "https://github.com/6543",
"followers_url": "https://api.github.com/users/6543/followers",
"following_url": "https://api.github.com/users/6543/following{/other_user}",
"gists_url": "https://api.github.com/users/6543/gists{/gist_id}",
"starred_url": "https://api.github.com/users/6543/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/6543/subscriptions",
"organizations_url": "https://api.github.com/users/6543/orgs",
"repos_url": "https://api.github.com/users/6543/repos",
"events_url": "https://api.github.com/users/6543/events{/privacy}",
"received_events_url": "https://api.github.com/users/6543/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/6543/test_ci_tmp",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/6543/test_ci_tmp",
"forks_url": "https://api.github.com/repos/6543/test_ci_tmp/forks",
"keys_url": "https://api.github.com/repos/6543/test_ci_tmp/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/6543/test_ci_tmp/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/6543/test_ci_tmp/teams",
"hooks_url": "https://api.github.com/repos/6543/test_ci_tmp/hooks",
"issue_events_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/events{/number}",
"events_url": "https://api.github.com/repos/6543/test_ci_tmp/events",
"assignees_url": "https://api.github.com/repos/6543/test_ci_tmp/assignees{/user}",
"branches_url": "https://api.github.com/repos/6543/test_ci_tmp/branches{/branch}",
"tags_url": "https://api.github.com/repos/6543/test_ci_tmp/tags",
"blobs_url": "https://api.github.com/repos/6543/test_ci_tmp/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/6543/test_ci_tmp/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/6543/test_ci_tmp/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/6543/test_ci_tmp/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/6543/test_ci_tmp/statuses/{sha}",
"languages_url": "https://api.github.com/repos/6543/test_ci_tmp/languages",
"stargazers_url": "https://api.github.com/repos/6543/test_ci_tmp/stargazers",
"contributors_url": "https://api.github.com/repos/6543/test_ci_tmp/contributors",
"subscribers_url": "https://api.github.com/repos/6543/test_ci_tmp/subscribers",
"subscription_url": "https://api.github.com/repos/6543/test_ci_tmp/subscription",
"commits_url": "https://api.github.com/repos/6543/test_ci_tmp/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/6543/test_ci_tmp/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/6543/test_ci_tmp/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/6543/test_ci_tmp/contents/{+path}",
"compare_url": "https://api.github.com/repos/6543/test_ci_tmp/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/6543/test_ci_tmp/merges",
"archive_url": "https://api.github.com/repos/6543/test_ci_tmp/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/6543/test_ci_tmp/downloads",
"issues_url": "https://api.github.com/repos/6543/test_ci_tmp/issues{/number}",
"pulls_url": "https://api.github.com/repos/6543/test_ci_tmp/pulls{/number}",
"milestones_url": "https://api.github.com/repos/6543/test_ci_tmp/milestones{/number}",
"notifications_url": "https://api.github.com/repos/6543/test_ci_tmp/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/6543/test_ci_tmp/labels{/name}",
"releases_url": "https://api.github.com/repos/6543/test_ci_tmp/releases{/id}",
"deployments_url": "https://api.github.com/repos/6543/test_ci_tmp/deployments",
"created_at": "2025-07-29T19:35:41Z",
"updated_at": "2025-07-29T19:36:23Z",
"pushed_at": "2025-07-29T19:36:21Z",
"git_url": "git://github.com/6543/test_ci_tmp.git",
"ssh_url": "git@github.com:6543/test_ci_tmp.git",
"clone_url": "https://github.com/6543/test_ci_tmp.git",
"svn_url": "https://github.com/6543/test_ci_tmp",
"homepage": null,
"size": 3,
"stargazers_count": 0,
"watchers_count": 0,
"language": "Dockerfile",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 1,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [],
"visibility": "public",
"forks": 0,
"open_issues": 1,
"watchers": 0,
"default_branch": "main",
"allow_squash_merge": true,
"allow_merge_commit": true,
"allow_rebase_merge": true,
"allow_auto_merge": false,
"delete_branch_on_merge": false,
"allow_update_branch": false,
"use_squash_pr_title_as_default": false,
"squash_merge_commit_message": "COMMIT_MESSAGES",
"squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
"merge_commit_message": "PR_TITLE",
"merge_commit_title": "MERGE_MESSAGE"
}
},
"_links": {
"self": {
"href": "https://api.github.com/repos/6543/test_ci_tmp/pulls/1"
},
"html": {
"href": "https://github.com/6543/test_ci_tmp/pull/1"
},
"issue": {
"href": "https://api.github.com/repos/6543/test_ci_tmp/issues/1"
},
"comments": {
"href": "https://api.github.com/repos/6543/test_ci_tmp/issues/1/comments"
},
"review_comments": {
"href": "https://api.github.com/repos/6543/test_ci_tmp/pulls/1/comments"
},
"review_comment": {
"href": "https://api.github.com/repos/6543/test_ci_tmp/pulls/comments{/number}"
},
"commits": {
"href": "https://api.github.com/repos/6543/test_ci_tmp/pulls/1/commits"
},
"statuses": {
"href": "https://api.github.com/repos/6543/test_ci_tmp/statuses/36b5813240a9d2daa29b05046d56a53e18f39a3e"
}
},
"author_association": "OWNER",
"auto_merge": null,
"active_lock_reason": null,
"merged": false,
"mergeable": null,
"rebaseable": null,
"mergeable_state": "unknown",
"merged_by": null,
"comments": 0,
"review_comments": 0,
"maintainer_can_modify": false,
"commits": 1,
"additions": 1,
"deletions": 0,
"changed_files": 1
},
"repository": {
"id": 1028609128,
"node_id": "R_kgDOPU9UaA",
"name": "test_ci_tmp",
"full_name": "6543/test_ci_tmp",
"private": false,
"owner": {
"login": "6543",
"id": 24977596,
"node_id": "MDQ6VXNlcjI0OTc3NTk2",
"avatar_url": "https://avatars.githubusercontent.com/u/24977596?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/6543",
"html_url": "https://github.com/6543",
"followers_url": "https://api.github.com/users/6543/followers",
"following_url": "https://api.github.com/users/6543/following{/other_user}",
"gists_url": "https://api.github.com/users/6543/gists{/gist_id}",
"starred_url": "https://api.github.com/users/6543/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/6543/subscriptions",
"organizations_url": "https://api.github.com/users/6543/orgs",
"repos_url": "https://api.github.com/users/6543/repos",
"events_url": "https://api.github.com/users/6543/events{/privacy}",
"received_events_url": "https://api.github.com/users/6543/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/6543/test_ci_tmp",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/6543/test_ci_tmp",
"forks_url": "https://api.github.com/repos/6543/test_ci_tmp/forks",
"keys_url": "https://api.github.com/repos/6543/test_ci_tmp/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/6543/test_ci_tmp/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/6543/test_ci_tmp/teams",
"hooks_url": "https://api.github.com/repos/6543/test_ci_tmp/hooks",
"issue_events_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/events{/number}",
"events_url": "https://api.github.com/repos/6543/test_ci_tmp/events",
"assignees_url": "https://api.github.com/repos/6543/test_ci_tmp/assignees{/user}",
"branches_url": "https://api.github.com/repos/6543/test_ci_tmp/branches{/branch}",
"tags_url": "https://api.github.com/repos/6543/test_ci_tmp/tags",
"blobs_url": "https://api.github.com/repos/6543/test_ci_tmp/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/6543/test_ci_tmp/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/6543/test_ci_tmp/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/6543/test_ci_tmp/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/6543/test_ci_tmp/statuses/{sha}",
"languages_url": "https://api.github.com/repos/6543/test_ci_tmp/languages",
"stargazers_url": "https://api.github.com/repos/6543/test_ci_tmp/stargazers",
"contributors_url": "https://api.github.com/repos/6543/test_ci_tmp/contributors",
"subscribers_url": "https://api.github.com/repos/6543/test_ci_tmp/subscribers",
"subscription_url": "https://api.github.com/repos/6543/test_ci_tmp/subscription",
"commits_url": "https://api.github.com/repos/6543/test_ci_tmp/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/6543/test_ci_tmp/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/6543/test_ci_tmp/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/6543/test_ci_tmp/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/6543/test_ci_tmp/contents/{+path}",
"compare_url": "https://api.github.com/repos/6543/test_ci_tmp/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/6543/test_ci_tmp/merges",
"archive_url": "https://api.github.com/repos/6543/test_ci_tmp/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/6543/test_ci_tmp/downloads",
"issues_url": "https://api.github.com/repos/6543/test_ci_tmp/issues{/number}",
"pulls_url": "https://api.github.com/repos/6543/test_ci_tmp/pulls{/number}",
"milestones_url": "https://api.github.com/repos/6543/test_ci_tmp/milestones{/number}",
"notifications_url": "https://api.github.com/repos/6543/test_ci_tmp/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/6543/test_ci_tmp/labels{/name}",
"releases_url": "https://api.github.com/repos/6543/test_ci_tmp/releases{/id}",
"deployments_url": "https://api.github.com/repos/6543/test_ci_tmp/deployments",
"created_at": "2025-07-29T19:35:41Z",
"updated_at": "2025-07-29T19:36:23Z",
"pushed_at": "2025-07-29T19:36:21Z",
"git_url": "git://github.com/6543/test_ci_tmp.git",
"ssh_url": "git@github.com:6543/test_ci_tmp.git",
"clone_url": "https://github.com/6543/test_ci_tmp.git",
"svn_url": "https://github.com/6543/test_ci_tmp",
"homepage": null,
"size": 3,
"stargazers_count": 0,
"watchers_count": 0,
"language": "Dockerfile",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 1,
"license": null,
"allow_forking": true,
"is_template": false,
"web_commit_signoff_required": false,
"topics": [],
"visibility": "public",
"forks": 0,
"open_issues": 1,
"watchers": 0,
"default_branch": "main"
},
"sender": {
"login": "6543",
"id": 24977596,
"node_id": "MDQ6VXNlcjI0OTc3NTk2",
"avatar_url": "https://avatars.githubusercontent.com/u/24977596?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/6543",
"html_url": "https://github.com/6543",
"followers_url": "https://api.github.com/users/6543/followers",
"following_url": "https://api.github.com/users/6543/following{/other_user}",
"gists_url": "https://api.github.com/users/6543/gists{/gist_id}",
"starred_url": "https://api.github.com/users/6543/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/6543/subscriptions",
"organizations_url": "https://api.github.com/users/6543/orgs",
"repos_url": "https://api.github.com/users/6543/repos",
"events_url": "https://api.github.com/users/6543/events{/privacy}",
"received_events_url": "https://api.github.com/users/6543/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
}
}

View file

@ -73,3 +73,6 @@ var HookPullRequestClosed string
//go:embed HookRelease.json
var HookRelease string
//go:embed HookPullRequestReopened.json
var HookPullRequestReopened string

View file

@ -33,6 +33,7 @@ const (
hookField = "payload"
actionOpen = "opened"
actionReopen = "reopened"
actionClose = "closed"
actionSync = "synchronize"
actionReleased = "released"
@ -148,7 +149,10 @@ func parseDeployHook(hook *github.DeploymentEvent) (*model.Repo, *model.Pipeline
// parsePullHook parses a pull request hook and returns the Repo and Pipeline
// details.
func parsePullHook(hook *github.PullRequestEvent, merge bool) (*github.PullRequest, *model.Repo, *model.Pipeline, error) {
if hook.GetAction() != actionOpen && hook.GetAction() != actionSync && hook.GetAction() != actionClose {
if hook.GetAction() != actionOpen &&
hook.GetAction() != actionSync &&
hook.GetAction() != actionClose &&
hook.GetAction() != actionReopen {
return nil, nil, nil, nil
}

View file

@ -126,4 +126,14 @@ func Test_parseHook(t *testing.T) {
assert.Len(t, strings.Split(b.Ref, "/"), 3)
assert.True(t, strings.HasPrefix(b.Ref, "refs/tags/"))
})
t.Run("reopen a pull", func(t *testing.T) {
req := testHookRequest([]byte(fixtures.HookPullRequestReopened), hookPull)
p, r, b, err := parseHook(req, false)
assert.NoError(t, err)
assert.NotNil(t, r)
assert.NotNil(t, b)
assert.NotNil(t, p)
assert.Equal(t, model.EventPull, b.Event)
})
}

View file

@ -0,0 +1,173 @@
{
"object_kind": "merge_request",
"event_type": "merge_request",
"user": {
"id": 4575606,
"name": "6543",
"username": "real6543",
"avatar_url": "https://gitlab.com/uploads/-/system/user/avatar/4575606/avatar.png",
"email": "[REDACTED]"
},
"project": {
"id": 72081820,
"name": "test_ci_tmp",
"description": null,
"web_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp",
"avatar_url": null,
"git_ssh_url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"git_http_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp.git",
"namespace": "demoaccount2-commits-group",
"visibility_level": 0,
"path_with_namespace": "demoaccount2-commits-group/test_ci_tmp",
"default_branch": "main",
"ci_config_path": "",
"homepage": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp",
"url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"ssh_url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"http_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp.git"
},
"object_attributes": {
"assignee_id": null,
"author_id": 29352663,
"created_at": "2025-07-29 20:00:54 UTC",
"description": "yeaaa",
"draft": false,
"head_pipeline_id": null,
"id": 403287663,
"iid": 1,
"last_edited_at": null,
"last_edited_by_id": null,
"merge_commit_sha": null,
"merge_error": null,
"merge_params": {},
"merge_status": "can_be_merged",
"merge_user_id": null,
"merge_when_pipeline_succeeds": false,
"milestone_id": null,
"source_branch": "6543-patch-1",
"source_project_id": 72081820,
"state_id": 1,
"target_branch": "main",
"target_project_id": 72081820,
"time_estimate": 0,
"title": "Some ned more AAAA",
"updated_at": "2025-08-05 14:44:26 UTC",
"updated_by_id": null,
"prepared_at": null,
"assignee_ids": [],
"blocking_discussions_resolved": true,
"detailed_merge_status": "mergeable",
"first_contribution": true,
"human_time_change": null,
"human_time_estimate": null,
"human_total_time_spent": null,
"labels": [
{
"id": 41869663,
"title": "documentation",
"color": "#0075ca",
"project_id": 72081820,
"created_at": "2025-07-30 00:40:00 UTC",
"updated_at": "2025-07-30 00:40:00 UTC",
"template": false,
"description": null,
"type": "ProjectLabel",
"group_id": null
}
],
"last_commit": {
"id": "36b5813240a9d2daa29b05046d56a53e18f39a3e",
"message": "Some ned more AAAA\n",
"title": "Some ned more AAAA",
"timestamp": "2025-07-29T16:45:02+02:00",
"url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp/-/commit/36b5813240a9d2daa29b05046d56a53e18f39a3e",
"author": {
"name": "6543",
"email": "[REDACTED]"
}
},
"reviewer_ids": [29352668],
"source": {
"id": 72081820,
"name": "test_ci_tmp",
"description": null,
"web_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp",
"avatar_url": null,
"git_ssh_url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"git_http_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp.git",
"namespace": "demoaccount2-commits-group",
"visibility_level": 0,
"path_with_namespace": "demoaccount2-commits-group/test_ci_tmp",
"default_branch": "main",
"ci_config_path": "",
"homepage": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp",
"url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"ssh_url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"http_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp.git"
},
"state": "opened",
"target": {
"id": 72081820,
"name": "test_ci_tmp",
"description": null,
"web_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp",
"avatar_url": null,
"git_ssh_url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"git_http_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp.git",
"namespace": "demoaccount2-commits-group",
"visibility_level": 0,
"path_with_namespace": "demoaccount2-commits-group/test_ci_tmp",
"default_branch": "main",
"ci_config_path": "",
"homepage": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp",
"url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"ssh_url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"http_url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp.git"
},
"time_change": 0,
"total_time_spent": 0,
"url": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp/-/merge_requests/1",
"work_in_progress": false,
"approval_rules": [],
"action": "reopen"
},
"labels": [
{
"id": 41869663,
"title": "documentation",
"color": "#0075ca",
"project_id": 72081820,
"created_at": "2025-07-30 00:40:00 UTC",
"updated_at": "2025-07-30 00:40:00 UTC",
"template": false,
"description": null,
"type": "ProjectLabel",
"group_id": null
}
],
"changes": {
"state_id": {
"previous": 2,
"current": 1
},
"updated_at": {
"previous": "2025-08-05 14:44:14 UTC",
"current": "2025-08-05 14:44:26 UTC"
}
},
"repository": {
"name": "test_ci_tmp",
"url": "git@gitlab.com:demoaccount2-commits-group/test_ci_tmp.git",
"description": null,
"homepage": "https://gitlab.com/demoaccount2-commits-group/test_ci_tmp"
},
"reviewers": [
{
"id": 29352668,
"name": "Placeholder github Source User",
"username": "demoaccount2commits_placeholder_6s82rp",
"avatar_url": "https://secure.gravatar.com/avatar/6d8b40c6bd417e69e359e712b55471dfc72af88c732fed9fe8d276a210aa5dd8?s=80&d=identicon",
"email": "[REDACTED]"
}
]
}

View file

@ -66,3 +66,6 @@ var HookPullRequestMerged []byte
//go:embed WebhookReleaseBody.json
var WebhookReleaseBody []byte
//go:embed HookPullRequestReopened.json
var HookPullRequestReopened []byte

View file

@ -643,7 +643,11 @@ func (g *GitLab) Hook(ctx context.Context, req *http.Request) (*model.Repo, *mod
switch event := parsed.(type) {
case *gitlab.MergeEvent:
// https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html#merge-request-events
if event.ObjectAttributes.OldRev == "" && event.ObjectAttributes.Action != "open" && event.ObjectAttributes.Action != "close" && event.ObjectAttributes.Action != "merge" {
if event.ObjectAttributes.OldRev == "" &&
event.ObjectAttributes.Action != "open" &&
event.ObjectAttributes.Action != "close" &&
event.ObjectAttributes.Action != "merge" &&
event.ObjectAttributes.Action != "reopen" {
return nil, nil, &forge_types.ErrIgnoreEvent{Event: string(eventType), Reason: "no code changes"}
}
mergeIID, repo, pipeline, err := convertMergeRequestHook(event, req)

View file

@ -188,6 +188,26 @@ func Test_GitLab(t *testing.T) {
}
})
t.Run("merge request reopened", func(t *testing.T) {
req, _ := http.NewRequest(
fixtures.ServiceHookMethod,
fixtures.ServiceHookURL.String(),
bytes.NewReader(fixtures.HookPullRequestReopened),
)
req.Header = fixtures.ServiceHookHeaders
hookRepo, pipeline, err := client.Hook(ctx, req)
assert.NoError(t, err)
if assert.NotNil(t, hookRepo) && assert.NotNil(t, pipeline) {
assert.Equal(t, "main", hookRepo.Branch)
assert.Equal(t, "demoaccount2-commits-group", hookRepo.Owner)
assert.Equal(t, "test_ci_tmp", hookRepo.Name)
assert.Equal(t, "Some ned more AAAA", pipeline.Title)
assert.Len(t, pipeline.ChangedFiles, 0)
assert.Equal(t, model.EventPull, pipeline.Event)
}
})
t.Run("ignore merge request hook without changes", func(t *testing.T) {
req, _ := http.NewRequest(
fixtures.ServiceHookMethod,