Skip to content

Commit 5277cb0

Browse files
feat(builder): add builder (#71)
1 parent 195c503 commit 5277cb0

File tree

20 files changed

+1112
-2
lines changed

20 files changed

+1112
-2
lines changed

.github/labeler.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ library:
77
internal-gateway:
88
- charts/internal-gateway/**/*
99

10+
builder:
11+
- charts/builder/**/*
12+
- charts/runner/**/*
13+
1014
docs:
1115
- README.md
1216
- CHANGELOG.md

.github/workflows/lint-test.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ jobs:
9898
- name: Run chart-testing (install)
9999
run: |
100100
changed=$(ct list-changed --config "ct.yaml")
101-
if [[ "$changed" == "charts/cf-common" ]]; then
102-
# Do not run `ct install` for cf-common (library chart)
101+
if [[ "$changed" == "charts/cf-common" || "$changed" =~ "charts/builder" || "$changed" =~ "charts/runner" ]]; then
102+
# Do not run `ct install` for cf-common (library chart) or builder/runner
103103
exit 0
104104
fi
105105
helm repo add cf-common https://chartmuseum.codefresh.io/cf-common

charts/builder/Chart.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v2
2+
description: Helm Chart for default system/root runtime Builder (onprem)
3+
name: builder
4+
version: 1.3.0
5+
keywords:
6+
- codefresh
7+
- dind
8+
- builder
9+
home: https://codefresh.io/
10+
icon: https://avatars1.githubusercontent.com/u/11412079?v=3
11+
maintainers:
12+
- name: codefresh
13+
url: https://codefresh-io.github.io/
14+
dependencies:
15+
- name: cf-common
16+
repository: oci://quay.io/codefresh/charts
17+
version: "0.16.0"

charts/builder/README.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# builder
2+
3+
![Version: 1.3.0](https://img.shields.io/badge/Version-1.3.0-informational?style=flat-square)
4+
5+
Helm Chart for default system/root runtime Builder (onprem)
6+
7+
**Homepage:** <https://codefresh.io/>
8+
9+
## Maintainers
10+
11+
| Name | Email | Url |
12+
| ---- | ------ | --- |
13+
| codefresh | | <https://codefresh-io.github.io/> |
14+
15+
## Requirements
16+
17+
| Repository | Name | Version |
18+
|------------|------|---------|
19+
| oci://quay.io/codefresh/charts | cf-common | 0.16.0 |
20+
21+
## Values
22+
23+
| Key | Type | Default | Description |
24+
|-----|------|---------|-------------|
25+
| affinity | object | `{}` | |
26+
| cleaner.image.pullPolicy | string | `"IfNotPresent"` | |
27+
| cleaner.image.registry | string | `"quay.io"` | |
28+
| cleaner.image.repository | string | `"codefresh/docker-cleaner"` | |
29+
| cleaner.image.tag | string | `"24.0"` | |
30+
| configMaps.config.data."daemon.json" | string | `"{\n \"hosts\": [ \"unix:///var/run/docker.sock\",\n \"tcp://0.0.0.0:{{ .Values.service.main.ports.dind.port }}\"],\n \"storage-driver\": \"overlay2\",\n \"tlsverify\": true,\n \"tls\": true,\n \"tlscacert\": \"/etc/ssl/cf/ca.pem\",\n \"tlscert\": \"/etc/ssl/cf/cert.pem\",\n \"tlskey\": \"/etc/ssl/cf/key.pem\",\n \"insecure-registries\" : [ {{- range $i, $e := .Values.insecureRegistries }} {{- if $i }},{{ end }} {{ $e | quote }} {{- end }} ]\n}\n"` | |
31+
| configMaps.config.data.docker-cleaner | string | `"#!/bin/sh\necho \"$0 - $(date)\" | tee -a /var/log/cleaner.log\nCLEANER_IMAGE={{ include (printf \"cf-common-%s.image.name\" (index .Subcharts \"cf-common\").Chart.Version ) (dict \"image\" .Values.cleaner.image \"context\" .) }}\ndocker pull $CLEANER_IMAGE\ndocker run --rm --name rt-cleaner -v /var/run/docker.sock:/var/run/docker.sock:rw --label io.codefresh.owner=codefresh -e GRACE_PERIOD_SECONDS=86400 --cpu-shares=10 $CLEANER_IMAGE ./docker-gc >> /var/log/cleaner.log 2>&1\n"` | |
32+
| configMaps.config.data.register | string | `"#!/bin/sh\nset -e\nNODE_NAME=\"$1\"\nSUBDOMAIN=\"$2\"\nNODE_ADDRESS=\"$1.$2\"\nCONSUL={{ include (printf \"cf-common-%s.classic.calculateConsulUri\" (index .Subcharts \"cf-common\").Chart.Version ) . }}\nACCOUNT=codefresh\nROLE=builder\nPROVIDER='\n{\n \"name\": \"kube-nodes\",\n \"type\": \"internal\"\n}'\nSYSTEM_DATA='{\"os_name\": \"dind\"}'\nNODE_SERVICE='\n{\n \"Node\": \"'${NODE_NAME}'\",\n \"Address\": \"'${NODE_ADDRESS}'\",\n \"Service\": {\n \"Service\": \"docker-node\",\n \"Tags\": [\n \"dind\",\n \"noagent\",\n \"account_codefresh\",\n \"type_builder\"\n ],\n \"Address\": \"'${NODE_ADDRESS}'\",\n \"Port\": {{ .Values.service.main.ports.dind.port }}\n },\n \"Check\": {\n \"Node\": \"\",\n \"CheckID\": \"service:docker-node\",\n \"Name\": \"Remote Node Check\",\n \"Notes\": \"Check builder is up and running\",\n \"Output\": \"Builder alive and reachable\",\n \"Status\": \"passing\",\n \"ServiceID\": \"docker-node\"\n }\n}'\necho \"Registering dind node ($NODE_NAME) in consul. Configuration: ${NODE_SERVICE}\"\ncurl -X PUT -d \"${NODE_SERVICE}\" ${CONSUL}/v1/catalog/register\ncurl -X PUT -d \"${NODE_ADDRESS}\" ${CONSUL}/v1/kv/services/docker-node/${NODE_NAME}/publicAddress\ncurl -X PUT -d \"${ACCOUNT}\" ${CONSUL}/v1/kv/services/docker-node/${NODE_NAME}/account\ncurl -X PUT -d \"${ROLE}\" ${CONSUL}/v1/kv/services/docker-node/${NODE_NAME}/role\ncurl -X PUT -d \"${PROVIDER}\" ${CONSUL}/v1/kv/services/docker-node/${NODE_NAME}/systemData\ncurl -X PUT -d \"${SYSTEM_DATA}\" ${CONSUL}/v1/kv/services/docker-node/${NODE_NAME}/provider\n"` | |
33+
| configMaps.config.enabled | bool | `true` | |
34+
| container.command[0] | string | `"/bin/sh"` | |
35+
| container.command[1] | string | `"-c"` | |
36+
| container.command[2] | string | `"rm -fv /var/run/docker.pid\nmkdir -p /var/run/codefresh\n# Adding cleaner\ncp -L /opt/dind/docker-cleaner.sh /usr/local/bin/ && chmod +x /usr/local/bin/docker-cleaner.sh\nif [[ -n \"${DOCKER_CLEANER_CRON}\" ]]; then\n echo \"Set /etc/crontabs/root - ${DOCKER_CLEANER_CRON} /usr/local/bin/docker-cleaner.sh\"\n echo \"${DOCKER_CLEANER_CRON} /usr/local/bin/docker-cleaner.sh \" >> /etc/crontabs/root\n crond\nfi\ndockerd\n"` | |
37+
| container.containerSecurityContext.privileged | bool | `true` | |
38+
| container.env.DOCKER_CLEANER_CRON | string | `"0 0 * * *"` | |
39+
| container.image.pullPolicy | string | `"IfNotPresent"` | |
40+
| container.image.registry | string | `"docker.io"` | |
41+
| container.image.repository | string | `"docker"` | |
42+
| container.image.tag | string | `"24.0-dind"` | |
43+
| container.resources.limits | object | `{}` | |
44+
| container.resources.requests | object | `{}` | |
45+
| container.volumeMounts.cf-certs.path[0].mountPath | string | `"/etc/ssl/cf"` | |
46+
| container.volumeMounts.cf-certs.path[0].readOnly | bool | `true` | |
47+
| container.volumeMounts.config.path[0].mountPath | string | `"/etc/docker/daemon.json"` | |
48+
| container.volumeMounts.config.path[0].readOnly | bool | `true` | |
49+
| container.volumeMounts.config.path[0].subPath | string | `"daemon.json"` | |
50+
| container.volumeMounts.config.path[1].mountPath | string | `"/opt/dind/docker-cleaner.sh"` | |
51+
| container.volumeMounts.config.path[1].subPath | string | `"docker-cleaner"` | |
52+
| controller | object | `{"enabled":true,"replicas":1,"type":"statefulset"}` | --------------------------------------------------------------------------------------------------------------------- |
53+
| global.consulHost | string | `""` | |
54+
| global.consulHttpPort | int | `8500` | |
55+
| global.consulService | string | `"consul-headless"` | |
56+
| global.imageRegistry | string | `""` | |
57+
| hpa | object | `{}` | |
58+
| imagePullSecrets[0] | string | `"{{ .Release.Name }}-{{ .Values.global.codefresh }}-registry"` | |
59+
| initContainers.register.command[0] | string | `"/bin/sh"` | |
60+
| initContainers.register.command[1] | string | `"-c"` | |
61+
| initContainers.register.command[2] | string | `"cp -L /opt/dind/register /usr/local/bin/\nchmod +x /usr/local/bin/register\n/usr/local/bin/register ${POD_NAME} {{ template \"builder.fullname\" . }}.{{ .Release.Namespace}}.svc\n"` | |
62+
| initContainers.register.enabled | bool | `true` | |
63+
| initContainers.register.env.POD_NAME.valueFrom.fieldRef.apiVersion | string | `"v1"` | |
64+
| initContainers.register.env.POD_NAME.valueFrom.fieldRef.fieldPath | string | `"metadata.name"` | |
65+
| initContainers.register.image.pullPolicy | string | `"IfNotPresent"` | |
66+
| initContainers.register.image.registry | string | `"quay.io"` | |
67+
| initContainers.register.image.repository | string | `"codefresh/curl"` | |
68+
| initContainers.register.image.tag | string | `"8.4.0"` | |
69+
| initContainers.register.volumeMounts.config.path[0].mountPath | string | `"/opt/dind/register"` | |
70+
| initContainers.register.volumeMounts.config.path[0].subPath | string | `"register"` | |
71+
| insecureRegistries | list | `[]` | --------------------------------------------------------------------------------------------------------------------- Backward compatibility with values/templates in cf-helm |
72+
| nodeSelector | object | `{}` | |
73+
| pdb | object | `{}` | |
74+
| podAnnotations.checksum/config | string | `"{{ include (print .Template.BasePath \"/configmap.yaml\") . | sha256sum }}"` | |
75+
| podSecurityContext | object | `{}` | |
76+
| rbac.enabled | bool | `false` | |
77+
| service.main.clusterIP | string | `"None"` | |
78+
| service.main.enabled | bool | `true` | |
79+
| service.main.ports.dind.port | int | `1300` | |
80+
| service.main.ports.dind.protocol | string | `"TCP"` | |
81+
| service.main.type | string | `"ClusterIP"` | |
82+
| serviceAccount.enabled | bool | `false` | |
83+
| tolerations | list | `[]` | |
84+
| topologySpreadConstraints | list | `[]` | |
85+
| varLibDockerVolume.accessMode | string | `nil` | |
86+
| varLibDockerVolume.storageSize | string | `nil` | |
87+
| volumeClaimTemplates.varlibdocker.accessMode | string | `"ReadWriteOnce"` | |
88+
| volumeClaimTemplates.varlibdocker.mountPath | string | `"/var/lib/docker"` | |
89+
| volumeClaimTemplates.varlibdocker.size | string | `"100Gi"` | |
90+
| volumeClaimTemplates.varlibdocker.storageClass | string | `nil` | |
91+
| volumes.cf-certs.enabled | bool | `true` | |
92+
| volumes.cf-certs.nameOverride | string | `"{{ .Release.Name }}-{{ .Values.global.codefresh }}-certs-client"` | |
93+
| volumes.cf-certs.type | string | `"secret"` | |
94+
| volumes.config.enabled | bool | `true` | |
95+
| volumes.config.type | string | `"configMap"` | |
96+
| volumes.varlibdocker.enabled | bool | `false` | |
97+
| volumes.varlibdocker.nameOverride | string | `nil` | |
98+
| volumes.varlibdocker.type | string | `"pvc"` | |
99+
100+
----------------------------------------------
101+
Autogenerated from chart metadata using [helm-docs v1.9.1](https://github.com/norwoodj/helm-docs/releases/v1.9.1)
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "builder.name" -}}
5+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
6+
{{- end }}
7+
8+
{{/*
9+
Create a default fully qualified app name.
10+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
11+
If release name contains chart name it will be used as a full name.
12+
*/}}
13+
{{- define "builder.fullname" -}}
14+
{{- if .Values.fullnameOverride }}
15+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
16+
{{- else }}
17+
{{- $name := default .Chart.Name .Values.nameOverride }}
18+
{{- if contains $name .Release.Name }}
19+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
20+
{{- else }}
21+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
22+
{{- end }}
23+
{{- end }}
24+
{{- end }}
25+
26+
{{/*
27+
Create chart name and version as used by the chart label.
28+
*/}}
29+
{{- define "builder.chart" -}}
30+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
31+
{{- end }}
32+
33+
{{/*
34+
Common labels
35+
*/}}
36+
{{- define "builder.labels" -}}
37+
helm.sh/chart: {{ include "builder.chart" . }}
38+
{{ include "builder.selectorLabels" . }}
39+
{{- if .Chart.AppVersion }}
40+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
41+
{{- end }}
42+
app.kubernetes.io/managed-by: {{ .Release.Service }}
43+
{{- end }}
44+
45+
{{/*
46+
Selector labels
47+
*/}}
48+
{{- define "builder.selectorLabels" -}}
49+
app.kubernetes.io/name: {{ include "builder.name" . }}
50+
app.kubernetes.io/instance: {{ .Release.Name }}
51+
{{- end }}
52+
53+
{{/*
54+
Create the name of the service account to use
55+
*/}}
56+
{{- define "builder.serviceAccountName" -}}
57+
{{- if .Values.serviceAccount.create }}
58+
{{- default (include "builder.fullname" .) .Values.serviceAccount.name }}
59+
{{- else }}
60+
{{- default "default" .Values.serviceAccount.name }}
61+
{{- end }}
62+
{{- end }}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{{- $templateName := printf "cf-common-%s.configmaps" (index .Subcharts "cf-common").Chart.Version -}}
2+
{{- include $templateName . -}}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{{/* Backward compatibility for onprem */}}
2+
{{- if (coalesce .Values.existingPvc .Values.existingClaim .Values.pvcName .Values.varLibDockerVolume.existingPvc "") }}
3+
{{- $_ := set .Values.volumeClaimTemplates.varlibdocker "enabled" false }}
4+
{{- $_ := set .Values.volumes.varlibdocker "enabled" true }}
5+
{{- $_ := set .Values.volumes.varlibdocker "nameOverride" (coalesce .Values.existingPvc .Values.existingClaim .Values.pvcName .Values.varLibDockerVolume.existingPvc) }}
6+
{{- end }}
7+
8+
{{- if (coalesce .Values.storageClass .Values.StorageClass .Values.varLibDockerVolume.storageClass .Values.global.storageClass "") }}
9+
{{- $_ := set .Values.volumeClaimTemplates.varlibdocker "storageClass" (coalesce .Values.storageClass .Values.StorageClass .Values.varLibDockerVolume.storageClass .Values.global.storageClass) }}
10+
{{- end }}
11+
12+
{{- if (coalesce .Values.storageSize .Values.varLibDockerVolume.storageSize .Values.varLibDockerVolume.size "") }}
13+
{{- $_ := set .Values.volumeClaimTemplates.varlibdocker "size" (coalesce .Values.storageSize .Values.varLibDockerVolume.storageSize .Values.varLibDockerVolume.size) }}
14+
{{- end }}
15+
16+
{{- $templateName := printf "cf-common-%s.controller" (index .Subcharts "cf-common").Chart.Version -}}
17+
{{- include $templateName . -}}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{{- $templateName := printf "cf-common-%s.service" (index .Subcharts "cf-common").Chart.Version -}}
2+
{{- include $templateName . -}}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# yaml-language-server: $schema=https://raw.githubusercontent.com/quintush/helm-unittest/master/schema/helm-testsuite.json
2+
suite: builder test
3+
templates:
4+
- templates/controller.yaml
5+
tests:
6+
- it: If .Values.existingPvc is set
7+
set:
8+
existingPvc: my-pvc-name
9+
asserts:
10+
- contains:
11+
path: spec.template.spec.volumes
12+
content:
13+
name: varlibdocker
14+
persistentVolumeClaim:
15+
claimName: my-pvc-name
16+
- isNull:
17+
path: spec.volumeClaimTemplates
18+
19+
- it: If .Values.existingClaim is set
20+
set:
21+
existingClaim: my-pvc-name
22+
asserts:
23+
- contains:
24+
path: spec.template.spec.volumes
25+
content:
26+
name: varlibdocker
27+
persistentVolumeClaim:
28+
claimName: my-pvc-name
29+
- isNull:
30+
path: spec.volumeClaimTemplates
31+
32+
- it: If .Values.pvcName is set
33+
set:
34+
pvcName: my-pvc-name
35+
asserts:
36+
- contains:
37+
path: spec.template.spec.volumes
38+
content:
39+
name: varlibdocker
40+
persistentVolumeClaim:
41+
claimName: my-pvc-name
42+
- isNull:
43+
path: spec.volumeClaimTemplates
44+
45+
- it: If .Values.pvcName is set
46+
set:
47+
varLibDockerVolume.existingPvc: my-pvc-name
48+
asserts:
49+
- contains:
50+
path: spec.template.spec.volumes
51+
content:
52+
name: varlibdocker
53+
persistentVolumeClaim:
54+
claimName: my-pvc-name
55+
- isNull:
56+
path: spec.volumeClaimTemplates
57+
58+
- it: If .Values.storageClass is set
59+
set:
60+
storageClass: my-sc-name
61+
asserts:
62+
- equal:
63+
path: spec.volumeClaimTemplates[0].spec.storageClassName
64+
value: my-sc-name
65+
66+
- it: If .Values.StorageClass is set
67+
set:
68+
StorageClass: my-sc-name
69+
asserts:
70+
- equal:
71+
path: spec.volumeClaimTemplates[0].spec.storageClassName
72+
value: my-sc-name
73+
74+
- it: If .Values.StorageClass is set
75+
set:
76+
varLibDockerVolume.storageClass: my-sc-name
77+
asserts:
78+
- equal:
79+
path: spec.volumeClaimTemplates[0].spec.storageClassName
80+
value: my-sc-name
81+
82+
- it: If .Values.StorageClass is set
83+
set:
84+
global.storageClass: my-sc-name
85+
asserts:
86+
- equal:
87+
path: spec.volumeClaimTemplates[0].spec.storageClassName
88+
value: my-sc-name
89+
90+
- it: If .Values.storageSize is set
91+
set:
92+
storageSize: 32Gi
93+
asserts:
94+
- equal:
95+
path: spec.volumeClaimTemplates[0].spec.resources.requests.storage
96+
value: 32Gi
97+
98+
- it: If .Values.varLibDockerVolume.storageSize is set
99+
set:
100+
varLibDockerVolume.storageSize: 32Gi
101+
asserts:
102+
- equal:
103+
path: spec.volumeClaimTemplates[0].spec.resources.requests.storage
104+
value: 32Gi
105+
106+
- it: If .Values.varLibDockerVolume.size is set
107+
set:
108+
varLibDockerVolume.size: 32Gi
109+
asserts:
110+
- equal:
111+
path: spec.volumeClaimTemplates[0].spec.resources.requests.storage
112+
value: 32Gi
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

0 commit comments

Comments
 (0)