@catladder/cli 0.0.0-next-1cd29c1f → 0.0.0-next-52feb889

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/bundles/catenv/index.js +45 -9
  2. package/dist/bundles/cli/index.js +125 -11
  3. package/dist/bundles/runner-images/agent-claude/Dockerfile +5 -0
  4. package/dist/bundles/runner-images/docker-build/Dockerfile +26 -0
  5. package/dist/bundles/runner-images/docker-build/scripts/ensureMeteorDockerfile +55 -0
  6. package/dist/bundles/runner-images/docker-build/scripts/ensureNginxDockerfile +85 -0
  7. package/dist/bundles/runner-images/docker-build/scripts/ensureNodeDockerfile +50 -0
  8. package/dist/bundles/runner-images/gcloud/Dockerfile +3 -0
  9. package/dist/bundles/runner-images/jobs-default/Dockerfile +22 -0
  10. package/dist/bundles/runner-images/jobs-meteor/Dockerfile +7 -0
  11. package/dist/bundles/runner-images/jobs-testing-chrome/Dockerfile +15 -0
  12. package/dist/bundles/runner-images/kubernetes/Dockerfile +26 -0
  13. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.lock +9 -0
  14. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.yaml +14 -0
  15. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/README.md +24 -0
  16. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mailhog-5.0.1.tgz +0 -0
  17. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mongodb-12.1.27.tgz +0 -0
  18. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/myvalues.yaml +15 -0
  19. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/_helpers.tpl +202 -0
  20. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cloudsql-proxy-credentials.yml +10 -0
  21. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cronjobs.yml +69 -0
  22. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.autoscaler.yml +19 -0
  23. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.yml +103 -0
  24. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.configmap.yml +27 -0
  25. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.secrets.yml +10 -0
  26. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.redirects.yaml +91 -0
  27. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.yaml +48 -0
  28. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.jobs.yml +70 -0
  29. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.service.yaml +31 -0
  30. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.volumes.yml +20 -0
  31. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.deployment.yml +104 -0
  32. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.service.yaml +34 -0
  33. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mailhog.ingress.yaml +35 -0
  34. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.deployment.yml +45 -0
  35. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.service.yml +24 -0
  36. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mongodb.backup.cronjob.yml +120 -0
  37. package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/values.yaml +154 -0
  38. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesCreateSecret +11 -0
  39. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesDelete +5 -0
  40. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesDeploy +57 -0
  41. package/dist/bundles/runner-images/kubernetes/scripts/kubernetesRollback +5 -0
  42. package/dist/bundles/runner-images/semantic-release/Dockerfile +24 -0
  43. package/dist/bundles/runner-images/semantic-release/scripts/semanticRelease +67 -0
  44. package/dist/cli/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.d.ts +12 -0
  45. package/dist/cli/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.js +64 -0
  46. package/dist/cli/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.js.map +1 -0
  47. package/dist/cli/src/apps/cli/commands/project/setup/index.js +3 -0
  48. package/dist/cli/src/apps/cli/commands/project/setup/index.js.map +1 -1
  49. package/dist/cli/src/config/getProjectConfig.d.ts +6 -0
  50. package/dist/cli/src/config/getProjectConfig.js +10 -1
  51. package/dist/cli/src/config/getProjectConfig.js.map +1 -1
  52. package/dist/cli/src/gcloud/cloudSql/copyDb.js +6 -2
  53. package/dist/cli/src/gcloud/cloudSql/copyDb.js.map +1 -1
  54. package/dist/pipeline/src/constants.js +1 -1
  55. package/dist/pipeline/src/context/index.d.ts +1 -0
  56. package/dist/pipeline/src/context/index.js +1 -0
  57. package/dist/pipeline/src/context/index.js.map +1 -1
  58. package/dist/pipeline/src/customImages/shippedImages.js +3 -1
  59. package/dist/pipeline/src/customImages/shippedImages.js.map +1 -1
  60. package/dist/pipeline/src/deploy/cloudRun/createJobs/execute/schedules.js +18 -3
  61. package/dist/pipeline/src/deploy/cloudRun/createJobs/execute/schedules.js.map +1 -1
  62. package/dist/pipeline/src/deploy/types/googleCloudRun.d.ts +5 -1
  63. package/dist/pipeline/src/store/index.d.ts +4 -0
  64. package/dist/pipeline/src/store/index.js +12 -3
  65. package/dist/pipeline/src/store/index.js.map +1 -1
  66. package/dist/runner-images/agent-claude/Dockerfile +5 -0
  67. package/dist/runner-images/docker-build/Dockerfile +26 -0
  68. package/dist/runner-images/docker-build/scripts/ensureMeteorDockerfile +55 -0
  69. package/dist/runner-images/docker-build/scripts/ensureNginxDockerfile +85 -0
  70. package/dist/runner-images/docker-build/scripts/ensureNodeDockerfile +50 -0
  71. package/dist/runner-images/gcloud/Dockerfile +3 -0
  72. package/dist/runner-images/jobs-default/Dockerfile +22 -0
  73. package/dist/runner-images/jobs-meteor/Dockerfile +7 -0
  74. package/dist/runner-images/jobs-testing-chrome/Dockerfile +15 -0
  75. package/dist/runner-images/kubernetes/Dockerfile +26 -0
  76. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.lock +9 -0
  77. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.yaml +14 -0
  78. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/README.md +24 -0
  79. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mailhog-5.0.1.tgz +0 -0
  80. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mongodb-12.1.27.tgz +0 -0
  81. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/myvalues.yaml +15 -0
  82. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/_helpers.tpl +202 -0
  83. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cloudsql-proxy-credentials.yml +10 -0
  84. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cronjobs.yml +69 -0
  85. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.autoscaler.yml +19 -0
  86. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.yml +103 -0
  87. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.configmap.yml +27 -0
  88. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.secrets.yml +10 -0
  89. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.redirects.yaml +91 -0
  90. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.yaml +48 -0
  91. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.jobs.yml +70 -0
  92. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.service.yaml +31 -0
  93. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.volumes.yml +20 -0
  94. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.deployment.yml +104 -0
  95. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.service.yaml +34 -0
  96. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mailhog.ingress.yaml +35 -0
  97. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.deployment.yml +45 -0
  98. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.service.yml +24 -0
  99. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mongodb.backup.cronjob.yml +120 -0
  100. package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/values.yaml +154 -0
  101. package/dist/runner-images/kubernetes/scripts/kubernetesCreateSecret +11 -0
  102. package/dist/runner-images/kubernetes/scripts/kubernetesDelete +5 -0
  103. package/dist/runner-images/kubernetes/scripts/kubernetesDeploy +57 -0
  104. package/dist/runner-images/kubernetes/scripts/kubernetesRollback +5 -0
  105. package/dist/runner-images/semantic-release/Dockerfile +24 -0
  106. package/dist/runner-images/semantic-release/scripts/semanticRelease +67 -0
  107. package/dist/tsconfig.tsbuildinfo +1 -1
  108. package/package.json +3 -2
  109. package/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.ts +61 -0
  110. package/src/apps/cli/commands/project/setup/index.ts +3 -0
  111. package/src/config/getProjectConfig.ts +9 -0
  112. package/src/gcloud/cloudSql/copyDb.ts +7 -2
@@ -0,0 +1,70 @@
1
+
2
+ {{ $jobs := .Values.jobs }}
3
+ {{ if $jobs }}
4
+ {{ $context := . }}
5
+ {{ range $key, $job := $jobs -}}
6
+
7
+ {{- $name := (kindIs "map" $jobs) | ternary $key $job.name -}}
8
+ {{- $defaultIndex := (kindIs "map" $jobs) | ternary 0 $key -}}
9
+
10
+ apiVersion: batch/v1
11
+ kind: Job
12
+
13
+ metadata:
14
+ name: {{ include "fullname" $context | trunc 24 }}-{{ $name | trunc 35 }}
15
+ namespace: {{ $context.Release.Namespace }}
16
+ labels:
17
+ app: {{ $context.Release.Name }}
18
+ app.kubernetes.io/managed-by: {{$context.Release.Service | quote }}
19
+ app.kubernetes.io/instance: {{$context.Release.Name | quote }}
20
+ helm.sh/chart: "{{$context.Chart.Name}}-{{$context.Chart.Version}}"
21
+ annotations:
22
+ # This is what defines this resource as a hook. Without this line, the
23
+ # job is considered part of the release.
24
+ "helm.sh/hook": "{{- default "post-install,post-upgrade" $job.hook -}}"
25
+ "helm.sh/hook-weight": "{{- default $defaultIndex $job.hookWeight -}}"
26
+ "helm.sh/hook-delete-policy": "{{- default "hook-succeeded,before-hook-creation" $job.hookDeletePolicy -}}"
27
+ spec:
28
+ template:
29
+ spec:
30
+ {{- if $context.Values.image.pullSecret }}
31
+ imagePullSecrets:
32
+ - name: {{ $context.Values.image.pullSecret }}
33
+ {{- end }}
34
+ restartPolicy: Never
35
+
36
+ containers:
37
+ - name: {{ $name }}-job
38
+ {{include "env" $context | nindent 8}}
39
+ {{if $job.image -}}
40
+ image: "{{ $job.image }}"
41
+ {{else}}
42
+ image: "{{ template "appImage" $context}}"
43
+ {{end}}
44
+ imagePullPolicy: {{ $context.Values.image.pullPolicy }}
45
+ # see https://github.com/kubernetes/kubernetes/issues/25908#issuecomment-308569672
46
+ command: ["/bin/sh", "-c"]
47
+ args:
48
+ - |
49
+ trap "touch /tmp/pod/main-terminated" EXIT
50
+ {{$job.command}}
51
+ volumeMounts:
52
+ - mountPath: /tmp/pod
53
+ name: tmp-pod
54
+ resources:
55
+ {{ toYaml $context.Values.jobDefaults.resources | indent 10 }}
56
+
57
+ {{if $context.Values.cloudsql.enabled}}
58
+ - {{- include "cloudSqlContainer" $context | nindent 8 }}
59
+ {{- end }}
60
+ volumes:
61
+ - name: tmp-pod
62
+ emptyDir: {}
63
+ {{if $context.Values.cloudsql.enabled}}
64
+ - {{- include "cloudSqlCredentialsVolume" $context | nindent 10 }}
65
+ {{- end }}
66
+
67
+
68
+ ---
69
+ {{- end }}
70
+ {{- end }}
@@ -0,0 +1,31 @@
1
+ {{- if .Values.application.enabled -}}
2
+ {{- $context := . }}
3
+ apiVersion: v1
4
+ kind: Service
5
+ metadata:
6
+ labels:
7
+ app: {{ template "fullname" . }}-app
8
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
9
+ release: {{ .Release.Name }}
10
+ heritage: {{ .Release.Service }}
11
+ name: {{ template "fullname" . }}-app
12
+ namespace: {{ .Release.Namespace }}
13
+ spec:
14
+ type: {{ .Values.service.type }}
15
+ ports:
16
+ - port: {{ .Values.service.externalPort }}
17
+ targetPort: {{ .Values.service.internalPort }}
18
+ protocol: TCP
19
+ name: {{ template "fullname" . }}-service
20
+ {{- range $ports := .Values.service.additionalPorts }}
21
+ - port: {{ required ".Values.service.additionalPorts.port is required" $ports.port }}
22
+ targetPort: {{ $ports.targetPort | default $ports.port }}
23
+ protocol: {{ $ports.protocol | default "TCP" }}
24
+ name: {{ template "fullname" $context }}-{{ required ".Values.service.additionalPorts.nameSuffix is required" $ports.nameSuffix }}-service
25
+ {{- end }}
26
+ selector:
27
+ app: {{ template "fullname" . }}-app
28
+ release: {{ .Release.Name }}
29
+ sessionAffinity: None
30
+ type: NodePort
31
+ {{- end -}}
@@ -0,0 +1,20 @@
1
+
2
+ {{ $context := . }}
3
+ {{- range $key, $volume := .Values.application.volumes }}
4
+
5
+ kind: PersistentVolumeClaim
6
+ apiVersion: v1
7
+ metadata:
8
+ name: {{ template "fullname" $context }}-{{$volume.name}}
9
+ labels:
10
+ app: {{ $context.Release.Name }}
11
+ namespace: {{ $context.Release.Namespace }}
12
+ spec:
13
+ resources:
14
+ requests:
15
+ storage: {{ default "10Gi" $volume.size }}
16
+ accessModes:
17
+ - ReadWriteOnce
18
+ ---
19
+ {{- end }}
20
+
@@ -0,0 +1,104 @@
1
+ {{- if .Values.application.worker.enabled -}}
2
+
3
+ {{ $context := . }}
4
+
5
+ apiVersion: apps/v1
6
+ kind: Deployment
7
+ metadata:
8
+ annotations:
9
+ name: {{ template "fullname" $context }}-worker
10
+ labels:
11
+ app: {{ .Release.Name }}
12
+ namespace: {{ .Release.Namespace }}
13
+ spec:
14
+ replicas: 1
15
+ revisionHistoryLimit: 2
16
+ selector:
17
+ matchLabels:
18
+ app: {{ template "fullname" $context }}-worker
19
+ release: {{ .Release.Name }}
20
+ strategy:
21
+ rollingUpdate:
22
+ maxSurge: 1
23
+ maxUnavailable: 1
24
+ type: RollingUpdate
25
+ template:
26
+ metadata:
27
+ labels:
28
+ app: {{ template "fullname" $context }}-worker
29
+ release: {{ .Release.Name }}
30
+ spec:
31
+ {{- if .Values.image.pullSecret }}
32
+ imagePullSecrets:
33
+ - name: {{ .Values.image.pullSecret }}
34
+ {{- end }}
35
+ dnsPolicy: ClusterFirst
36
+ restartPolicy: Always
37
+ schedulerName: default-scheduler
38
+ securityContext: {}
39
+ terminationGracePeriodSeconds: 30
40
+ tolerations:
41
+ {{- if and .Values.global.ENV_SHORT (eq .Values.global.ENV_SHORT "review")}}
42
+ - key: "stage"
43
+ operator: "Equal"
44
+ value: "review"
45
+ effect: "NoSchedule"
46
+ {{- end }}
47
+ {{- if .Values.application.worker.useExclusivePool }}
48
+ - key: "ch-panter-sla"
49
+ operator: "Equal"
50
+ value: "1"
51
+ effect: "NoSchedule"
52
+ {{- end }}
53
+ containers:
54
+ - name: {{ template "fullname" $context }}-worker
55
+ image: "{{ template "appImage" .}}"
56
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
57
+ command: ["/bin/sh", "-c"]
58
+ args:
59
+ - |
60
+ trap "touch /tmp/pod/main-terminated" EXIT
61
+ {{join " " (default .Values.application.command .Values.application.worker.command)}}
62
+
63
+ {{include "env" $context | nindent 8}}
64
+ - name: BACKGROUND_JOBS_ENABLED
65
+ value: "true"
66
+ - name: IS_WORKER
67
+ value: "true"
68
+
69
+ {{if .Values.application.worker.livenessProbe}}
70
+ livenessProbe:
71
+ httpGet:
72
+ {{ toYaml .Values.application.livenessProbe.httpGet | indent 12 }}
73
+ initialDelaySeconds: 10
74
+ timeoutSeconds: 10
75
+ periodSeconds: 30
76
+ failureThreshold: 100 # dont kill worker pod too early when cpu intensive stuff is done
77
+ {{- end }}
78
+ ports:
79
+ - containerPort: 8080
80
+ protocol: TCP
81
+ resources:
82
+ {{ toYaml .Values.application.worker.resources | indent 10 }}
83
+ terminationMessagePath: /dev/termination-log
84
+ terminationMessagePolicy: File
85
+ volumeMounts:
86
+ {{- range $key, $volume := .Values.application.volumes }}
87
+ - mountPath: {{$volume.mountPath}}
88
+ name: {{ template "fullname" $context }}-{{$volume.name}}
89
+ {{- end }}
90
+ {{if .Values.cloudsql.enabled}}
91
+ - {{- include "cloudSqlContainer" $context | nindent 8 }}
92
+ {{- end }}
93
+ volumes:
94
+ - name: tmp-pod
95
+ emptyDir: {}
96
+ {{- range $key, $volume := .Values.application.volumes }}
97
+ - name: {{ template "fullname" $context }}-{{$volume.name}}
98
+ persistentVolumeClaim:
99
+ claimName: {{ template "fullname" $context }}-{{$volume.name}}
100
+ {{- end }}
101
+ {{if .Values.cloudsql.enabled}}
102
+ - {{- include "cloudSqlCredentialsVolume" $context | nindent 10 }}
103
+ {{- end }}
104
+ {{- end -}}
@@ -0,0 +1,34 @@
1
+
2
+ {{- if .Values.application.worker.enabled -}}
3
+ {{- if .Values.application.worker.service.enabled -}}
4
+ {{- $context := . }}
5
+ apiVersion: v1
6
+ kind: Service
7
+ metadata:
8
+ labels:
9
+ app: {{ template "fullname" . }}-worker
10
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
11
+ release: {{ .Release.Name }}
12
+ heritage: {{ .Release.Service }}
13
+ name: {{ template "fullname" . }}-worker
14
+ namespace: {{ .Release.Namespace }}
15
+ spec:
16
+ type: {{ .Values.application.worker.service.type }}
17
+ ports:
18
+ - port: {{ .Values.application.worker.service.externalPort }}
19
+ targetPort: {{ .Values.application.worker.service.internalPort }}
20
+ protocol: TCP
21
+ name: {{ template "fullname" . }}-worker-service
22
+ {{- range $ports := .Values.application.worker.service.additionalPorts }}
23
+ - port: {{ required ".Values.application.worker.service.additionalPorts.port is required" $ports.port }}
24
+ targetPort: {{ $ports.targetPort | default $ports.port }}
25
+ protocol: {{ $ports.protocol | default "TCP" }}
26
+ name: {{ template "fullname" $context }}-{{ required ".Values.application.worker.service.additionalPorts.nameSuffix is required" $ports.nameSuffix }}-service
27
+ {{- end }}
28
+ selector:
29
+ app: {{ template "fullname" . }}-worker
30
+ release: {{ .Release.Name }}
31
+ sessionAffinity: None
32
+ type: NodePort
33
+ {{- end -}}
34
+ {{- end -}}
@@ -0,0 +1,35 @@
1
+ {{- if .Values.mailhog.enabled -}}
2
+ #{{ $host := (default "mailhog.{{ template 'host' . }}" .Values.mailhog.host ) | quote }}
3
+ {{ $host := default (printf "mailhog.%s" (include "host" .)) .Values.mailhog.host }}
4
+
5
+
6
+ apiVersion: networking.k8s.io/v1
7
+ kind: Ingress
8
+ metadata:
9
+ name: {{ .Values.mailhog.fullnameOverride }} # unfortunatly due to history reasons we override the release name
10
+ labels:
11
+ app: {{ template "name" . }}
12
+ annotations:
13
+ kubernetes.io/ingress.class: nginx
14
+ kubernetes.io/tls-acme: "true"
15
+ spec:
16
+ rules:
17
+ - host: {{ $host }}
18
+ http:
19
+ paths:
20
+ - path: /
21
+ pathType: Prefix
22
+ backend:
23
+ service:
24
+ name: {{ .Values.mailhog.fullnameOverride }} # unfortunatly due to history reasons we override the release name
25
+ port:
26
+ number: 8025
27
+ tls:
28
+ - hosts:
29
+ - {{ $host }}
30
+ secretName: {{ $host | trunc 59 | trimSuffix "." }}-tls
31
+
32
+ {{- end -}}
33
+
34
+
35
+
@@ -0,0 +1,45 @@
1
+ {{- if (.Values.maintenance) }}
2
+ apiVersion: apps/v1
3
+ kind: Deployment
4
+ metadata:
5
+ annotations:
6
+ name: {{ template "fullname" . }}-maintenance
7
+ labels:
8
+ app: {{ .Release.Name }}
9
+ namespace: {{ .Release.Namespace }}
10
+ spec:
11
+ replicas: 1
12
+ selector:
13
+ matchLabels:
14
+ app: {{ template "fullname" . }}-maintenance
15
+ release: {{ .Release.Name }}
16
+ strategy:
17
+ rollingUpdate:
18
+ maxSurge: 1
19
+ maxUnavailable: 1
20
+ type: RollingUpdate
21
+ template:
22
+ metadata:
23
+ labels:
24
+ app: {{ template "fullname" . }}-maintenance
25
+ release: {{ .Release.Name }}
26
+ spec:
27
+ {{- if .Values.image.pullSecret }}
28
+ imagePullSecrets:
29
+ - name: {{ .Values.image.pullSecret }}
30
+ {{- end }}
31
+ containers:
32
+ - image: {{ .Values.maintenance.image }}
33
+ imagePullPolicy: Always
34
+ name: {{ template "fullname" . }}-maintenance
35
+ resources: {}
36
+ securityContext:
37
+ privileged: false
38
+ terminationMessagePath: /dev/termination-log
39
+ terminationMessagePolicy: File
40
+ dnsPolicy: ClusterFirst
41
+ restartPolicy: Always
42
+ schedulerName: default-scheduler
43
+ securityContext: {}
44
+ terminationGracePeriodSeconds: 30
45
+ {{- end }}
@@ -0,0 +1,24 @@
1
+ {{- if (.Values.maintenance) }}
2
+ apiVersion: v1
3
+ kind: Service
4
+ metadata:
5
+ annotations:
6
+ name: {{ template "fullname" . }}-maintenance
7
+ labels:
8
+ app: {{ .Release.Name }}
9
+ namespace: {{ .Release.Namespace }}
10
+ spec:
11
+ ports:
12
+ - port: 80
13
+ protocol: TCP
14
+ targetPort: 80
15
+ name: {{ template "fullname" . }}-maintenance-service
16
+ selector:
17
+ app: {{ template "fullname" . }}-maintenance
18
+ release: {{ .Release.Name }}
19
+ sessionAffinity: None
20
+ type: ClusterIP
21
+ status:
22
+ loadBalancer: {}
23
+
24
+ {{- end }}
@@ -0,0 +1,120 @@
1
+ {{- if and (.Values.mongodb.enabled) (.Values.mongodb.backup.enabled) }}
2
+
3
+ apiVersion: batch/v1
4
+ kind: CronJob
5
+ metadata:
6
+ name: {{ template "fullname" . }}-mongodb-backup
7
+ labels:
8
+ app: {{ .Release.Name }}
9
+ namespace: {{ .Release.Namespace }}
10
+
11
+ spec:
12
+ schedule: {{.Values.mongodb.backup.schedule }}
13
+ jobTemplate:
14
+ spec:
15
+ template:
16
+ spec:
17
+ serviceAccountName: {{ template "fullname" . }}-mongodb-backup
18
+ restartPolicy: OnFailure
19
+ containers:
20
+ - name: backup-cron
21
+
22
+ env:
23
+ - name: M_RELEASE_NAME
24
+ value: {{ template "fullname" . }}-mongodb
25
+ - name: MONGODB_ROOT_PASSWORD
26
+ valueFrom:
27
+ secretKeyRef:
28
+ name: {{ template "fullname" $ }}-app-secrets
29
+ key: MONGODB_ROOT_PASSWORD
30
+ - name: VSC_NAME
31
+ value: {{ .Values.mongodb.backup.volumeSnapshotClass }}
32
+ image: {{ .Values.mongodb.backup.image }}
33
+ imagePullPolicy: IfNotPresent
34
+ command:
35
+ - /bin/bash
36
+ - -i
37
+ - -c
38
+ - |
39
+ set -e
40
+ echo alias M_CMD=\'mongo admin --host {{ .Values.mongodb.backup.hostToBackup }} {{- if .Values.mongodb.auth.enabled }} --authenticationDatabase admin -u root -p "\"${MONGODB_ROOT_PASSWORD}\"" {{- end }} --quiet --eval\' >> ~/.bashrc
41
+ source ~/.bashrc
42
+ echo -e "[+] Check if it is a Primary node to make it stepDown\n"
43
+ if [[ `M_CMD " db.runCommand( { isMaster: 1 } )['ismaster']"` != "false" ]]
44
+ then
45
+ echo -e "[+] Stepping Down\n"
46
+ M_CMD "rs.stepDown()"
47
+ fi
48
+ echo -e "[+] Send Slave to Freeze\n"
49
+ M_CMD "rs.freeze(99999999999)"
50
+ export E_TIME=$(date +%s)
51
+ echo -e "[+] Creating snapshot object\n"
52
+ cat <<EOF | kubectl apply -f -
53
+ apiVersion: snapshot.storage.k8s.io/v1beta1
54
+ kind: VolumeSnapshot
55
+ metadata:
56
+ name: snapshot-${M_RELEASE_NAME}-${E_TIME}
57
+ spec:
58
+ volumeSnapshotClassName: ${VSC_NAME}
59
+ source:
60
+ persistentVolumeClaimName: {{ .Values.mongodb.backup.pvcToBackup }}
61
+ EOF
62
+ echo -e "[+] Waiting for snapshot to finish\n"
63
+ while : ; do
64
+ result=$(kubectl get volumesnapshot -o custom-columns='READY:.status.readyToUse' --field-selector metadata.name=snapshot-${M_RELEASE_NAME}-${E_TIME} | grep -v READY)
65
+ [[ "${result}" == "true" ]] && break
66
+ echo "[-] still waiting for snapshot to be ready .. "
67
+ sleep 1
68
+ done
69
+ echo -e "[+] Snapshot finished, unfreeze Slave\n"
70
+ M_CMD "rs.freeze(0)"
71
+ echo -e "[+] Snapshotting finished successfully\n"
72
+ kubectl get volumesnapshots --no-headers --output=custom-columns="NAME:metadata.name,CREATED:status.creationTime" | while read name creation; do
73
+ if [[ "${name}" =~ ^snapshot-$M_RELEASE_NAME-[0-9]*$ ]] && [[ "${creation}" < "$(date --date "now 90 days ago" +%F)" ]]; then
74
+ echo "[+] Removing expired snapshot ${name} created on ${creation}"
75
+ kubectl delete volumesnapshot "${name}"
76
+ fi
77
+ done
78
+ ---
79
+
80
+ apiVersion: v1
81
+ kind: ServiceAccount
82
+ metadata:
83
+ name: {{ template "fullname" . }}-mongodb-backup
84
+ ---
85
+
86
+ apiVersion: rbac.authorization.k8s.io/v1
87
+ kind: Role
88
+ metadata:
89
+ name: {{ template "fullname" . }}-mongodb-backup
90
+ rules:
91
+ - apiGroups:
92
+ - ""
93
+ resources:
94
+ - services
95
+ verbs:
96
+ - get
97
+ - list
98
+ - watch
99
+ - apiGroups:
100
+ - "snapshot.storage.k8s.io/v1beta1"
101
+ - "snapshot.storage.k8s.io"
102
+ resources:
103
+ - "volumesnapshots"
104
+ verbs:
105
+ - "*"
106
+ ---
107
+ apiVersion: rbac.authorization.k8s.io/v1
108
+ kind: RoleBinding
109
+ metadata:
110
+ name: {{ template "fullname" . }}-mongodb-backup
111
+ roleRef:
112
+ kind: Role
113
+ name: {{ template "fullname" . }}-mongodb-backup
114
+ apiGroup: rbac.authorization.k8s.io
115
+ subjects:
116
+ - kind: ServiceAccount
117
+ name: {{ template "fullname" . }}-mongodb-backup
118
+
119
+
120
+ {{- end }}
@@ -0,0 +1,154 @@
1
+ # Default values for manulstack helm chart.
2
+ # This is a YAML-formatted file.
3
+ # Declare variables to be passed into your templates.
4
+
5
+ global:
6
+ componentName: web
7
+ ENV_SHORT: dev
8
+ BUILD_ID:
9
+ image:
10
+ repository:
11
+ name:
12
+ pullPolicy: Always
13
+ pullSecret: gitlab-registry
14
+
15
+ service:
16
+ type: ClusterIP
17
+ externalPort: 80
18
+ internalPort: 8080
19
+ additionalPorts: []
20
+
21
+ env:
22
+ public:
23
+ NODE_ENV: production
24
+ TZ: Europe/Zurich
25
+ secret: {}
26
+
27
+ ingress:
28
+ enabled: true
29
+ annotations:
30
+ kubernetes.io/ingress.class: nginx
31
+ kubernetes.io/tls-acme: "true"
32
+ nginx.ingress.kubernetes.io/affinity: cookie
33
+ nginx.ingress.kubernetes.io/affinity-mode: persistent
34
+ nginx.ingress.kubernetes.io/session-cookie-hash: sha1
35
+ nginx.ingress.kubernetes.io/session-cookie-name: route
36
+ nginx.ingress.kubernetes.io/session-cookie-path: /
37
+ tls: []
38
+
39
+ jobDefaults:
40
+ resources:
41
+ limits:
42
+ cpu: 1000m
43
+ requests:
44
+ cpu: 50m
45
+ memory: 350Mi
46
+
47
+ application:
48
+ enabled: true
49
+ replicas: 1
50
+ hostCanonical:
51
+ command:
52
+ # these requests are usually overridden by the gitlab include and values
53
+ resources:
54
+ limits:
55
+ cpu: 1000m
56
+ memory: 600Mi
57
+ requests:
58
+ cpu: 50m
59
+ memory: 150Mi
60
+ updateStrategy:
61
+ rollingUpdate:
62
+ maxSurge: 1
63
+ maxUnavailable: 0
64
+ type: RollingUpdate
65
+
66
+ worker:
67
+ enabled: false
68
+ useExclusivePool: false
69
+ service:
70
+ enabled: false
71
+ type: ClusterIP
72
+ externalPort: 80
73
+ internalPort: 8080
74
+ additionalPorts: []
75
+ livenessProbe: true
76
+ resources:
77
+ limits:
78
+ cpu: 1000m
79
+ memory: 1000Mi
80
+ requests:
81
+ cpu: 50m
82
+ memory: 350Mi
83
+ startupProbe:
84
+ httpGet:
85
+ path: /__health
86
+ port: 8080
87
+ httpHeaders:
88
+ - name: X-PAN-HEALTHCHECK
89
+ value: startup
90
+ failureThreshold: 60
91
+ timeoutSeconds: 3
92
+ periodSeconds: 5
93
+ livenessProbe:
94
+ httpGet:
95
+ path: /__health
96
+ port: 8080
97
+ httpHeaders:
98
+ - name: X-PAN-HEALTHCHECK
99
+ value: liveness
100
+ periodSeconds: 5
101
+ timeoutSeconds: 10
102
+ readinessProbe:
103
+ httpGet:
104
+ path: /__health
105
+ port: 8080
106
+ httpHeaders:
107
+ - name: X-PAN-HEALTHCHECK
108
+ value: readiness
109
+ failureThreshold: 3
110
+ timeoutSeconds: 3
111
+ periodSeconds: 5
112
+ successThreshold: 1
113
+
114
+ gitlab:
115
+ visualReviewEnabled: false
116
+ app:
117
+ env:
118
+ projectPath:
119
+ mergeRequestId:
120
+ projectId:
121
+
122
+ ## features
123
+
124
+ mongodb:
125
+ enabled: false
126
+ dbName: app
127
+ backup:
128
+ enabled: false
129
+ # see https://github.com/bitnami/charts/issues/10264#issuecomment-1181574288
130
+ livenessProbe:
131
+ enabled: false
132
+ customLivenessProbe:
133
+ exec:
134
+ command:
135
+ - sh
136
+ - -c
137
+ - mongo --port $MONGODB_PORT_NUMBER --eval "db.adminCommand('ping')"
138
+ readinessProbe:
139
+ enabled: false
140
+ customReadinessProbe:
141
+ exec:
142
+ command:
143
+ - sh
144
+ - -c
145
+ - mongo --port $MONGODB_PORT_NUMBER --eval 'db.isMaster().ismaster || db.isMaster().secondary' | grep -q 'true'
146
+
147
+ secretsFromOtherComponent: {}
148
+ mapServiceUrlToEnv: {}
149
+ cloudsql:
150
+ enabled: false
151
+
152
+ mailhog:
153
+ enabled: false
154
+ useOauth: true
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "KUBE_NAMESPACE: '$KUBE_NAMESPACE', KUBE_DOCKER_IMAGE_PULL_SECRET: '$KUBE_DOCKER_IMAGE_PULL_SECRET'"
5
+ kubectl create secret -n "$KUBE_NAMESPACE" \
6
+ docker-registry $KUBE_DOCKER_IMAGE_PULL_SECRET \
7
+ --docker-server="$DOCKER_REGISTRY" \
8
+ --docker-username="${CI_DEPLOY_USER:-$CI_REGISTRY_USER}" \
9
+ --docker-password="${CI_DEPLOY_PASSWORD:-$CI_REGISTRY_PASSWORD}" \
10
+ --docker-email="$GITLAB_USER_EMAIL" \
11
+ -o yaml --dry-run | kubectl replace -n "$KUBE_NAMESPACE" --force -f -
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "Delete $RELEASE_NAME"
5
+ helm uninstall "$RELEASE_NAME" --namespace "$KUBE_NAMESPACE"