Skip to content

Commit a2e57a3

Browse files
authored
add helm chart (#99)
Signed-off-by: cpanato <[email protected]>
1 parent 44f7369 commit a2e57a3

14 files changed

+515
-0
lines changed

.github/workflows/helm-release.yml

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: Release Charts
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
paths:
8+
- "charts/**"
9+
10+
jobs:
11+
release:
12+
permissions:
13+
contents: write
14+
15+
runs-on: ubuntu-latest
16+
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
20+
with:
21+
fetch-depth: 0
22+
23+
- name: Configure Git
24+
run: |
25+
git config user.name "$GITHUB_ACTOR"
26+
git config user.email "[email protected]"
27+
28+
- name: Set up Helm
29+
uses: azure/setup-helm@5119fcb9089d432beecbf79bb2c7915207344b78 # v3.5
30+
with:
31+
version: v3.12.0
32+
33+
- name: Run chart-releaser
34+
uses: helm/chart-releaser-action@be16258da8010256c6e82849661221415f031968 # v1.5.0
35+
env:
36+
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
37+
38+
- name: Login to GitHub Container Registry
39+
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # v2.1.0
40+
with:
41+
registry: ghcr.io
42+
username: ${{ github.actor }}
43+
password: ${{ secrets.GITHUB_TOKEN }}
44+
45+
- name: Install Cosign
46+
uses: sigstore/cosign-installer@204a51a57a74d190b284a0ce69b44bc37201f343 # v3.0.3
47+
48+
- name: Publish and Sign OCI Charts
49+
run: |
50+
for chart in `find .cr-release-packages -name '*.tgz' -print`; do
51+
helm push ${chart} oci://ghcr.io/${GITHUB_REPOSITORY} |& tee helm-push-output.log
52+
file_name=${chart##*/}
53+
chart_name=${file_name%-*}
54+
digest=$(awk -F "[, ]+" '/Digest/{print $NF}' < helm-push-output.log)
55+
cosign sign "ghcr.io/${GITHUB_REPOSITORY}/${chart_name}@${digest}"
56+
done
57+
env:
58+
COSIGN_YES: true

.github/workflows/helm-test.yml

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: helm
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- "charts/**"
7+
8+
jobs:
9+
test-chart:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout
13+
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
14+
with:
15+
fetch-depth: 0
16+
17+
- name: Set up Helm
18+
uses: azure/setup-helm@5119fcb9089d432beecbf79bb2c7915207344b78 # v3.5
19+
with:
20+
version: v3.12.0
21+
22+
- uses: actions/setup-python@57ded4d7d5e986d7296eab16560982c6dd7c923b # v4.6.0
23+
with:
24+
python-version: 3.8
25+
26+
- name: Set up chart-testing
27+
uses: helm/chart-testing-action@e8788873172cb653a90ca2e819d79d65a66d4e76 # v2.4.0
28+
29+
- name: Run chart-testing (list-changed)
30+
id: list-changed
31+
run: |
32+
changed=$(ct list-changed --target-branch ${{ github.event.repository.default_branch }})
33+
if [[ -n "$changed" ]]; then
34+
echo "changed=true" >> "$GITHUB_OUTPUT"
35+
fi
36+
37+
- name: Run chart-testing (lint)
38+
if: steps.list-changed.outputs.changed == 'true'
39+
run: ct lint --target-branch ${{ github.event.repository.default_branch }} --config ct.yaml
40+
41+
- name: Create kind cluster
42+
if: steps.list-changed.outputs.changed == 'true'
43+
uses: helm/kind-action@fa81e57adff234b2908110485695db0f181f3c67 # v1.7.0
44+
45+
- name: Run chart-testing (install)
46+
if: steps.list-changed.outputs.changed == 'true'
47+
run: ct install --target-branch ${{ github.event.repository.default_branch }} --config ct.yaml

charts/github-exporter/.helmignore

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*~
18+
# Various IDEs
19+
.project
20+
.idea/
21+
*.tmproj
22+
.vscode/

charts/github-exporter/Chart.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: v1
2+
description: GitHub exporter
3+
name: github-exporter
4+
version: 0.1.0
5+
appVersion: 0.4.0
6+
home: https://github.com/cpanato/github_actions_exporter
7+
maintainers:
8+
- name: cpanato
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
config:
2+
org: "fake-honk"
3+
4+
secret:
5+
githubToken: "fake-token"
6+
githubWebhookToken: "fake-token"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
1.To see the metrics
2+
{{- if contains "ClusterIP" .Values.service.type }}
3+
kubectl port-forward svc/{{ include "github-exporter.fullname" . }} {{ .Values.service.portMetrics }}
4+
echo "Visit http://127.0.0.1:{{ .Values.service.portMetrics }}/metrics to check the metrics"
5+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{{/* vim: set filetype=mustache: */}}
2+
{{/*
3+
Expand the name of the chart.
4+
*/}}
5+
{{- define "github-exporter.name" -}}
6+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
7+
{{- end -}}
8+
9+
{{/*
10+
Create a default fully qualified app name.
11+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
12+
If release name contains chart name it will be used as a full name.
13+
*/}}
14+
{{- define "github-exporter.fullname" -}}
15+
{{- if .Values.fullnameOverride -}}
16+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
17+
{{- else -}}
18+
{{- $name := default .Chart.Name .Values.nameOverride -}}
19+
{{- if contains $name .Release.Name -}}
20+
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
21+
{{- else -}}
22+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
23+
{{- end -}}
24+
{{- end -}}
25+
{{- end -}}
26+
27+
{{/*
28+
Create chart name and version as used by the chart label.
29+
*/}}
30+
{{- define "github-exporter.chart" -}}
31+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
32+
{{- end -}}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: {{ include "github-exporter.fullname" . }}
5+
namespace: {{ .Release.Namespace }}
6+
labels:
7+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
8+
helm.sh/chart: {{ include "github-exporter.chart" . }}
9+
app.kubernetes.io/instance: {{ .Release.Name }}
10+
app.kubernetes.io/managed-by: {{ .Release.Service }}
11+
{{- if .Values.labels -}}
12+
{{ .Values.labels | toYaml | nindent 4 -}}
13+
{{- end }}
14+
spec:
15+
replicas: {{ .Values.deployment.replicaCount }}
16+
selector:
17+
matchLabels:
18+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
19+
app.kubernetes.io/instance: {{ .Release.Name }}
20+
template:
21+
metadata:
22+
labels:
23+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
24+
app.kubernetes.io/instance: {{ .Release.Name }}
25+
helm.sh/chart: {{ include "github-exporter.chart" . }}
26+
{{- if .Values.podLabels -}}
27+
{{ .Values.podLabels | toYaml | nindent 8 -}}
28+
{{- end }}
29+
spec:
30+
containers:
31+
- name: github-exporter
32+
image: "{{ .Values.deployment.image.repository }}:{{ .Values.deployment.image.tag }}@{{ .Values.deployment.image.digest }}"
33+
imagePullPolicy: {{ .Values.deployment.image.pullPolicy }}
34+
args:
35+
- --gh.github-api-token=$(GITHUB_TOKEN)
36+
- --gh.github-webhook-token=$(GITHUB_WEBHOOK_TOKEN)
37+
- --gh.github-org={{ .Values.config.org }}
38+
- --gh.billing-poll-seconds={{ .Values.config.pollSeconds }}
39+
envFrom:
40+
- secretRef:
41+
{{- if not .Values.secret.existingSecretName }}
42+
name: {{ include "github-exporter.fullname" . }}
43+
{{- else }}
44+
name: {{ .Values.secret.existingSecretName }}
45+
{{- end }}
46+
ports:
47+
- name: metrics
48+
containerPort: {{ .Values.service.portMetrics }}
49+
protocol: TCP
50+
- name: http
51+
containerPort: {{ .Values.service.portHttp }}
52+
protocol: TCP
53+
livenessProbe:
54+
failureThreshold: 1
55+
httpGet:
56+
path: /healthz
57+
port: http
58+
scheme: HTTP
59+
initialDelaySeconds: 3
60+
periodSeconds: 30
61+
successThreshold: 1
62+
timeoutSeconds: 9
63+
readinessProbe:
64+
failureThreshold: 1
65+
httpGet:
66+
path: /healthz
67+
port: http
68+
scheme: HTTP
69+
initialDelaySeconds: 3
70+
periodSeconds: 15
71+
successThreshold: 1
72+
timeoutSeconds: 9
73+
resources:
74+
{{- toYaml .Values.deployment.resources | nindent 12 }}
75+
{{- with .Values.deployment.nodeSelector }}
76+
nodeSelector:
77+
{{- toYaml . | nindent 8 }}
78+
{{- end }}
79+
{{- with .Values.affinity }}
80+
affinity:
81+
{{- toYaml . | nindent 8 }}
82+
{{- end }}
83+
{{- with .Values.tolerations }}
84+
tolerations:
85+
{{- toYaml . | nindent 8 }}
86+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{{- if .Values.ingress.enabled }}
2+
apiVersion: networking.k8s.io/v1
3+
kind: Ingress
4+
metadata:
5+
labels:
6+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
7+
helm.sh/chart: {{ include "github-exporter.chart" . }}
8+
app.kubernetes.io/instance: {{ .Release.Name }}
9+
app.kubernetes.io/managed-by: {{ .Release.Service }}
10+
{{- if .Values.ingress.extraLabels }}
11+
{{ .Values.ingress.extraLabels | toYaml | nindent 4 -}}
12+
{{- end }}
13+
{{- if .Values.ingress.annotations }}
14+
annotations:
15+
{{ .Values.ingress.annotations | toYaml | nindent 4 -}}
16+
{{- end }}
17+
name: {{ include "github-exporter.fullname" . }}
18+
namespace: {{ .Release.Namespace }}
19+
spec:
20+
rules:
21+
- host: {{ .Values.ingress.host }}
22+
http:
23+
paths:
24+
- path: "/"
25+
pathType: Prefix
26+
backend:
27+
service:
28+
name: {{ include "github-exporter.name" . }}-ingress
29+
port:
30+
number: {{ .Values.service.portHttp }}
31+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{{- if not .Values.secret.existingSecretName }}
2+
apiVersion: v1
3+
kind: Secret
4+
metadata:
5+
labels:
6+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
7+
helm.sh/chart: {{ include "github-exporter.chart" . }}
8+
app.kubernetes.io/instance: {{ .Release.Name }}
9+
app.kubernetes.io/managed-by: {{ .Release.Service }}
10+
{{- if .Values.labels }}
11+
{{ .Values.labels | toYaml | nindent 4 -}}
12+
{{- end }}
13+
name: {{ include "github-exporter.fullname" . }}
14+
namespace: {{ .Release.Namespace }}
15+
data:
16+
GITHUB_TOKEN: {{ .Values.secret.githubToken | b64enc }}
17+
GITHUB_WEBHOOK_TOKEN: {{ .Values.secret.githubWebhookToken | b64enc }}
18+
type: Opaque
19+
{{- end }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
labels:
5+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
6+
helm.sh/chart: {{ include "github-exporter.chart" . }}
7+
app.kubernetes.io/instance: {{ .Release.Name }}
8+
app.kubernetes.io/managed-by: {{ .Release.Service }}
9+
{{- if .Values.service.extraLabels -}}
10+
{{ .Values.service.extraLabels | toYaml | nindent 4 -}}
11+
{{- end }}
12+
{{- if .Values.service.annotationsMetrics }}
13+
annotations:
14+
{{ .Values.service.annotationsMetrics | toYaml | nindent 4 -}}
15+
{{- end }}
16+
name: {{ include "github-exporter.name" . }}-metrics
17+
namespace: {{ .Release.Namespace }}
18+
spec:
19+
type: {{ .Values.service.type }}
20+
ports:
21+
- port: {{ .Values.service.portMetrics }}
22+
targetPort: metrics
23+
protocol: TCP
24+
name: metrics
25+
selector:
26+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
27+
app.kubernetes.io/instance: {{ .Release.Name }}
28+
---
29+
{{- if .Values.ingress.enabled }}
30+
apiVersion: v1
31+
kind: Service
32+
metadata:
33+
labels:
34+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
35+
helm.sh/chart: {{ include "github-exporter.chart" . }}
36+
app.kubernetes.io/instance: {{ .Release.Name }}
37+
app.kubernetes.io/managed-by: {{ .Release.Service }}
38+
{{- if .Values.service.extraLabels -}}
39+
{{ .Values.service.extraLabels | toYaml | nindent 4 -}}
40+
{{- end }}
41+
{{- if .Values.service.annotationsIngress }}
42+
annotations:
43+
{{ .Values.service.annotationsIngress | toYaml | nindent 4 -}}
44+
{{- end }}
45+
name: {{ include "github-exporter.name" . }}-ingress
46+
namespace: {{ .Release.Namespace }}
47+
spec:
48+
type: {{ .Values.service.type }}
49+
ports:
50+
- port: {{ .Values.service.portHttp }}
51+
targetPort: http
52+
protocol: TCP
53+
name: http
54+
selector:
55+
app.kubernetes.io/name: {{ include "github-exporter.name" . }}
56+
app.kubernetes.io/instance: {{ .Release.Name }}
57+
{{- end }}

0 commit comments

Comments
 (0)