@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.
- package/dist/bundles/catenv/index.js +45 -9
- package/dist/bundles/cli/index.js +125 -11
- package/dist/bundles/runner-images/agent-claude/Dockerfile +5 -0
- package/dist/bundles/runner-images/docker-build/Dockerfile +26 -0
- package/dist/bundles/runner-images/docker-build/scripts/ensureMeteorDockerfile +55 -0
- package/dist/bundles/runner-images/docker-build/scripts/ensureNginxDockerfile +85 -0
- package/dist/bundles/runner-images/docker-build/scripts/ensureNodeDockerfile +50 -0
- package/dist/bundles/runner-images/gcloud/Dockerfile +3 -0
- package/dist/bundles/runner-images/jobs-default/Dockerfile +22 -0
- package/dist/bundles/runner-images/jobs-meteor/Dockerfile +7 -0
- package/dist/bundles/runner-images/jobs-testing-chrome/Dockerfile +15 -0
- package/dist/bundles/runner-images/kubernetes/Dockerfile +26 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.lock +9 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.yaml +14 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/README.md +24 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mailhog-5.0.1.tgz +0 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mongodb-12.1.27.tgz +0 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/myvalues.yaml +15 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/_helpers.tpl +202 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cloudsql-proxy-credentials.yml +10 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cronjobs.yml +69 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.autoscaler.yml +19 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.yml +103 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.configmap.yml +27 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.secrets.yml +10 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.redirects.yaml +91 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.yaml +48 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.jobs.yml +70 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.service.yaml +31 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.volumes.yml +20 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.deployment.yml +104 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.service.yaml +34 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mailhog.ingress.yaml +35 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.deployment.yml +45 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.service.yml +24 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mongodb.backup.cronjob.yml +120 -0
- package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/values.yaml +154 -0
- package/dist/bundles/runner-images/kubernetes/scripts/kubernetesCreateSecret +11 -0
- package/dist/bundles/runner-images/kubernetes/scripts/kubernetesDelete +5 -0
- package/dist/bundles/runner-images/kubernetes/scripts/kubernetesDeploy +57 -0
- package/dist/bundles/runner-images/kubernetes/scripts/kubernetesRollback +5 -0
- package/dist/bundles/runner-images/semantic-release/Dockerfile +24 -0
- package/dist/bundles/runner-images/semantic-release/scripts/semanticRelease +67 -0
- package/dist/cli/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.d.ts +12 -0
- package/dist/cli/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.js +64 -0
- package/dist/cli/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.js.map +1 -0
- package/dist/cli/src/apps/cli/commands/project/setup/index.js +3 -0
- package/dist/cli/src/apps/cli/commands/project/setup/index.js.map +1 -1
- package/dist/cli/src/config/getProjectConfig.d.ts +6 -0
- package/dist/cli/src/config/getProjectConfig.js +10 -1
- package/dist/cli/src/config/getProjectConfig.js.map +1 -1
- package/dist/cli/src/gcloud/cloudSql/copyDb.js +6 -2
- package/dist/cli/src/gcloud/cloudSql/copyDb.js.map +1 -1
- package/dist/pipeline/src/constants.js +1 -1
- package/dist/pipeline/src/context/index.d.ts +1 -0
- package/dist/pipeline/src/context/index.js +1 -0
- package/dist/pipeline/src/context/index.js.map +1 -1
- package/dist/pipeline/src/customImages/shippedImages.js +3 -1
- package/dist/pipeline/src/customImages/shippedImages.js.map +1 -1
- package/dist/pipeline/src/deploy/cloudRun/createJobs/execute/schedules.js +18 -3
- package/dist/pipeline/src/deploy/cloudRun/createJobs/execute/schedules.js.map +1 -1
- package/dist/pipeline/src/deploy/types/googleCloudRun.d.ts +5 -1
- package/dist/pipeline/src/store/index.d.ts +4 -0
- package/dist/pipeline/src/store/index.js +12 -3
- package/dist/pipeline/src/store/index.js.map +1 -1
- package/dist/runner-images/agent-claude/Dockerfile +5 -0
- package/dist/runner-images/docker-build/Dockerfile +26 -0
- package/dist/runner-images/docker-build/scripts/ensureMeteorDockerfile +55 -0
- package/dist/runner-images/docker-build/scripts/ensureNginxDockerfile +85 -0
- package/dist/runner-images/docker-build/scripts/ensureNodeDockerfile +50 -0
- package/dist/runner-images/gcloud/Dockerfile +3 -0
- package/dist/runner-images/jobs-default/Dockerfile +22 -0
- package/dist/runner-images/jobs-meteor/Dockerfile +7 -0
- package/dist/runner-images/jobs-testing-chrome/Dockerfile +15 -0
- package/dist/runner-images/kubernetes/Dockerfile +26 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.lock +9 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/Chart.yaml +14 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/README.md +24 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mailhog-5.0.1.tgz +0 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/charts/mongodb-12.1.27.tgz +0 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/myvalues.yaml +15 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/_helpers.tpl +202 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cloudsql-proxy-credentials.yml +10 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.cronjobs.yml +69 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.autoscaler.yml +19 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.deployment.yml +103 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.configmap.yml +27 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.env.secrets.yml +10 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.redirects.yaml +91 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.ingress.yaml +48 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.jobs.yml +70 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.service.yaml +31 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.volumes.yml +20 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.deployment.yml +104 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.worker.service.yaml +34 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mailhog.ingress.yaml +35 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.deployment.yml +45 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/maintenance.service.yml +24 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/templates/mongodb.backup.cronjob.yml +120 -0
- package/dist/runner-images/kubernetes/helm-charts/the-panter-chart/values.yaml +154 -0
- package/dist/runner-images/kubernetes/scripts/kubernetesCreateSecret +11 -0
- package/dist/runner-images/kubernetes/scripts/kubernetesDelete +5 -0
- package/dist/runner-images/kubernetes/scripts/kubernetesDeploy +57 -0
- package/dist/runner-images/kubernetes/scripts/kubernetesRollback +5 -0
- package/dist/runner-images/semantic-release/Dockerfile +24 -0
- package/dist/runner-images/semantic-release/scripts/semanticRelease +67 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/apps/cli/commands/project/setup/ensureGcloudProjectNumbers.ts +61 -0
- package/src/apps/cli/commands/project/setup/index.ts +3 -0
- package/src/config/getProjectConfig.ts +9 -0
- package/src/gcloud/cloudSql/copyDb.ts +7 -2
package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.jobs.yml
ADDED
|
@@ -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 -}}
|
package/dist/bundles/runner-images/kubernetes/helm-charts/the-panter-chart/templates/app.volumes.yml
ADDED
|
@@ -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 -
|