Skip to content

Commit 68c5f1d

Browse files
committed
fix(bitbucket-cloud): resolve CEL expression failure on push events
Bitbucket Cloud push events set processedEvent.Event to the string "push", but CEL evaluation expects Event to be a JSON object (map[string]interface{}). This caused all CEL expressions to fail with "cannot unmarshal string into Go value of type map[string]interface{}". Remove the incorrect Event assignment and use triggertype constants for TriggerTarget and EventType. Signed-off-by: Zaki Shaikh <zashaikh@redhat.com>
1 parent 47ee286 commit 68c5f1d

6 files changed

Lines changed: 103 additions & 31 deletions

File tree

pkg/provider/bitbucketcloud/parse_payload.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,8 @@ func (v *Provider) ParsePayload(ctx context.Context, run *params.Run, request *h
148148
processedEvent.PullRequestNumber = e.PullRequest.ID
149149
processedEvent.PullRequestTitle = e.PullRequest.Title
150150
case *types.PushRequestEvent:
151-
processedEvent.Event = "push"
152-
processedEvent.TriggerTarget = "push"
153-
processedEvent.EventType = "push"
151+
processedEvent.TriggerTarget = triggertype.Push
152+
processedEvent.EventType = triggertype.Push.String()
154153
processedEvent.Organization = e.Repository.Workspace.Slug
155154
processedEvent.Repository = strings.Split(e.Repository.FullName, "/")[1]
156155
processedEvent.SHA = e.Push.Changes[0].New.Target.Hash

pkg/provider/bitbucketcloud/parse_payload_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ func TestParsePayload(t *testing.T) {
265265
assert.Equal(t, tt.expectedSender, got.Sender)
266266
assert.Equal(t, tt.expectedSHA, got.SHA, "%s != %s", tt.expectedSHA, got.SHA)
267267
assert.Equal(t, tt.expectedEventType, got.EventType, "%s != %s", tt.expectedEventType, got.EventType)
268+
assert.Assert(t, got.Event != nil)
268269

269270
if tt.expectedRef != "" {
270271
assert.Equal(t, tt.expectedRef, got.BaseBranch, tt.expectedRef, got.BaseBranch)

test/bitbucket_cloud_pullrequest_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,42 @@ func TestBitbucketCloudPullRequestCancelInProgressMerged(t *testing.T) {
107107
assert.Equal(t, prs.Items[0].GetStatusCondition().GetCondition(apis.ConditionSucceeded).GetReason(), "Cancelled", "should have been cancelled")
108108
}
109109

110+
func TestBitbucketCloudCELExpressionOnPush(t *testing.T) {
111+
targetNS := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-ns")
112+
ctx := context.Background()
113+
114+
runcnx, opts, bprovider, err := tbb.Setup(ctx)
115+
if err != nil {
116+
t.Skip(err.Error())
117+
return
118+
}
119+
bcrepo := tbb.CreateCRD(ctx, t, bprovider, runcnx, opts, targetNS)
120+
targetRefName := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test")
121+
title := "TestPullRequest - " + targetRefName
122+
123+
entries, err := payload.GetEntries(
124+
map[string]string{".tekton/pipelinerun.yaml": "testdata/pipelinerun-cel-expression.yaml"},
125+
targetNS, targetRefName, triggertype.Push.String(), map[string]string{})
126+
assert.NilError(t, err)
127+
128+
repobranch, err := tbb.MakePush(t, bprovider, runcnx, bcrepo, opts, title, targetRefName, entries)
129+
assert.NilError(t, err)
130+
defer tbb.TearDown(ctx, t, runcnx, bprovider, opts, -1, repobranch.Name, targetNS, false)
131+
132+
hash, ok := repobranch.Target["hash"].(string)
133+
assert.Assert(t, ok)
134+
135+
sopt := twait.SuccessOpt{
136+
TargetNS: targetNS,
137+
OnEvent: triggertype.Push.String(),
138+
NumberofPRMatch: 1,
139+
SHA: hash,
140+
Title: title,
141+
MinNumberStatus: 1,
142+
}
143+
twait.Succeeded(ctx, t, runcnx, opts, sopt)
144+
}
145+
110146
// Local Variables:
111147
// compile-command: "go test -tags=e2e -v -run TestBitbucketCloudPullRequest$ ."
112148
// End:

test/pkg/bitbucketcloud/pr.go

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,29 @@ import (
1717
func MakePR(t *testing.T, bprovider bitbucketcloud.Provider, runcnx *params.Run, bcrepo *bitbucket.Repository, opts options.E2E, title, targetRefName string,
1818
entries map[string]string,
1919
) (*types.PullRequest, *bitbucket.RepositoryBranch) {
20+
repobranch, err := MakePush(t, bprovider, runcnx, bcrepo, opts, title, targetRefName, entries)
21+
assert.NilError(t, err)
22+
23+
intf, err := bprovider.Client().Repositories.PullRequests.Create(&bitbucket.PullRequestsOptions{
24+
Owner: opts.Organization,
25+
RepoSlug: opts.Repo,
26+
Title: title,
27+
Message: "A new PR for testing",
28+
SourceBranch: targetRefName,
29+
})
30+
assert.NilError(t, err)
31+
32+
pr := &types.PullRequest{}
33+
err = mapstructure.Decode(intf, pr)
34+
assert.NilError(t, err)
35+
runcnx.Clients.Log.Infof("Created PR %s", pr.Links.HTML.HRef)
36+
37+
return pr, repobranch
38+
}
39+
40+
func MakePush(t *testing.T, bprovider bitbucketcloud.Provider, runcnx *params.Run, bcrepo *bitbucket.Repository, opts options.E2E, title, targetRefName string,
41+
entries map[string]string,
42+
) (*bitbucket.RepositoryBranch, error) {
2043
commitAuthor := "OpenShift Pipelines E2E test"
2144
commitEmail := "e2e-pipelines@redhat.com"
2245

@@ -38,29 +61,20 @@ func MakePR(t *testing.T, bprovider bitbucketcloud.Provider, runcnx *params.Run,
3861
Branch: targetRefName,
3962
Author: fmt.Sprintf("%s <%s>", commitAuthor, commitEmail),
4063
})
41-
assert.NilError(t, err)
64+
if err != nil {
65+
return nil, err
66+
}
67+
4268
runcnx.Clients.Log.Infof("Using repo %s branch %s", bcrepo.Full_name, targetRefName)
4369

4470
repobranch, err := bprovider.Client().Repositories.Repository.GetBranch(&bitbucket.RepositoryBranchOptions{
4571
Owner: opts.Organization,
4672
RepoSlug: opts.Repo,
4773
BranchName: targetRefName,
4874
})
49-
assert.NilError(t, err)
50-
51-
intf, err := bprovider.Client().Repositories.PullRequests.Create(&bitbucket.PullRequestsOptions{
52-
Owner: opts.Organization,
53-
RepoSlug: opts.Repo,
54-
Title: title,
55-
Message: "A new PR for testing",
56-
SourceBranch: targetRefName,
57-
})
58-
assert.NilError(t, err)
59-
60-
pr := &types.PullRequest{}
61-
err = mapstructure.Decode(intf, pr)
62-
assert.NilError(t, err)
63-
runcnx.Clients.Log.Infof("Created PR %s", pr.Links.HTML.HRef)
75+
if err != nil {
76+
return nil, err
77+
}
6478

65-
return pr, repobranch
79+
return repobranch, nil
6680
}

test/pkg/bitbucketcloud/setup.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,23 @@ func TearDown(ctx context.Context, t *testing.T, runcnx *params.Run, bprovider b
6060
runcnx.Clients.Log.Infof("Not cleaning up and closing PR since TEST_NOCLEANUP is set")
6161
return
6262
}
63-
runcnx.Clients.Log.Infof("Closing PR #%d", prNumber)
64-
_, err := bprovider.Client().Repositories.PullRequests.Decline(&bitbucket.PullRequestsOptions{
65-
ID: fmt.Sprintf("%d", prNumber),
66-
Owner: opts.Organization,
67-
RepoSlug: opts.Repo,
68-
})
69-
if noerror {
70-
runcnx.Clients.Log.Infof("Error closing PR #%d: %v", prNumber, err)
71-
} else {
72-
assert.NilError(t, err)
63+
64+
if prNumber != -1 {
65+
runcnx.Clients.Log.Infof("Closing PR #%d", prNumber)
66+
_, err := bprovider.Client().Repositories.PullRequests.Decline(&bitbucket.PullRequestsOptions{
67+
ID: fmt.Sprintf("%d", prNumber),
68+
Owner: opts.Organization,
69+
RepoSlug: opts.Repo,
70+
})
71+
if noerror {
72+
runcnx.Clients.Log.Infof("Error closing PR #%d: %v", prNumber, err)
73+
} else {
74+
assert.NilError(t, err)
75+
}
7376
}
77+
7478
runcnx.Clients.Log.Infof("Deleting ref %s", ref)
75-
err = bprovider.Client().Repositories.Repository.DeleteBranch(
79+
err := bprovider.Client().Repositories.Repository.DeleteBranch(
7680
&bitbucket.RepositoryBranchDeleteOptions{
7781
Owner: opts.Organization,
7882
RepoSlug: opts.Repo,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
apiVersion: tekton.dev/v1beta1
3+
kind: PipelineRun
4+
metadata:
5+
name: "\\ .PipelineName //"
6+
annotations:
7+
pipelinesascode.tekton.dev/target-namespace: "\\ .TargetNamespace //"
8+
pipelinesascode.tekton.dev/on-cel-expression: >-
9+
event == "\\ .TargetEvent //" && target_branch == "\\ .TargetBranch //"
10+
spec:
11+
pipelineSpec:
12+
tasks:
13+
- name: cel-expression-task
14+
taskSpec:
15+
steps:
16+
- name: test-cel-expression-values
17+
image: registry.access.redhat.com/ubi10/ubi-micro
18+
command: ["/bin/echo", "HELLOMOTO"]

0 commit comments

Comments
 (0)