blob: 16347964c0dc11ae6c4d27c9350783857776f8b1 [file] [log] [blame]
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +02001---
2apiVersion: apps/v1
3kind: Deployment
4metadata:
5 name: git
6 namespace: mulk
7 labels:
8 name: git
9 k8s-app: git
10spec:
11 replicas: 1
12 selector:
13 matchLabels:
14 k8s-app: git
15 name: git
16 template:
17 metadata:
18 labels:
19 name: git
20 k8s-app: git
21 spec:
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +020022 containers:
Matthias Andreas Benkardfaf5a092024-03-06 12:51:07 +010023 - name: cgit
Matthias Andreas Benkard65b41322026-11-04 11:41:16 +010024 image: docker.io/woahbase/alpine-cgit:x86_64_1.2.1_20210405
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +020025 imagePullPolicy: Always
26 env: []
Matthias Andreas Benkardfaf5a092024-03-06 12:51:07 +010027 command:
28 - /bin/sh
29 - -c
30 - apk update && apk add groff python3 py3-docutils py3-markdown py3-pygments && /init
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +020031 resources:
32 limits:
33 cpu: 2000m
34 memory: 100Mi
35 requests:
36 cpu: 10m
37 memory: 50Mi
38 ports:
39 - containerPort: 80
40 name: cgit-http
41 protocol: TCP
42 volumeMounts:
43 - name: data
44 mountPath: /home/git
45 - name: config
46 mountPath: /etc/cgitrc
47 subPath: cgitrc
48 readOnly: true
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +010049 - name: gitolite
Matthias Andreas Benkard7cc90d42026-11-05 14:43:06 +010050 image: docker.io/elsdoerfer/gitolite:v3.6.15-ubuntu-26.04-20260824.3
51 imagePullPolicy: IfNotPresent
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +010052 env: []
53 #tty: true
54 #stdin: true
55 #command:
56 # - /bin/cat
57 resources:
58 limits:
59 cpu: 2000m
60 memory: 100Mi
61 requests:
62 cpu: 10m
63 memory: 50Mi
64 ports:
65 - containerPort: 2222
66 name: gitolite-ssh
67 protocol: TCP
68 volumeMounts:
69 - name: data
70 mountPath: /home/git/repositories
71 subPath: repositories
72 #- name: data
73 # mountPath: /home/git/projects.list
74 # subPath: projects.list
75 - name: data
76 mountPath: /home/git/.gitolite
77 subPath: .gitolite
78 - name: data
79 mountPath: /home/git/.gitolite.rc
80 subPath: .gitolite.rc
81 - name: data
82 mountPath: /home/git/.ssh
83 subPath: .ssh
84 - name: ssh
85 mountPath: /etc/ssh
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +020086 volumes:
87 - name: data
88 persistentVolumeClaim:
89 claimName: git-data
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +010090 - name: ssh
91 persistentVolumeClaim:
92 claimName: git-ssh
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +020093 - name: config
94 configMap:
95 name: git-config
96---
97apiVersion: v1
98kind: Service
99metadata:
100 name: git-cgit
101 namespace: mulk
102 labels:
103 k8s-app: git
104 name: git-cgit
105spec:
106 selector:
107 k8s-app: git
108 type: ClusterIP
109 ports:
110 - name: http
111 port: 80
112 targetPort: cgit-http
113 protocol: TCP
114---
115apiVersion: v1
116kind: Service
117metadata:
118 name: git-gitolite
119 namespace: mulk
120 labels:
121 k8s-app: git
122 name: git-gitolite
123spec:
124 selector:
125 k8s-app: git
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100126 type: NodePort
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +0200127 ports:
128 - name: ssh
129 port: 22
130 targetPort: gitolite-ssh
131 protocol: TCP
132---
133apiVersion: v1
134kind: PersistentVolumeClaim
135metadata:
136 name: git-data
137 namespace: mulk
138 labels:
139 name: git-data
140 k8s-app: git
141spec:
142 accessModes:
143 - ReadWriteOnce
144 resources:
145 requests:
146 storage: 200Gi
147 storageClassName: local-path
148---
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100149apiVersion: v1
150kind: PersistentVolumeClaim
151metadata:
152 name: git-ssh
153 namespace: mulk
154 labels:
155 name: git-ssh
156 k8s-app: git
157spec:
158 accessModes:
159 - ReadWriteOnce
160 resources:
161 requests:
162 storage: 50Mi
163 storageClassName: local-path
164---
Matthias Andreas Benkard8528b522026-11-05 10:57:03 +0100165# TLS certificate for the cgit IngressRoute below. It used to be created
166# by cert-manager's ingress-shim from an nginx Ingress, which has been
167# removed; the HTTP-01 solver still goes through Traefik's nginx-class
168# compat provider (see the letsencrypt-prod ClusterIssuer).
169apiVersion: cert-manager.io/v1
170kind: Certificate
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +0200171metadata:
Matthias Andreas Benkard8528b522026-11-05 10:57:03 +0100172 name: git-cgit-cgi-tls
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +0200173 namespace: mulk
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +0200174spec:
Matthias Andreas Benkard8528b522026-11-05 10:57:03 +0100175 secretName: git-cgit-cgi-tls
176 dnsNames:
177 - git.benkard.de
178 issuerRef:
179 kind: ClusterIssuer
180 name: letsencrypt-prod
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +0200181---
Matthias Andreas Benkard8528b522026-11-05 10:57:03 +0100182# Traefik route for cgit. Traefik's ingress-nginx provider does not
183# support nginx snippet annotations, and it has no global per-host rate
Matthias Andreas Benkardb4f91a12026-11-04 21:36:23 +0100184# limit, so cgit gets a native IngressRoute instead.
185#
186# A crawler botnet with thousands of rotating IPs and browser user agents
187# hammers cgit; cap it at 5 r/s in total (not per client). A single router
188# keeps the limit in one bucket (each router gets its own limiter).
189apiVersion: traefik.io/v1alpha1
190kind: Middleware
191metadata:
192 name: git-cgit-ratelimit
193 namespace: mulk
194spec:
195 rateLimit:
196 average: 5
197 period: 1s
198 burst: 20
199 sourceCriterion:
200 requestHost: true
201---
202# Same as the rewrite-target of the Ingress above: strip a ".git" suffix
203# from the repository name and route everything to cgit.cgi.
204apiVersion: traefik.io/v1alpha1
205kind: Middleware
206metadata:
207 name: git-cgit-rewrite
208 namespace: mulk
209spec:
210 replacePathRegex:
211 regex: "^/(?:(.*)[.]git(/.*)?|(.*))$"
212 replacement: "/cgit/cgit.cgi/${1}${2}${3}"
213---
214apiVersion: traefik.io/v1alpha1
215kind: Middleware
216metadata:
217 name: git-cgit-https-redirect
218 namespace: mulk
219spec:
220 redirectScheme:
221 scheme: https
222 permanent: true
223---
224apiVersion: traefik.io/v1alpha1
225kind: IngressRoute
226metadata:
227 name: git-cgit-cgi
228 namespace: mulk
229spec:
230 entryPoints:
231 - websecure
232 routes:
233 - kind: Rule
234 match: Host(`git.benkard.de`)
235 middlewares:
236 - name: git-cgit-ratelimit
237 - name: git-cgit-rewrite
238 services:
239 - name: git-cgit
240 port: 80
241 tls:
242 secretName: git-cgit-cgi-tls
243---
244apiVersion: traefik.io/v1alpha1
245kind: IngressRoute
246metadata:
247 name: git-cgit-cgi-http
248 namespace: mulk
249spec:
250 entryPoints:
251 - web
252 routes:
253 - kind: Rule
254 match: Host(`git.benkard.de`)
255 middlewares:
256 - name: git-cgit-https-redirect
257 services:
258 - name: git-cgit
259 port: 80
260---
Matthias Andreas Benkardc7560352021-09-05 12:25:13 +0200261apiVersion: networking.k8s.io/v1
262kind: Ingress
263metadata:
264 name: git-cgit-assets
265 namespace: mulk
266 annotations:
267 cert-manager.io/cluster-issuer: letsencrypt-prod
268 kubernetes.io/ingress.class: nginx
269 nginx.ingress.kubernetes.io/rewrite-target: /cgit/$1
270spec:
271 rules:
272 - host: static.git.benkard.de
273 http:
274 paths:
275 - backend:
276 service:
277 name: git-cgit
278 port:
279 number: 80
280 path: /(.*)
281 pathType: ImplementationSpecific
282 tls:
283 - hosts:
284 - static.git.benkard.de
285 secretName: git-cgit-assets-tls
286---
287apiVersion: v1
288kind: ConfigMap
289metadata:
290 name: git-config
291 namespace: mulk
292data:
293 cgitrc: |-
294 css=https://static.git.benkard.de/cgit.css
295 logo=https://static.git.benkard.de/cgit.png
296
297 remove-suffix=1
298 enable-commit-graph=1
299 enable-index-links=1
300 enable-log-filecount=1
301 enable-log-linecount=1
302 enable-git-config=1
303 case-sensitive-sort=0
304
305 virtual-root=https://git.benkard.de/
306
307 #cache-size=10000
308 #cache-root=/var/cache/cgit
309
310 # needs Pygments
311 #source-filter=/usr/lib/cgit/filters/syntax-highlighting.py
312
313 about-filter=/usr/lib/cgit/filters/about-formatting.sh
314
315 clone-url=https://git.benkard.de/$CGIT_REPO_URL
316
317 readme=:README.md
318 readme=:README.markdown
319 readme=:README.html
320 readme=:README.txt
321 readme=:README
322
323 project-list=/home/git/projects.list
324 scan-path=/home/git/repositories/
325
326 #
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100327
328---
329
330apiVersion: batch/v1
331kind: CronJob
332
333metadata:
334 name: git-github-replication
335 namespace: mulk
336 labels: &labels
337 k8s-app: git
338
339spec:
340 schedule: "*/120 * * * *"
Matthias Andreas Benkardcbdcd902022-12-27 15:31:15 +0100341 concurrencyPolicy: Forbid
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100342
343 jobTemplate:
344
345 spec:
346 ttlSecondsAfterFinished: 3600
347
348 template:
349 metadata:
350 name: git-github-replication
351 labels: *labels
352
353 spec:
354 restartPolicy: OnFailure
355
356 volumes:
357 - name: github-secrets
358 secret:
359 secretName: github-secrets
Matthias Andreas Benkard11298da2023-04-02 18:27:17 +0200360 defaultMode: 0444
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100361 - name: data
362 persistentVolumeClaim:
363 claimName: git-data
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100364 - name: etc
365 emptyDir: {}
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100366
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100367 initContainers:
368 - name: init
369 image: docker.io/library/buildpack-deps:scm
Matthias Andreas Benkard11298da2023-04-02 18:27:17 +0200370 securityContext:
371 runAsUser: 100
372 runAsGroup: 101
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100373 command:
374 - bash
375 - -c
376 - |
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100377 echo git:x:106:107:Git:/home/git:/bin/sh >/etc/passwd
378 volumeMounts:
379 - name: etc
380 mountPath: /etc
381
382 containers:
383 - name: main
384 image: docker.io/library/buildpack-deps:scm
385 securityContext:
386 runAsUser: 106
387 runAsGroup: 107
388 command:
389 - bash
390 - -c
391 - |
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100392 for x in \
Matthias Andreas Benkard7f8981a2026-11-04 11:41:17 +0100393 kartipalist
394 do
395 if ! test -e "/git/repositories/kellertomaten/$x.git"; then
396 printf "SKIP %s / %s\n" kellertomaten "$x"
397 continue
398 fi
399
400 cd "/git/repositories/kellertomaten/$x.git"
401
402 for branch in master main
403 do
404 printf "COPY %s / %s / %s\n" kellertomaten "$x" "$branch"
405 git fetch "ssh://git@gitlab.benkard.de:32222/kellertomaten/${x}.git" "$branch:$branch" && \
406 ( git push "ssh://mulk@gerrit.benkard.de:29418/${x}.git" "$branch"; \
407 git push "git@github.com:kellertomaten/${x}.git" "$branch" )
408 done
409 done
410
411 for x in \
Matthias Andreas Benkard06e9d792024-03-06 12:49:24 +0100412 .github \
413 aendggner \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100414 aquifer \
415 benki \
416 cellspp \
417 cl-json-template \
418 cl-mulkutils \
419 cl-protocols \
420 cljssss-g \
Matthias Andreas Benkard06e9d792024-03-06 12:49:24 +0100421 demos \
Matthias Andreas Benkard7f8981a2026-11-04 11:41:17 +0100422 dose \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100423 fibers \
424 hellonet \
Matthias Andreas Benkard06e9d792024-03-06 12:49:24 +0100425 hello-world-ng \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100426 instadump \
Matthias Andreas Benkard11298da2023-04-02 18:27:17 +0200427 jgvariant \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100428 json-template-r6rs \
429 json-template-racket \
430 json-template-typed-racket \
Matthias Andreas Benkard06e9d792024-03-06 12:49:24 +0100431 kubeia \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100432 logikorr \
Matthias Andreas Benkard7f8981a2026-11-04 11:41:17 +0100433 mulkbav \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100434 mulkcms \
Matthias Andreas Benkard11298da2023-04-02 18:27:17 +0200435 mulkcms2 \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100436 mulkjournal \
437 mulklib \
Matthias Andreas Benkard11298da2023-04-02 18:27:17 +0200438 mulkontainers \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100439 mulkrypt-for-racket \
440 mulkyid \
441 objective-cl \
Matthias Andreas Benkard11298da2023-04-02 18:27:17 +0200442 quarkus-googlecloud-jsonlogging \
Matthias Andreas Benkard06e9d792024-03-06 12:49:24 +0100443 renovate-config \
444 rust-samples \
445 rust-tutorial \
446 sb-eval2 \
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100447 toilet
448 do
Matthias Andreas Benkard06e9d792024-03-06 12:49:24 +0100449 if ! test -e "/git/repositories/mulk/$x.git"; then
Matthias Andreas Benkard7f8981a2026-11-04 11:41:17 +0100450 printf "SKIP %s / %s\n" mulk "$x"
Matthias Andreas Benkard06e9d792024-03-06 12:49:24 +0100451 continue
452 fi
453
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100454 cd "/git/repositories/mulk/$x.git"
Matthias Andreas Benkarde96ddfb2024-03-06 12:50:00 +0100455
456 for branch in master main
457 do
Matthias Andreas Benkard7f8981a2026-11-04 11:41:17 +0100458 printf "COPY %s / %s / %s\n" mulk "$x" "$branch"
Matthias Andreas Benkarde96ddfb2024-03-06 12:50:00 +0100459 git fetch "https://gitlab.benkard.de/mulk/${x}.git" "$branch:$branch" && \
460 ( git push "ssh://mulk@gerrit.benkard.de:29418/${x}.git" "$branch"; \
461 git push "git@github.com:benkard/${x}.git" "$branch" )
462 done
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100463 done
Matthias Andreas Benkard7f8981a2026-11-04 11:41:17 +0100464
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100465 true
Matthias Andreas Benkard11298da2023-04-02 18:27:17 +0200466 env:
467 - name: HOME
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100468 value: /home/git
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100469 resources:
470 limits:
471 memory: 100Mi
472 requests:
473 cpu: 20m
474 memory: 100Mi
475 volumeMounts:
476 - name: github-secrets
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100477 mountPath: /home/git/.ssh
Matthias Andreas Benkard7d78f7f2021-12-28 17:44:20 +0100478 readOnly: true
479 - name: data
480 mountPath: /git
Matthias Andreas Benkard8c9b6132024-03-06 12:51:33 +0100481 - name: etc
482 subPath: passwd
483 mountPath: /etc/passwd