Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 143 additions & 14 deletions resources/charts/bitcoincore/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -45,26 +45,155 @@ app.kubernetes.io/name: {{ include "bitcoincore.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}





{{/*
Create the name of the service account to use
Add network section heading in bitcoin.conf.

Bitcoin Core image tags are not always strict SemVer.

Examples we want to accept:
10.0 -> 10.0.0
10.0.0 -> 10.0.0
10.0.0-rc1 -> 10.0.0-rc.1
10.0rc1 -> 10.0.0-rc.1
10.0-rc1 -> 10.0.0-rc.1

Helm's semverCompare requires strict SemVer, so normalize first.
*/}}
{{- define "bitcoincore.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "bitcoincore.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}
{{- define "bitcoincore.check_semver" -}}
{{- $tag := .Values.image.tag | toString -}}
{{- $semver := "" -}}

{{/*
Case: already valid normal SemVer.

Matches:
10.0.0

Regex:
^ start of string
\d+ major version: one or more digits
\. literal dot
\d+ minor version: one or more digits
\. literal dot
\d+ patch version: one or more digits
$ end of string
*/}}
{{- if regexMatch `^\d+\.\d+\.\d+$` $tag -}}
{{- $semver = $tag -}}

{{/*
Add network section heading in bitcoin.conf
Always add for custom semver, check version for valid semver
Case: missing patch version.

Matches:
10.0

Converts:
10.0 -> 10.0.0
*/}}
{{- define "bitcoincore.check_semver" -}}
{{- $custom := contains "-" .Values.image.tag -}}
{{- $newer := semverCompare ">=0.17.0" .Values.image.tag -}}
{{- if or $newer $custom -}}
{{- else if regexMatch `^\d+\.\d+$` $tag -}}
{{- $semver = printf "%s.0" $tag -}}

{{/*
Case: has patch version, but rc prerelease is not strict SemVer.

Matches:
10.0.0-rc1

Converts:
10.0.0-rc1 -> 10.0.0-rc.1

Regex:
^ start of string
(\d+) capture major version
\. literal dot
(\d+) capture minor version
\. literal dot
(\d+) capture patch version
-rc literal "-rc"
(\d+) capture rc number
$ end of string

Replacement:
${1}.${2}.${3}-rc.${4}
*/}}
{{- else if regexMatch `^\d+\.\d+\.\d+-rc\d+$` $tag -}}
{{- $semver = regexReplaceAll `^(\d+)\.(\d+)\.(\d+)-rc(\d+)$` $tag `${1}.${2}.${3}-rc.${4}` -}}

{{/*
Case: missing patch version and rc is attached directly to minor version.

Matches:
10.0rc1

Converts:
10.0rc1 -> 10.0.0-rc.1

Regex:
^ start of string
(\d+) capture major version
\. literal dot
(\d+) capture minor version
rc literal "rc"
(\d+) capture rc number
$ end of string

Replacement:
${1}.${2}.0-rc.${3}
*/}}
{{- else if regexMatch `^\d+\.\d+rc\d+$` $tag -}}
{{- $semver = regexReplaceAll `^(\d+)\.(\d+)rc(\d+)$` $tag `${1}.${2}.0-rc.${3}` -}}

{{/*
Case: missing patch version, with hyphenated rc prerelease.

Matches:
10.0-rc1

Converts:
10.0-rc1 -> 10.0.0-rc.1

Regex:
^ start of string
(\d+) capture major version
\. literal dot
(\d+) capture minor version
-rc literal "-rc"
(\d+) capture rc number
$ end of string

Replacement:
${1}.${2}.0-rc.${3}
*/}}
{{- else if regexMatch `^\d+\.\d+-rc\d+$` $tag -}}
{{- $semver = regexReplaceAll `^(\d+)\.(\d+)-rc(\d+)$` $tag `${1}.${2}.0-rc.${3}` -}}

{{/*
Fallback:
Leave the tag unchanged.

Note:
If this is not valid SemVer, semverCompare will fail.
Add another normalization case above if more tag formats need support.
*/}}
{{- else -}}
{{- $semver = $tag -}}
{{- end -}}

{{/*
Only add the network section heading for Bitcoin Core versions
where bitcoin.conf supports per-network sections.

Strip pre-release suffix before comparison because Helm's semverCompare
does not match pre-release versions with >= constraints by default.
e.g. "31.1.0-rc.1" would fail ">=0.17.0" without this normalization.
*/}}
{{- $semver_no_prerelease := regexReplaceAll "-.*$" $semver "" -}}
{{- if semverCompare ">=0.17.0" $semver_no_prerelease -}}
[{{ .Values.global.chain }}]
{{- end -}}

{{- end -}}
Loading