diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 000000000..6b6b07a38 --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,43 @@ +name: Lint Charts + +on: + pull_request: + paths: charts/** + +jobs: + lint-test: + runs-on: ubuntu-latest + environment: Helm Charts + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Helm + uses: azure/setup-helm@v3.4 + with: + version: v3.16.3 + + # Python is required because `ct lint` runs Yamale (https://github.com/23andMe/Yamale) and + # yamllint (https://github.com/adrienverge/yamllint) which require Python + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.6.1 + with: + version: v3.11.0 + + - name: Run chart-testing (list-changed) + id: list-changed + run: | + changed=$(ct list-changed --config ct.yaml) + if [[ -n "$changed" ]]; then + echo "::set-output name=changed::true" + fi + + - name: Run chart-testing (lint) + run: ct lint --config ct.yaml \ No newline at end of file diff --git a/.github/workflows/test-operator-wandb.yaml b/.github/workflows/test-operator-wandb.yaml new file mode 100644 index 000000000..784ae02b3 --- /dev/null +++ b/.github/workflows/test-operator-wandb.yaml @@ -0,0 +1,70 @@ +name: Test operator-wandb Chart + +on: + pull_request: + paths: charts/operator-wandb/** + +jobs: + test: + name: Test Chart + strategy: + matrix: + k8s-version: ["v1.32.1"] + configuration: ["default"] + runs-on: ubuntu-22.04 + environment: Helm Charts + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Helm + uses: azure/setup-helm@v3.4 + with: + version: v3.16.3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.6.1 + with: + version: v3.11.0 + + - name: Run chart-testing (list-changed) + id: list-changed + run: | + changed=$(ct list-changed --config ct.yaml) + if [[ -n "$changed" ]]; then + echo "::set-output name=changed::true" + fi + + - name: Create kind cluster + uses: helm/kind-action@v1.12.0 + with: + version: v0.26.0 + cluster_name: chart-testing-${{ matrix.k8s-version }}-${{ matrix.configuration }} + node_image: kindest/node:${{ matrix.k8s-version }} + if: env.ACT || steps.list-changed.outputs.changed == 'true' + + - name: Install Minio + run: kubectl --context kind-chart-testing-${{ matrix.k8s-version }}-${{ matrix.configuration }} apply -f test-configs/minio/default.yaml + if: env.ACT || steps.list-changed.outputs.changed == 'true' + + - name: Wait for Minio to be Ready + run: kubectl --context kind-chart-testing-${{ matrix.k8s-version }}-${{ matrix.configuration }} -n minio wait --for=condition=Ready pod/minio --timeout=300s + if: env.ACT || steps.list-changed.outputs.changed == 'true' + + - name: Run chart-testing (install) + env: + LICENSE: ${{ secrets.LICENSE }} + if: steps.list-changed.outputs.changed == 'true' + run: | + ct install \ + --charts ./charts/operator-wandb \ + --config ct.yaml \ + --helm-extra-args '--kube-context kind-chart-testing-${{ matrix.k8s-version }}-${{ matrix.configuration }}' \ + --helm-extra-set-args '--values test-configs/operator-wandb/${{ matrix.configuration }}.yaml --set=license=$LICENSE' \ No newline at end of file diff --git a/.github/workflows/test-operator.yaml b/.github/workflows/test-operator.yaml new file mode 100644 index 000000000..ee234ed0f --- /dev/null +++ b/.github/workflows/test-operator.yaml @@ -0,0 +1,54 @@ +# TODO(dpanzella): Uncomment this file when the ready for automated tests of the operator chart + +#name: Test operator Chart +# +#on: +# pull_request: +# paths: charts/operator/** +# +#jobs: +# test: +# runs-on: ubuntu-latest +# environment: Helm Charts +# steps: +# - name: Checkout +# uses: actions/checkout@v2 +# with: +# fetch-depth: 0 +# +# - name: Set up Helm +# uses: azure/setup-helm@v3.4 +# with: +# version: v3.16.3 +# +# # Python is required because `ct lint` runs Yamale (https://github.com/23andMe/Yamale) and +# # yamllint (https://github.com/adrienverge/yamllint) which require Python +# - name: Set up Python +# uses: actions/setup-python@v4 +# with: +# python-version: "3.10" +# +# - name: Set up chart-testing +# uses: helm/chart-testing-action@v2.6.1 +# with: +# version: v3.11.0 +# +# - name: Run chart-testing (list-changed) +# id: list-changed +# run: | +# changed=$(ct list-changed --config ct.yaml) +# if [[ -n "$changed" ]]; then +# echo "::set-output name=changed::true" +# fi +# +# - name: Create kind cluster +# uses: helm/kind-action@v1.8.0 +# with: +# version: v0.20.0 +# if: env.ACT || steps.list-changed.outputs.changed == 'true' +# +# - name: Run chart-testing (install) +# env: +# LICENSE: ${{ secrets.LICENSE }} +# if: steps.list-changed.outputs.changed == 'true' +# run: ct install --charts ./charts/operator --config ct.yaml --helm-extra-set-args --set=license=$LICENSE diff --git a/.github/workflows/lint-test.yaml b/.github/workflows/test-wandb.yaml similarity index 91% rename from .github/workflows/lint-test.yaml rename to .github/workflows/test-wandb.yaml index ff32a20bd..8cf9dbb21 100644 --- a/.github/workflows/lint-test.yaml +++ b/.github/workflows/test-wandb.yaml @@ -1,9 +1,11 @@ -name: Lint and Test Charts +name: Test wandb Chart -on: pull_request +on: + pull_request: + paths: charts/wandb/** jobs: - lint-test: + test: runs-on: ubuntu-latest environment: Helm Charts steps: @@ -37,9 +39,6 @@ jobs: echo "::set-output name=changed::true" fi - - name: Run chart-testing (lint) - run: ct lint --config ct.yaml - - name: Create kind cluster uses: helm/kind-action@v1.8.0 with: diff --git a/charts/operator-wandb/Chart.yaml b/charts/operator-wandb/Chart.yaml index bcdac3591..c53990c96 100644 --- a/charts/operator-wandb/Chart.yaml +++ b/charts/operator-wandb/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: operator-wandb description: A Helm chart for deploying W&B to Kubernetes type: application -version: 0.24.8 +version: 0.24.9 appVersion: 1.0.0 icon: https://wandb.ai/logo.svg diff --git a/charts/operator-wandb/charts/mysql/templates/statefulset.yaml b/charts/operator-wandb/charts/mysql/templates/statefulset.yaml index 438e0931a..707fdef79 100644 --- a/charts/operator-wandb/charts/mysql/templates/statefulset.yaml +++ b/charts/operator-wandb/charts/mysql/templates/statefulset.yaml @@ -70,6 +70,15 @@ spec: - sh - -c - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" + startupProbe: + initialDelaySeconds: 20 + periodSeconds: 5 + failureThreshold: 60 + exec: + command: + - sh + - -c + - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}" volumeMounts: - name: data mountPath: /var/lib/mysql diff --git a/charts/operator-wandb/templates/tests/test-connection.yaml b/charts/operator-wandb/templates/tests/test-connection.yaml new file mode 100644 index 000000000..8d1345cd6 --- /dev/null +++ b/charts/operator-wandb/templates/tests/test-connection.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{ include "wandb.fullname" . }}-test-connection" + labels: + {{- include "wandb.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": test +spec: + containers: + - name: wandb-verify + image: python:3.10 + env: + - name: WANDB_BASE_URL + value: "http://{{ .Release.Name }}-app:8080" + - name: WANDB_API_KEY + value: "test-api-key" + # wandb verify is terribly flaky, there's a PR up to fix it until then we try 3 times + command: + - sh + - -c + - "pip install wandb==0.17.8 && (wandb verify || (sleep 10 && wandb verify) || (sleep 10 && wandb verify))" + restartPolicy: Never diff --git a/test-configs/minio/default.yaml b/test-configs/minio/default.yaml new file mode 100644 index 000000000..2c8908e21 --- /dev/null +++ b/test-configs/minio/default.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: minio # Change this value if you want a different namespace name + labels: + name: minio # Change this value to match metadata.name +--- +apiVersion: v1 +kind: Pod +metadata: + labels: + app: minio + name: minio + namespace: minio +spec: + containers: + - name: minio + image: quay.io/minio/minio:latest + env: + - name: MINIO_ACCESS_KEY + value: "minio" + - name: MINIO_SECRET_KEY + value: "minio123" + command: + - /bin/bash + - -c + args: + - mkdir -p /data/bucket && minio server /data --console-address :9090 + ports: + - containerPort: 9000 + name: minio + volumeMounts: + - mountPath: /data + name: localvolume # + volumes: + - name: localvolume + hostPath: + path: /mnt/minio/data + type: DirectoryOrCreate +--- +apiVersion: v1 +kind: Service +metadata: + name: minio + namespace: minio # Change this value to match the namespace metadata.name +spec: + selector: + app: minio + ports: + - port: 9000 + name: minio \ No newline at end of file diff --git a/test-configs/operator-wandb/default.yaml b/test-configs/operator-wandb/default.yaml new file mode 100644 index 000000000..cac3dd7cc --- /dev/null +++ b/test-configs/operator-wandb/default.yaml @@ -0,0 +1,21 @@ +global: + bucket: + provider: "s3" + name: "minio.minio.svc.cluster.local:9000/bucket" + region: "us-east-1" + accessKey: "minio" + secretKey: "minio123" + +app: + extraEnv: + GLOBAL_ADMIN_API_KEY: "test-api-key" + GORILLA_INSECURE_ALLOW_API_KEY_ADMIN_ACCESS: "true" + +ingress: + install: false + create: false + +mysql: + install: true +redis: + install: true