Skip to content

Commit 9a1984c

Browse files
committed
[github] Don't consider PR body in CI skip logic
GitHub pull request edits were not triggering CI when the PR body/description contained the `[ ci skip ]`/`[ skip ci ]` pattern. This was an issue, for example, in Dependabot-generated PRs that include commit messages from upstream dependencies that do include the pattern. Furthermore, no other CI service or vendor considers the PR body for the "ci skip" mechanism. This corrects the behavior so that only commit messages or PR titles are considered when a PR is edited.
1 parent 6427679 commit 9a1984c

File tree

2 files changed

+18
-27
lines changed

2 files changed

+18
-27
lines changed

service/hook/github/github.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,19 @@ func transformPullRequestEvent(pullRequest PullRequestEventModel) hookCommon.Tra
196196
}
197197
}
198198
if pullRequest.Action == "edited" {
199-
// skip it if only title / description changed, and the previous pattern did not include a [skip ci] pattern
199+
// skip it if only title / description changed, and the current title did not remove a [skip ci] pattern
200200
if pullRequest.Changes.Base == nil {
201-
if !hookCommon.IsSkipBuildByCommitMessage(pullRequest.Changes.Title.From) && !hookCommon.IsSkipBuildByCommitMessage(pullRequest.Changes.Body.From) {
201+
// only description changed
202+
if pullRequest.Changes.Title.From == "" {
202203
return hookCommon.TransformResultModel{
203-
Error: errors.New("Pull Request edit doesn't require a build: only title and/or description was changed, and previous one was not skipped"),
204+
Error: errors.New("Pull Request edit doesn't require a build: only body/description was changed"),
205+
ShouldSkip: true,
206+
}
207+
}
208+
// title changed without removing any [skip ci] pattern
209+
if !hookCommon.IsSkipBuildByCommitMessage(pullRequest.Changes.Title.From) {
210+
return hookCommon.TransformResultModel{
211+
Error: errors.New("Pull Request edit doesn't require a build: only title was changed, and previous one was not skipped"),
204212
ShouldSkip: true,
205213
}
206214
}

service/hook/github/github_test.go

+7-24
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ func Test_transformPullRequestEvent(t *testing.T) {
828828
},
829829
}
830830
hookTransformResult := transformPullRequestEvent(pullRequest)
831-
require.EqualError(t, hookTransformResult.Error, "Pull Request edit doesn't require a build: only title and/or description was changed, and previous one was not skipped")
831+
require.EqualError(t, hookTransformResult.Error, "Pull Request edit doesn't require a build: only title was changed, and previous one was not skipped")
832832
require.True(t, hookTransformResult.ShouldSkip)
833833
require.Equal(t, []bitriseapi.TriggerAPIParamsModel(nil), hookTransformResult.TriggerAPIParams)
834834
require.Equal(t, false, hookTransformResult.DontWaitForTriggerResponse)
@@ -897,7 +897,7 @@ func Test_transformPullRequestEvent(t *testing.T) {
897897
require.Equal(t, false, hookTransformResult.DontWaitForTriggerResponse)
898898
}
899899

900-
t.Log("Pull Request - edited - only body/description change - no skip ci in previous - no build")
900+
t.Log("Pull Request - edited - only body/description change - no build")
901901
{
902902
pullRequest := PullRequestEventModel{
903903
Action: "edited",
@@ -937,13 +937,13 @@ func Test_transformPullRequestEvent(t *testing.T) {
937937
},
938938
}
939939
hookTransformResult := transformPullRequestEvent(pullRequest)
940-
require.EqualError(t, hookTransformResult.Error, "Pull Request edit doesn't require a build: only title and/or description was changed, and previous one was not skipped")
940+
require.EqualError(t, hookTransformResult.Error, "Pull Request edit doesn't require a build: only body/description was changed")
941941
require.True(t, hookTransformResult.ShouldSkip)
942942
require.Equal(t, []bitriseapi.TriggerAPIParamsModel(nil), hookTransformResult.TriggerAPIParams)
943943
require.Equal(t, false, hookTransformResult.DontWaitForTriggerResponse)
944944
}
945945

946-
t.Log("Pull Request - edited - only body/description change - BUT the previous title included a skip CI pattern - should build")
946+
t.Log("Pull Request - edited - only body/description change - the previous body included a skip CI pattern - still shouldn't build")
947947
{
948948
pullRequest := PullRequestEventModel{
949949
Action: "edited",
@@ -983,26 +983,9 @@ func Test_transformPullRequestEvent(t *testing.T) {
983983
},
984984
}
985985
hookTransformResult := transformPullRequestEvent(pullRequest)
986-
require.NoError(t, hookTransformResult.Error)
987-
require.False(t, hookTransformResult.ShouldSkip)
988-
require.Equal(t, []bitriseapi.TriggerAPIParamsModel{
989-
{
990-
BuildParams: bitriseapi.BuildParamsModel{
991-
CommitHash: "83b86e5f286f546dc5a4a58db66ceef44460c85e",
992-
CommitMessage: "PR test\n\nPR text body",
993-
Branch: "feature/github-pr",
994-
BranchDest: "develop",
995-
PullRequestID: pointers.NewIntPtr(12),
996-
PullRequestRepositoryURL: "https://github.com/bitrise-io/bitrise-webhooks.git",
997-
BaseRepositoryURL: "https://github.com/bitrise-io/bitrise-webhooks.git",
998-
HeadRepositoryURL: "https://github.com/bitrise-io/bitrise-webhooks.git",
999-
PullRequestMergeBranch: "pull/12/merge",
1000-
PullRequestHeadBranch: "pull/12/head",
1001-
Environments: make([]bitriseapi.EnvironmentItem, 0),
1002-
},
1003-
TriggeredBy: "webhook-github/test_user",
1004-
},
1005-
}, hookTransformResult.TriggerAPIParams)
986+
require.EqualError(t, hookTransformResult.Error, "Pull Request edit doesn't require a build: only body/description was changed")
987+
require.True(t, hookTransformResult.ShouldSkip)
988+
require.Equal(t, []bitriseapi.TriggerAPIParamsModel(nil), hookTransformResult.TriggerAPIParams)
1006989
require.Equal(t, false, hookTransformResult.DontWaitForTriggerResponse)
1007990
}
1008991
}

0 commit comments

Comments
 (0)