Skip to content

Commit 126d616

Browse files
committed
deploy shipwright triggers via operator
1 parent 89c21aa commit 126d616

File tree

8 files changed

+300
-0
lines changed

8 files changed

+300
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ Refer to the [ShipwrightBuild documentation](docs/shipwrightbuild.md) for more i
3636

3737
The operator handles differents environment variables to customize Shiprwright controller installation:
3838
KO_DATA_PATH : defines the shipwright controller manifest to install
39+
INSTALL_TRIGGERS: if set to true the operator will install Shipwright Triggers
3940
IMAGE_SHIPWRIGHT_SHIPWRIGHT_BUILD : defines the Shipwright Build Controller Image to use
4041
IMAGE_SHIPWRIGHT_GIT_CONTAINER_IMAGE: defines the Shipwright Git Container Image to use
4142
IMAGE_SHIPWRIGHT_MUTATE_IMAGE_CONTAINER_IMAGE: defines the Shipwright Mutate Image to use
4243
IMAGE_SHIPWRIGHT_BUNDLE_CONTAINER_IMAGE: defines the Shipwright Bundle Image to use
4344
IMAGE_SHIPWRIGHT_WAITER_CONTAINER_IMAGE: defines the Shipwright Waiter Image to use
45+
IMAGE_SHIPWRIGHT_SHIPWRIGHT_TRIGGERS: defines the Shipwright Triggers Image to use
4446

4547
## Contributing
4648

bundle/manifests/shipwright-operator.clusterserviceversion.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,38 @@ spec:
484484
- get
485485
- patch
486486
- update
487+
- apiGroups:
488+
- operator.tekton.dev
489+
resources:
490+
- customruns
491+
verbs:
492+
- get
493+
- list
494+
- watch
495+
- apiGroups:
496+
- operator.tekton.dev
497+
resources:
498+
- customruns/finalizers
499+
verbs:
500+
- patch
501+
- update
502+
- apiGroups:
503+
- operator.tekton.dev
504+
resources:
505+
- customruns/status
506+
verbs:
507+
- patch
508+
- update
509+
- apiGroups:
510+
- operator.tekton.dev
511+
resources:
512+
- pipelineruns
513+
verbs:
514+
- get
515+
- list
516+
- patch
517+
- update
518+
- watch
487519
- apiGroups:
488520
- operator.tekton.dev
489521
resources:

config/rbac/role.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,38 @@ rules:
109109
- get
110110
- patch
111111
- update
112+
- apiGroups:
113+
- operator.tekton.dev
114+
resources:
115+
- customruns
116+
verbs:
117+
- get
118+
- list
119+
- watch
120+
- apiGroups:
121+
- operator.tekton.dev
122+
resources:
123+
- customruns/finalizers
124+
verbs:
125+
- patch
126+
- update
127+
- apiGroups:
128+
- operator.tekton.dev
129+
resources:
130+
- customruns/status
131+
verbs:
132+
- patch
133+
- update
134+
- apiGroups:
135+
- operator.tekton.dev
136+
resources:
137+
- pipelineruns
138+
verbs:
139+
- get
140+
- list
141+
- patch
142+
- update
143+
- watch
112144
- apiGroups:
113145
- operator.tekton.dev
114146
resources:

controllers/shipwrightbuild_controller.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,23 @@ func (r *ShipwrightBuildReconciler) setupManifestival(managerLogger logr.Logger)
219219
if err != nil {
220220
return err
221221
}
222+
222223
buildManifest := filepath.Join(dataPath, "release.yaml")
223224

224225
r.Manifest, err = manifestival.NewManifest(
225226
buildManifest,
226227
manifestival.UseClient(client),
227228
manifestival.UseLogger(logger),
228229
)
230+
231+
if withTriggers() {
232+
triggersManifest := filepath.Join(dataPath, "triggers.yaml")
233+
m, err := manifestival.ManifestFrom(manifestival.Recursive(triggersManifest))
234+
if err != nil {
235+
return err
236+
}
237+
r.Manifest = r.Manifest.Append(m)
238+
}
229239
return err
230240
}
231241

controllers/shipwrightbuild_controller_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ func testShipwrightBuildReconcilerReconcile(t *testing.T, targetNamespace string
146146
{"IMAGE_SHIPWRIGHT_WAITER_CONTAINER_IMAGE", "ghcr.io/shipwright-io/build/waiter:nightly-2023-05-05-1683263383"},
147147
{"IMAGE_SHIPWRIGHT_MUTATE_IMAGE_CONTAINER_IMAGE", "ghcr.io/shipwright-io/build/mutate-image:nightly-2023-04-18-1681794585"},
148148
{"IMAGE_SHIPWRIGHT_BUNDLE_CONTAINER_IMAGE", "ghcr.io/shipwright-io/build/bundle:nightly-2023-05-05-1683263383"},
149+
{"IMAGE_SHIPWRIGHT_SHIPWRIGHT_TRIGGERS", "quay.io/jkhelil/openshift-builds-triggers"},
149150
}
150151

151152
t.Logf("Deploying Shipwright Controller against '%s' namespace", targetNamespace)

controllers/shipwrightbuild_rbac.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,7 @@ package controllers
2626
// +kubebuilder:rbac:groups=operator.shipwright.io,resources=shipwrightbuilds/finalizers,verbs=update
2727
// +kubebuilder:rbac:groups=operator.shipwright.io,resources=shipwrightbuilds/status,verbs=get;update;patch
2828
// +kubebuilder:rbac:groups=operator.tekton.dev,resources=tektonconfigs,verbs=get;list;create
29+
// +kubebuilder:rbac:groups=operator.tekton.dev,resources=customruns,verbs=get;list;watch
30+
// +kubebuilder:rbac:groups=operator.tekton.dev,resources=customruns/finalizers,verbs=patch;update
31+
// +kubebuilder:rbac:groups=operator.tekton.dev,resources=customruns/status,verbs=patch;update
32+
// +kubebuilder:rbac:groups=operator.tekton.dev,resources=pipelineruns,verbs=get;list;patch;update;watch

controllers/util.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
// koDataPathEnv ko data-path environment variable.
1616
const (
1717
koDataPathEnv = "KO_DATA_PATH"
18+
InstallTriggers = "INSTALL_TRIGGERS"
1819
ShipwrightImagePrefix = "IMAGE_SHIPWRIGHT_"
1920
)
2021

@@ -117,3 +118,7 @@ func replaceContainersEnvImage(container corev1.Container, images map[string]str
117118
}
118119
}
119120
}
121+
122+
func withTriggers() bool {
123+
return os.Getenv(InstallTriggers) == "true"
124+
}

kodata/triggers.yaml

Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
---
2+
apiVersion: v1
3+
kind: ServiceAccount
4+
metadata:
5+
namespace: shipwright-build
6+
name: shipwright-triggers
7+
labels:
8+
app.kubernetes.io/name: shipwright-triggers
9+
---
10+
apiVersion: rbac.authorization.k8s.io/v1
11+
kind: ClusterRole
12+
metadata:
13+
labels:
14+
app.kubernetes.io/name: shipwright-triggers
15+
name: shipwright-triggers
16+
rules:
17+
- apiGroups:
18+
- shipwright.io
19+
resources:
20+
- buildruns
21+
verbs:
22+
- create
23+
- get
24+
- list
25+
- update
26+
- watch
27+
- apiGroups:
28+
- shipwright.io
29+
resources:
30+
- builds
31+
verbs:
32+
- get
33+
- list
34+
- watch
35+
- apiGroups:
36+
- tekton.dev
37+
resources:
38+
- customruns
39+
verbs:
40+
- get
41+
- list
42+
- watch
43+
- apiGroups:
44+
- tekton.dev
45+
resources:
46+
- customruns/finalizers
47+
verbs:
48+
- patch
49+
- update
50+
- apiGroups:
51+
- tekton.dev
52+
resources:
53+
- customruns/status
54+
verbs:
55+
- patch
56+
- update
57+
- apiGroups:
58+
- tekton.dev
59+
resources:
60+
- pipelineruns
61+
verbs:
62+
- get
63+
- list
64+
- patch
65+
- update
66+
- watch
67+
---
68+
kind: ClusterRoleBinding
69+
apiVersion: rbac.authorization.k8s.io/v1
70+
metadata:
71+
name: shipwright-triggers
72+
labels:
73+
app.kubernetes.io/name: shipwright-triggers
74+
subjects:
75+
- kind: ServiceAccount
76+
namespace: shipwright-build
77+
name: shipwright-triggers
78+
roleRef:
79+
apiGroup: rbac.authorization.k8s.io
80+
kind: ClusterRole
81+
name: shipwright-triggers
82+
---
83+
apiVersion: rbac.authorization.k8s.io/v1
84+
kind: Role
85+
metadata:
86+
namespace: shipwright-build
87+
labels:
88+
app.kubernetes.io/name: shipwright-triggers
89+
name: shipwright-triggers
90+
rules:
91+
- apiGroups:
92+
- shipwright.io
93+
resources:
94+
- buildruns
95+
verbs:
96+
- create
97+
- get
98+
- list
99+
- update
100+
- watch
101+
- apiGroups:
102+
- shipwright.io
103+
resources:
104+
- builds
105+
verbs:
106+
- get
107+
- list
108+
- watch
109+
- apiGroups:
110+
- tekton.dev
111+
resources:
112+
- customruns
113+
verbs:
114+
- get
115+
- list
116+
- watch
117+
- apiGroups:
118+
- tekton.dev
119+
resources:
120+
- customruns/finalizers
121+
verbs:
122+
- patch
123+
- update
124+
- apiGroups:
125+
- tekton.dev
126+
resources:
127+
- customruns/status
128+
verbs:
129+
- patch
130+
- update
131+
- apiGroups:
132+
- tekton.dev
133+
resources:
134+
- pipelineruns
135+
verbs:
136+
- get
137+
- list
138+
- patch
139+
- update
140+
- watch
141+
---
142+
kind: RoleBinding
143+
apiVersion: rbac.authorization.k8s.io/v1
144+
metadata:
145+
namespace: shipwright-build
146+
name: shipwright-triggers
147+
labels:
148+
app.kubernetes.io/name: shipwright-triggers
149+
subjects:
150+
- kind: ServiceAccount
151+
namespace: shipwright-build
152+
name: shipwright-triggers
153+
roleRef:
154+
apiGroup: rbac.authorization.k8s.io
155+
kind: Role
156+
name: shipwright-triggers
157+
---
158+
apiVersion: v1
159+
kind: Service
160+
metadata:
161+
namespace: shipwright-build
162+
name: shipwright-triggers
163+
labels:
164+
app.kubernetes.io/name: shipwright-triggers
165+
spec:
166+
type: ClusterIP
167+
ports:
168+
- port: 80
169+
targetPort: http
170+
protocol: TCP
171+
name: http
172+
selector:
173+
app.kubernetes.io/name: shipwright-triggers
174+
---
175+
apiVersion: apps/v1
176+
kind: Deployment
177+
metadata:
178+
namespace: shipwright-build
179+
name: shipwright-triggers
180+
labels:
181+
app.kubernetes.io/name: shipwright-triggers
182+
spec:
183+
replicas: 1
184+
selector:
185+
matchLabels:
186+
app.kubernetes.io/name: shipwright-triggers
187+
template:
188+
metadata:
189+
labels:
190+
app.kubernetes.io/name: shipwright-triggers
191+
spec:
192+
serviceAccountName: shipwright-triggers
193+
containers:
194+
- name: shipwright-triggers
195+
image: "quay.io/jkhelil/openshift-builds-triggers:latest"
196+
args:
197+
- --health-probe-bind-address
198+
- ":8081"
199+
imagePullPolicy: IfNotPresent
200+
ports:
201+
- name: webhook
202+
containerPort: 80
203+
protocol: TCP
204+
- name: probe
205+
containerPort: 8081
206+
protocol: TCP
207+
livenessProbe:
208+
httpGet:
209+
path: /healthz
210+
port: probe
211+
readinessProbe:
212+
httpGet:
213+
path: /readyz
214+
port: probe

0 commit comments

Comments
 (0)