Skip to content

Commit 05b0c88

Browse files
committed
First jab at gitlab support
Signed-off-by: Chmouel Boudjnah <[email protected]>
1 parent 52270a6 commit 05b0c88

File tree

138 files changed

+35359
-4
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

138 files changed

+35359
-4
lines changed

config/400-trigger-eventlistenner.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -327,3 +327,29 @@ spec:
327327
template:
328328
# Using the templateRef from retest since they are mostly the same
329329
ref: pipelines-as-code-bitbucket-server-pullreq
330+
331+
# GitHub When sending a new Pull Request
332+
- name: gitlab-merge-request
333+
interceptors:
334+
- ref:
335+
name: gitlab
336+
params:
337+
# TODO:
338+
# - name: "secretRef"
339+
# value:
340+
# secretName: "pipelines-as-code-secret"
341+
# secretKey: "webhook.secret"
342+
- name: eventTypes
343+
value:
344+
- "Merge Request Hook"
345+
- ref:
346+
name: cel
347+
params:
348+
- name: overlays
349+
value:
350+
- key: payload
351+
expression: "base64.encode(bytes(body.marshalJSON()))"
352+
bindings:
353+
- ref: pipelines-as-code-gitlab-mergereq
354+
template:
355+
ref: pipelines-as-code-gitlab-mergereq

config/452-gitlab-merge-request.yaml

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# Copyright 2021 Red Hat
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
apiVersion: triggers.tekton.dev/v1alpha1
16+
kind: TriggerBinding
17+
metadata:
18+
name: pipelines-as-code-gitlab-mergereq
19+
namespace: pipelines-as-code
20+
labels:
21+
app.kubernetes.io/version: "devel"
22+
app.kubernetes.io/instance: default
23+
app.kubernetes.io/part-of: pipelines-as-code
24+
spec:
25+
params:
26+
- name: trigger_target
27+
value: pull_request
28+
- name: event_type
29+
value: "$(header.X-Gitlab-Event)"
30+
- name: payload
31+
value: $(extensions.payload)
32+
---
33+
apiVersion: triggers.tekton.dev/v1alpha1
34+
kind: TriggerTemplate
35+
metadata:
36+
name: pipelines-as-code-gitlab-mergereq
37+
namespace: pipelines-as-code
38+
labels:
39+
app.kubernetes.io/version: "devel"
40+
app.kubernetes.io/instance: default
41+
app.kubernetes.io/part-of: pipelines-as-code
42+
spec:
43+
params:
44+
- name: trigger_target
45+
- name: event_type
46+
- name: payload
47+
resourcetemplates:
48+
- apiVersion: tekton.dev/v1beta1
49+
kind: TaskRun
50+
metadata:
51+
generateName: pipelines-as-code-run-
52+
labels:
53+
app.kubernetes.io/version: "devel"
54+
app.kubernetes.io/managed-by: pipelines-as-code
55+
#pipelinesascode.tekton.dev/event: "$(tt.params.event_type)"
56+
spec:
57+
serviceAccountName: pipelines-as-code-sa-el
58+
params:
59+
- name: trigger_target
60+
value: $(tt.params.trigger_target)
61+
- name: event_type
62+
value: $(tt.params.event_type)
63+
- name: payload
64+
value: $(tt.params.payload)
65+
taskSpec:
66+
params:
67+
- name: trigger_target
68+
type: string
69+
- name: event_type
70+
type: string
71+
- name: payload
72+
type: string
73+
steps:
74+
- name: apply-and-launch
75+
env:
76+
- name: PAC_GIT_PROVIDER_TYPE
77+
value: "gitlab"
78+
- name: PAC_PAYLOAD_FILE
79+
value: "/tmp/payload.json"
80+
- name: PAC_TRIGGER_TARGET
81+
value: "$(params.trigger_target)"
82+
- name: PAC_WEBHOOK_TYPE
83+
value: "$(params.event_type)"
84+
imagePullPolicy: Always
85+
image: "ko://github.com/openshift-pipelines/pipelines-as-code/cmd/pipelines-as-code"
86+
script: |
87+
#!/usr/bin/env bash
88+
set -euf
89+
90+
echo $(tt.params.payload)| base64 --decode |tee ${PAC_PAYLOAD_FILE}
91+
echo
92+
93+
env|grep '^PAC'
94+
pipelines-as-code
95+
workspaces:
96+
- name: secrets
97+
workspaces:
98+
- name: secrets
99+
secret:
100+
secretName: pipelines-as-code-secret

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ require (
2323
github.com/pkg/errors v0.9.1
2424
github.com/spf13/cobra v1.3.0
2525
github.com/tektoncd/pipeline v0.33.0
26+
github.com/xanzy/go-gitlab v0.58.0
2627
github.com/xlzd/gotp v0.0.0-20220110052318-fab697c03c2c // indirect
2728
go.uber.org/zap v1.19.1
2829
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect

go.sum

+9
Original file line numberDiff line numberDiff line change
@@ -793,8 +793,11 @@ github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/U
793793
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
794794
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
795795
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
796+
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
796797
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
798+
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
797799
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
800+
github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo=
798801
github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
799802
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
800803
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
@@ -805,6 +808,8 @@ github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+
805808
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
806809
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
807810
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
811+
github.com/hashicorp/go-retryablehttp v0.6.8 h1:92lWxgpa+fF3FozM4B3UZtHZMJX8T5XT+TFdCxsPyWs=
812+
github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
808813
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
809814
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
810815
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
@@ -1360,6 +1365,8 @@ github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17
13601365
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
13611366
github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
13621367
github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI=
1368+
github.com/xanzy/go-gitlab v0.58.0 h1:Entnl8GrVDlc1jd1BlOWhNR0QVQgiO3WDom5DJbT+1s=
1369+
github.com/xanzy/go-gitlab v0.58.0/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM=
13631370
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
13641371
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
13651372
github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
@@ -1597,6 +1604,7 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacp
15971604
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
15981605
golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
15991606
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
1607+
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
16001608
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
16011609
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
16021610
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1935,6 +1943,7 @@ google.golang.org/api v0.65.0 h1:MTW9c+LIBAbwoS1Gb+YV7NjFBt2f7GtAS5hIzh2NjgQ=
19351943
google.golang.org/api v0.65.0/go.mod h1:ArYhxgGadlWmqO1IqVujw6Cs8IdD33bTmzKo2Sh+cbg=
19361944
google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
19371945
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
1946+
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
19381947
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
19391948
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
19401949
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=

pkg/cmd/pipelineascode/pipelineascode.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/openshift-pipelines/pipelines-as-code/pkg/provider/bitbucketcloud"
1616
"github.com/openshift-pipelines/pipelines-as-code/pkg/provider/bitbucketserver"
1717
"github.com/openshift-pipelines/pipelines-as-code/pkg/provider/github"
18+
"github.com/openshift-pipelines/pipelines-as-code/pkg/provider/gitlab"
1819

1920
"github.com/openshift-pipelines/pipelines-as-code/pkg/params"
2021
"github.com/spf13/cobra"
@@ -82,14 +83,17 @@ func getGitProvider(pacopts *info.PacOpts) (provider.Interface, error) {
8283
case "github":
8384
v := &github.Provider{}
8485
return v, nil
86+
case "gitlab":
87+
v := &gitlab.Provider{}
88+
return v, nil
8589
case "bitbucket-cloud":
8690
v := &bitbucketcloud.Provider{}
8791
return v, nil
8892
case "bitbucket-server":
8993
v := &bitbucketserver.Provider{}
9094
return v, nil
9195
default:
92-
return nil, fmt.Errorf("no supported Git Provider is detected")
96+
return nil, fmt.Errorf("no supported Git Provider is detected, webhooktype: %s", pacopts.WebhookType)
9397
}
9498
}
9599

pkg/pipelineascode/secret.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func secretFromRepository(ctx context.Context, cs *params.Run, k8int kubeinterac
4343
}
4444
cs.Info.Pac.ProviderInfoFromRepo = true
4545

46-
cs.Clients.Log.Infof("Using git provider %s: url=%s user=%s token-secret=%s in token-key=%s",
46+
cs.Clients.Log.Infof("Using git provider %s: apiurl=%s user=%s token-secret=%s in token-key=%s",
4747
cs.Info.Pac.WebhookType,
4848
repo.Spec.GitProvider.URL,
4949
repo.Spec.GitProvider.User,

pkg/pipelineascode/secret_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func TestSecretFromRepository(t *testing.T) {
4141
},
4242
providerType: "lalala",
4343
logmatch: []*regexp.Regexp{
44-
regexp.MustCompile("^Using git provider lalala: url=https://apiurl.default user= token-secret=repo-secret in token-key=" + defaultGitProviderSecretKey),
44+
regexp.MustCompile("^Using git provider lalala: apiurl=https://apiurl.default user= token-secret=repo-secret in token-key=" + defaultGitProviderSecretKey),
4545
},
4646
},
4747
{
@@ -59,7 +59,7 @@ func TestSecretFromRepository(t *testing.T) {
5959
},
6060
expectedSecret: "setapiurl",
6161
logmatch: []*regexp.Regexp{
62-
regexp.MustCompile(".*url=https://dowant.*"),
62+
regexp.MustCompile(".*apiurl=https://dowant.*"),
6363
},
6464
},
6565
{

0 commit comments

Comments
 (0)