diff --git a/.github/workflows/lint-test.yaml b/.github/workflows/lint-test.yaml index dd6b5fbf..41fbf6a0 100644 --- a/.github/workflows/lint-test.yaml +++ b/.github/workflows/lint-test.yaml @@ -1,8 +1,6 @@ name: Lint and Test Charts -on: - pull_request: - paths: +on: [pull_request] jobs: changes: runs-on: ubuntu-latest-low @@ -20,6 +18,7 @@ jobs: - 'charts/nextcloud/Chart.yaml' - 'charts/nextcloud/values.yaml' - 'charts/nextcloud/templates/**' + - 'charts/nextcloud/tests/**' lint: runs-on: ubuntu-latest-low @@ -57,6 +56,13 @@ jobs: if: steps.list-changed.outputs.changed == 'true' run: ct lint --target-branch ${{ github.event.repository.default_branch }} + - name: Run helm unittest + id: unittest + if: steps.list-changed.outputs.changed == 'true' + run: | + helm plugin install https://github.com/helm-unittest/helm-unittest.git + helm unittest charts/nextcloud + test: runs-on: ubuntu-24.04 needs: [changes, lint] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 11c64ff2..9c0a27c3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,7 @@ Thanks for considering a contribution to this Nextcloud repository run by the co # Pull Requests -Before submitting a feature or fix PR, please make sure your changes are targetted to one feature or fix, and all your commits are signed off. (Learn more the DCO [here](https://probot.github.io/apps/dco)) +Before submitting a feature or fix PR, please make sure your changes are targeted to one feature or fix, and all your commits are signed off. (Learn more the DCO [here](https://probot.github.io/apps/dco)) If you're making a change to the chart templates or `values.yaml`, please also do the following: @@ -13,7 +13,8 @@ If you're making a change to the chart templates or `values.yaml`, please also d - If you're making a change to a non-default value, please also test that value change locally. You can pass in a custom values file to `helm template` with `--values mycustomvalues.yaml` 3. Test installing the chart. A great tool for this is [`ct`](https://github.com/helm/chart-testing/tree/main) using [`ct install`](https://github.com/helm/chart-testing/blob/main/doc/ct_install.md) on a test cluster like [kind](https://kind.sigs.k8s.io/) 4. Make sure new or changed values are updated in the [values.yaml](./charts/nextcloud/values.yaml) and the [README.md](./charts/nextcloud/README.md) -5. Bump the `version` in the [Chart.yaml](./charts/nextcloud/Chart.yaml) according to [Semantic Versioning](https://semver.org) which uses the format `major.minor.patch`. +5. Run the [helm unittests](https://github.com/helm-unittest/helm-unittest): `helm unittest charts/nextcloud` and if necessary update the tests in the snapshot files in the `tests` directory or run `helm unittest charts/nextcloud --update-snapshots`. For bigger features a new test should be added. +6. Bump the `version` in the [Chart.yaml](./charts/nextcloud/Chart.yaml) according to [Semantic Versioning](https://semver.org) which uses the format `major.minor.patch`. Then, please make sure you follow the [pull request template](.github/pull_request_template.md), so we can more quickly review. In order to move your PR forward faster (for instance, bumping the helm chart version for you), please also check the "Allow edits and access to secrets by maintainers" box next to the "Create pull request" button: diff --git a/charts/nextcloud/Chart.yaml b/charts/nextcloud/Chart.yaml index 15310e1b..d0b97f6d 100644 --- a/charts/nextcloud/Chart.yaml +++ b/charts/nextcloud/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: nextcloud -version: 8.5.10 +version: 8.5.11 # renovate: image=docker.io/library/nextcloud appVersion: 32.0.2 description: A file sharing server that puts the control and security of your own data back into your hands. diff --git a/charts/nextcloud/tests/__snapshot__/defaults_test.yaml.snap b/charts/nextcloud/tests/__snapshot__/defaults_test.yaml.snap new file mode 100644 index 00000000..88da170b --- /dev/null +++ b/charts/nextcloud/tests/__snapshot__/defaults_test.yaml.snap @@ -0,0 +1,148 @@ +defaults: + 1: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: + app.kubernetes.io/component: app + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: nextcloud + app.kubernetes.io/version: 1.2.3 + helm.sh/chart: nextcloud-1.0.0 + name: RELEASE-NAME-nextcloud + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: app + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: nextcloud + strategy: + type: Recreate + template: + metadata: + annotations: + hooks-hash: 9525c2748a6c7cd0e28ec740623d0b3fa5a75c83b51ccfd136bc89c76737b204 + nextcloud-config-hash: 8266a725d5474acb6adbf9f0609a3494dc3340a3ac306db90eac9ddb1b851960 + php-config-hash: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a + labels: + app.kubernetes.io/component: app + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: nextcloud + spec: + containers: + - env: + - name: SQLITE_DATABASE + value: nextcloud + - name: NEXTCLOUD_ADMIN_USER + valueFrom: + secretKeyRef: + key: nextcloud-username + name: RELEASE-NAME-nextcloud + - name: NEXTCLOUD_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + key: nextcloud-password + name: RELEASE-NAME-nextcloud + - name: NEXTCLOUD_TRUSTED_DOMAINS + value: nextcloud.kube.home + - name: NEXTCLOUD_DATA_DIR + value: /var/www/html/data + image: docker.io/library/nextcloud:1.2.3-apache + imagePullPolicy: IfNotPresent + livenessProbe: + failureThreshold: 3 + httpGet: + httpHeaders: + - name: Host + value: nextcloud.kube.home + path: /status.php + port: 80 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + name: nextcloud + ports: + - containerPort: 80 + name: http + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + httpHeaders: + - name: Host + value: nextcloud.kube.home + path: /status.php + port: 80 + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 5 + resources: {} + volumeMounts: + - mountPath: /var/www/ + name: nextcloud-main + subPath: root + - mountPath: /var/www/html + name: nextcloud-main + subPath: html + - mountPath: /var/www/html/data + name: nextcloud-main + subPath: data + - mountPath: /var/www/html/config + name: nextcloud-main + subPath: config + - mountPath: /var/www/html/custom_apps + name: nextcloud-main + subPath: custom_apps + - mountPath: /var/www/tmp + name: nextcloud-main + subPath: tmp + - mountPath: /var/www/html/themes + name: nextcloud-main + subPath: themes + securityContext: + fsGroup: 33 + volumes: + - emptyDir: {} + name: nextcloud-main + 2: | + apiVersion: v1 + data: + nextcloud-password: Y2hhbmdlbWU= + nextcloud-username: YWRtaW4= + kind: Secret + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: nextcloud + app.kubernetes.io/version: 1.2.3 + helm.sh/chart: nextcloud-1.0.0 + name: RELEASE-NAME-nextcloud + type: Opaque + 3: | + apiVersion: v1 + kind: Service + metadata: + labels: + app.kubernetes.io/component: app + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: nextcloud + app.kubernetes.io/version: 1.2.3 + helm.sh/chart: nextcloud-1.0.0 + name: RELEASE-NAME-nextcloud + spec: + ports: + - name: http + port: 8080 + protocol: TCP + targetPort: 80 + selector: + app.kubernetes.io/component: app + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: nextcloud + type: ClusterIP diff --git a/charts/nextcloud/tests/defaults_test.yaml b/charts/nextcloud/tests/defaults_test.yaml new file mode 100644 index 00000000..c064afdd --- /dev/null +++ b/charts/nextcloud/tests/defaults_test.yaml @@ -0,0 +1,14 @@ +suite: test my defaults +templates: + - deployment.yaml + - secrets.yaml + - service.yaml +chart: + version: 1.0.0 + appVersion: 1.2.3 +tests: + - it: defaults + set: + metrics.token: "abcd" + asserts: + - matchSnapshot: { } \ No newline at end of file