-
Notifications
You must be signed in to change notification settings - Fork 12
chore: Add initial base chart tests #493
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 20 commits
2c219f6
ee503ed
9e3c1b2
060af6c
97215cf
29fdc29
2d43028
0ad46f3
467531b
b14497e
a1e04d1
9195243
4b5dab8
9d4d47e
8a7e402
64b5d8a
14dd8f3
77575c1
8c2346d
3247f39
6fbb33a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,118 @@ | ||
| name: Test wandb-base Chart | ||
|
|
||
| on: | ||
| pull_request: | ||
| paths: | ||
| - charts/operator-wandb/** | ||
| - test-configs/wandb-base/** | ||
|
|
||
| jobs: | ||
| snapshots: | ||
| name: Snapshot testing | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
| - name: Set up Helm | ||
| uses: azure/[email protected] | ||
| with: | ||
| version: v3.17.0 | ||
| - name: Helm snapshot build and test | ||
| run: | | ||
| helm repo add bitnami https://charts.bitnami.com/bitnami | ||
| helm repo add stakater https://stakater.github.io/stakater-charts | ||
| helm repo add prometheus https://prometheus-community.github.io/helm-charts | ||
|
|
||
| helm plugin install https://github.com/origranot/helm-cascade | ||
| helm plugin install https://github.com/jlandowner/helm-chartsnap | ||
| ./snapshots.sh build wandb-base | ||
| ./snapshots.sh run wandb-base | ||
|
|
||
| test: | ||
| name: Test Chart | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| k8s-version: ["v1.32.2", "v1.31.6", "v1.30.10"] | ||
| configuration: | ||
| - env-values-example | ||
| - env-precedence-container | ||
| - env-precedence-sizing | ||
| - env-precedence-chart-env | ||
| - env-precedence-chart-legacy | ||
| - env-precedence-global-env | ||
| - env-precedence-global-legacy | ||
| runs-on: ubuntu-latest | ||
| environment: Helm Charts | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - name: Set up Helm | ||
| uses: azure/[email protected] | ||
| with: | ||
| version: v3.17.0 | ||
|
|
||
| - name: Set up Python | ||
| uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: "3.10" | ||
|
|
||
| - name: Set up chart-testing | ||
| uses: helm/[email protected] | ||
| with: | ||
| version: v3.12.0 | ||
|
|
||
| - name: Run chart-testing (list-changed) | ||
| id: list-changed | ||
| run: | | ||
| changed=$(ct list-changed --config ct.yaml) | ||
| if [[ -n "$changed" ]]; then | ||
| echo "changed=true" >> "$GITHUB_OUTPUT" | ||
| fi | ||
|
|
||
| - name: Determine Kind Cluster Name | ||
| id: cluster | ||
| run: | | ||
| MATRIX_STRING="${{ matrix.k8s-version }}-${{ matrix.configuration }}" | ||
|
|
||
| HASH=$(python3 -c " | ||
| import zlib | ||
| data = '$MATRIX_STRING'.encode('utf-8') | ||
| crc = zlib.crc32(data) & 0xffffffff | ||
| print(f'{crc:08x}') | ||
| ") | ||
|
|
||
| export NAME="ct-${HASH}" | ||
| echo "name=${NAME}" >> "$GITHUB_OUTPUT" | ||
| echo "Matrix: $MATRIX_STRING -> Hash: $HASH -> Name: $NAME" | ||
|
|
||
| - name: Create kind cluster | ||
| uses: helm/[email protected] | ||
| with: | ||
| version: v0.27.0 | ||
| cluster_name: ${{ steps.cluster.outputs.name }} | ||
| node_image: kindest/node:${{ matrix.k8s-version }} | ||
| if: env.ACT || steps.list-changed.outputs.changed == 'true' | ||
|
|
||
| - name: Apply user defined secrets | ||
| run: | | ||
| if [[ -d test-configs/additional-resources/${{matrix.configuration}} ]]; then | ||
| kubectl --context kind-${{ steps.cluster.outputs.name }} apply -f test-configs/additional-resources/${{matrix.configuration}} | ||
| echo "Applied additional resources for ${{matrix.configuration}}" | ||
| sleep 5 | ||
| else | ||
| echo "No additional resources to be applied for ${{matrix.configuration}}" | ||
| fi | ||
| if: env.ACT || steps.list-changed.outputs.changed == 'true' | ||
|
|
||
| - name: Run chart-testing (install) | ||
| if: env.ACT || steps.list-changed.outputs.changed == 'true' | ||
| run: | | ||
| ct install --namespace default \ | ||
| --charts ./charts/wandb-base \ | ||
| --config ct.yaml \ | ||
| --helm-extra-args '--kube-context kind-${{ steps.cluster.outputs.name }} --timeout 600s' \ | ||
| --helm-extra-set-args '--values test-configs/wandb-base/${{ matrix.configuration }}.yaml' |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,77 @@ | ||
| {{- if eq .Values.kind "Job" }} | ||
| {{- range $jobName, $job := .Values.jobs }} | ||
| {{- $job := mergeOverwrite (dict "enabled" true) $job}} | ||
| {{- $fullname := include "wandb-base.fullname" $ }} | ||
| {{- if $job.enabled }} | ||
| --- | ||
| apiVersion: v1 | ||
| kind: ServiceAccount | ||
| metadata: | ||
| name: "{{ $fullname }}-test-job-{{ $jobName }}-sa" | ||
| labels: | ||
| {{- include "wandb-base.labels" $ | nindent 4 }} | ||
| --- | ||
| apiVersion: rbac.authorization.k8s.io/v1 | ||
| kind: Role | ||
| metadata: | ||
| name: "{{ $fullname }}-test-job-{{ $jobName }}-role" | ||
| labels: | ||
| {{- include "wandb-base.labels" $ | nindent 4 }} | ||
| rules: | ||
| - apiGroups: ["batch"] | ||
| resources: ["jobs"] | ||
| verbs: ["get", "list", "watch"] | ||
| - apiGroups: [""] | ||
| resources: ["pods", "pods/log"] | ||
| verbs: ["get", "list", "watch"] | ||
| --- | ||
| apiVersion: rbac.authorization.k8s.io/v1 | ||
| kind: RoleBinding | ||
| metadata: | ||
| name: "{{ $fullname }}-test-job-{{ $jobName }}-binding" | ||
| labels: | ||
| {{- include "wandb-base.labels" $ | nindent 4 }} | ||
| roleRef: | ||
| apiGroup: rbac.authorization.k8s.io | ||
| kind: Role | ||
| name: "{{ $fullname }}-test-job-{{ $jobName }}-role" | ||
| subjects: | ||
| - kind: ServiceAccount | ||
| name: "{{ $fullname }}-test-job-{{ $jobName }}-sa" | ||
| namespace: {{ $.Release.Namespace }} | ||
| --- | ||
| apiVersion: v1 | ||
| kind: Pod | ||
| metadata: | ||
| name: "{{ $fullname }}-test-job-{{ $jobName }}" | ||
| labels: | ||
| {{- include "wandb-base.labels" $ | nindent 4 }} | ||
| annotations: | ||
| "helm.sh/hook": test | ||
| "helm.sh/hook-weight": "1" | ||
| spec: | ||
| serviceAccountName: "{{ $fullname }}-test-job-{{ $jobName }}-sa" | ||
| containers: | ||
| - name: job-test | ||
| image: bitnami/kubectl:latest | ||
| command: ['/bin/sh'] | ||
| args: | ||
| - -c | ||
| - | | ||
| set -e | ||
| echo "Testing job: {{ printf "%s-%s" $fullname $jobName }}" | ||
| i=0 | ||
| until kubectl logs job/{{ printf "%s-%s" $fullname $jobName }}; do | ||
| i=$((i+1)) | ||
| if [ "$i" -ge 60 ]; then | ||
| echo "Timed out waiting for job logs." | ||
| exit 1 | ||
| fi | ||
| sleep 5 | ||
| done | ||
coderabbitai[bot] marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| restartPolicy: Never | ||
| {{- end }} | ||
| {{- end }} | ||
| {{- end }} | ||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -20,7 +20,7 @@ function usage() { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cat <<EOF | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| A helper script for the helm-chartsnap plugin https://github.com/jlandowner/helm-chartsnap | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Usage: $0 [COMMAND] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Usage: $0 [COMMAND] [optional: CHART (ex: operator-wandb)] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Commands: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| build, build the operator-wandb chart | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -29,34 +29,57 @@ Commands: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| EOF | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| function build_chart() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local chart="$1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Building $chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| helm cascade build "./charts/$chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| function update_chart() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local chart="$1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local values_file="$2" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "updating $chart snapshots" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| helm chartsnap -c "./charts/$chart" -u -f "$values_file" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| function run_chart() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local chart="$1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local values_file="$2" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Checking $chart snapshot tests" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| helm chartsnap -c "./charts/$chart" -f "$values_file" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| function main() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local chart="operator-wandb" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local func="$1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local charts=("wandb-base" "operator-wandb") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local values_dir="test-configs" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ $# -eq 0 ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| usage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| local func="$1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| case "$func" in | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| build) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Building operator-wandb" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| helm cascade build "./charts/$chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| update) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Updating operator-wandb snapshots" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| helm chartsnap -c "./charts/$chart" -u -f "./$values_dir/$chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| run) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| echo "Checking snapshot tests" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| helm chartsnap -c "./charts/$chart" -f "./$values_dir/$chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| *) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| usage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| esac | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if [ -n "$2" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| charts=("$2") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+53
to
+65
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix set -u unbound args ($1/$2) in main. Referencing $1/$2 before validating args breaks under set -u. Apply: -function main() {
- local func="$1"
- local charts=("wandb-base" "operator-wandb")
- local values_dir="test-configs"
+function main() {
+ # Ensure at least one argument before referencing $1 under set -u
+ if [ "$#" -lt 1 ]; then
+ usage
+ exit 1
+ fi
+ local func="$1"
+ shift
+ local charts=("wandb-base" "operator-wandb")
+ local values_dir="test-configs"
@@
- if [ -n "$2" ]; then
- charts=("$2")
- fi
+ if [ "$#" -ge 1 ]; then
+ charts=("$1")
+ fi📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| for chart in "${charts[@]}"; do | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| case "$func" in | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| build) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| build_chart "$chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| update) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| update_chart "$chart" "./$values_dir/$chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| run) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| run_chart "$chart" "./$values_dir/$chart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| *) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| usage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| exit 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ;; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| esac | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| done | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| main "$@" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| apiVersion: v1 | ||
| kind: ConfigMap | ||
| metadata: | ||
| name: my-configmap | ||
| data: | ||
| configmap-key: "test" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| apiVersion: v1 | ||
| kind: Secret | ||
| metadata: | ||
| name: my-secret | ||
| stringData: | ||
| secret-key: "test" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| dynamicFields: | ||
| - jsonPath: | ||
| - /metadata/labels/helm.sh~1chart | ||
| value: '###CHART_VERSION###' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Avoid floating tag for kubectl image; pin or parameterize.
latestis non-reproducible and risky. Pin to a version (ideally matching cluster) or expose via Values.Apply (example pin; adjust as needed):
Or parameterize:
📝 Committable suggestion
🤖 Prompt for AI Agents