diff --git a/charts/mastodon/tests/30_shared_pod_attribtues_test.yaml b/charts/mastodon/tests/30_shared_pod_attribtues_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4f15697533e781d330e6563da044f0f573c37d9c --- /dev/null +++ b/charts/mastodon/tests/30_shared_pod_attribtues_test.yaml @@ -0,0 +1,124 @@ +suite: shared pod attributes +templates: + - configmap-env.yaml + - deployment-sidekiq.yaml + - deployment-streaming.yaml + - deployment-web.yaml + - pvc-assets.yaml + - pvc-system.yaml + - secrets.yaml +tests: + - it: has the correct "envFrom" settings for secret and configmap + values: + - mocks/dev.yaml + - mocks/sidekiq.yaml + asserts: + - equal: + path: spec.template.spec.containers[0].envFrom[0].configMapRef.name + value: RELEASE-NAME-mastodon-env + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.containers[0].envFrom[1].secretRef.name + value: RELEASE-NAME-mastodon + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.containers[0].envFrom[0].configMapRef.name + value: RELEASE-NAME-mastodon-env + template: deployment-streaming.yaml + - equal: + path: spec.template.spec.containers[0].envFrom[1].secretRef.name + value: RELEASE-NAME-mastodon + template: deployment-streaming.yaml + - equal: + path: spec.template.spec.containers[0].envFrom[0].configMapRef.name + value: RELEASE-NAME-mastodon-env + template: deployment-web.yaml + - equal: + path: spec.template.spec.containers[0].envFrom[1].secretRef.name + value: RELEASE-NAME-mastodon + template: deployment-web.yaml + - equal: + path: metadata.name + value: RELEASE-NAME-mastodon-env + template: configmap-env.yaml + - equal: + path: metadata.name + value: RELEASE-NAME-mastodon + template: secrets.yaml + - it: has the correct volumes + values: + - mocks/dev.yaml + - mocks/sidekiq.yaml + asserts: + - equal: + path: spec.template.spec.volumes[0].name + value: assets + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.volumes[0].persistentVolumeClaim.claimName + value: RELEASE-NAME-mastodon-assets + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.volumes[1].name + value: system + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.volumes[1].persistentVolumeClaim.claimName + value: RELEASE-NAME-mastodon-system + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].name + value: assets + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].mountPath + value: /opt/mastodon/public/assets + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[1].name + value: system + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[1].mountPath + value: /opt/mastodon/public/system + template: deployment-sidekiq.yaml + - equal: + path: spec.template.spec.volumes[0].name + value: assets + template: deployment-web.yaml + - equal: + path: spec.template.spec.volumes[0].persistentVolumeClaim.claimName + value: RELEASE-NAME-mastodon-assets + template: deployment-web.yaml + - equal: + path: spec.template.spec.volumes[1].name + value: system + template: deployment-web.yaml + - equal: + path: spec.template.spec.volumes[1].persistentVolumeClaim.claimName + value: RELEASE-NAME-mastodon-system + template: deployment-web.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].name + value: assets + template: deployment-web.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[0].mountPath + value: /opt/mastodon/public/assets + template: deployment-web.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[1].name + value: system + template: deployment-web.yaml + - equal: + path: spec.template.spec.containers[0].volumeMounts[1].mountPath + value: /opt/mastodon/public/system + template: deployment-web.yaml + - equal: + path: metadata.name + value: RELEASE-NAME-mastodon-assets + template: pvc-assets.yaml + - equal: + path: metadata.name + value: RELEASE-NAME-mastodon-system + template: pvc-system.yaml \ No newline at end of file diff --git a/charts/mastodon/tests/50_sidekiq_test.yaml b/charts/mastodon/tests/50_sidekiq_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6bcb3b2623ca41ccf4042a3c97989eac62a5117c --- /dev/null +++ b/charts/mastodon/tests/50_sidekiq_test.yaml @@ -0,0 +1,81 @@ +suite: sidekiq +templates: + - configmap-env.yaml + - deployment-sidekiq.yaml + - secrets.yaml +tests: + - it: should match basic snapshot + values: + - mocks/dev.yaml + chart: + version: 1.2.3 + appVersion: 4.5.6 + asserts: + - matchSnapshot: {} + - it: should create multiple deployments when multiple queues are defined + values: + - mocks/dev.yaml + set: + mastodon: + sidekiq: + workers: + - name: scheduler + concurrency: 25 + replicas: 1 + queues: + - scheduler + - name: push-pull + concurrency: 50 + replicas: 2 + queues: + - push,6 + - pull + - ingress,4 + - name: mailers + concurrency: 25 + replicas: 2 + queues: + - mailers + - name: default + concurrency: 25 + replicas: 2 + queues: + - default + asserts: + - hasDocuments: + count: 4 + template: deployment-sidekiq.yaml + - it: should use strategy recreate if scheduler is part of queues + values: + - mocks/dev.yaml + - mocks/sidekiq.yaml + asserts: + - equal: + path: spec.strategy.type + value: Recreate + documentIndex: 0 + template: deployment-sidekiq.yaml + - isNull: + path: spec.strategy + documentIndex: 1 + template: deployment-sidekiq.yaml + - it: has the correct labels for sidekiq + values: + - mocks/dev.yaml + - mocks/sidekiq.yaml + asserts: + - equal: + path: spec.selector.matchLabels.app\.kubernetes\.io/component + value: sidekiq-scheduler + documentIndex: 0 + template: deployment-sidekiq.yaml + - equal: + path: spec.selector.matchLabels.app\.kubernetes\.io/component + value: sidekiq-default + documentIndex: 1 + template: deployment-sidekiq.yaml + - equal: + path: spec.selector.matchLabels.app\.kubernetes\.io/part-of + value: rails + template: deployment-sidekiq.yaml + diff --git a/charts/mastodon/tests/50_web_test.yaml b/charts/mastodon/tests/50_web_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9d17ba46dcaf7129b72fd56b2127be2fe9df5e21 --- /dev/null +++ b/charts/mastodon/tests/50_web_test.yaml @@ -0,0 +1,58 @@ +suite: web +templates: + - configmap-env.yaml + - deployment-web.yaml + - ingress.yaml + - secrets.yaml + - service-web.yaml +tests: + - it: should match basic snapshot + values: + - mocks/dev.yaml + chart: + version: 1.2.3 + appVersion: 4.5.6 + capabilities: + apiVersions: + - networking.k8s.io/v1/Ingress + asserts: + - matchSnapshot: {} + - it: should provide mathing ports for Ingress, Service and Pod + values: + - mocks/dev.yaml + capabilities: + apiVersions: + - networking.k8s.io/v1/Ingress + asserts: + - equal: + path: spec.template.spec.containers[0].ports[0].name + value: http + template: deployment-web.yaml + - equal: + path: spec.ports[0].targetPort + value: http + template: service-web.yaml + - equal: + path: spec.template.spec.containers[0].ports[0].protocol + value: TCP + template: deployment-web.yaml + - equal: + path: spec.ports[0].protocol + value: TCP + template: service-web.yaml + - equal: + path: spec.ports[0].port + value: 3000 + template: service-web.yaml + - equal: + path: spec.rules[0].http.paths[0].backend.service.port.number + value: 3000 + template: ingress.yaml + - equal: + path: metadata.name + value: RELEASE-NAME-mastodon-web + template: service-web.yaml + - equal: + path: spec.rules[0].http.paths[0].backend.service.name + value: RELEASE-NAME-mastodon-web + template: ingress.yaml diff --git a/charts/mastodon/tests/98_snapshot_test.yaml b/charts/mastodon/tests/98_snapshot_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..87290ef4079a6a7c4835a78e9dc13e35560977dc --- /dev/null +++ b/charts/mastodon/tests/98_snapshot_test.yaml @@ -0,0 +1,32 @@ +suite: Basic Snapshot test +templates: + - configmap-env.yaml + - cronjob-media-remove.yaml + - deployment-sidekiq.yaml + - deployment-streaming.yaml + - deployment-web.yaml + - ingress.yaml + - job-assets-precompile.yaml + - job-chewy-upgrade.yaml + - job-create-admin.yaml + - job-db-migrate.yaml + - job-db-pre-migrate.yaml + - pvc-assets.yaml + - pvc-system.yaml + - secrets.yaml + - serviceaccount.yaml + - service-streaming.yaml + - service-web.yaml +tests: + - it: should match basic snapshot + values: + - mocks/dev.yaml + set: + mastodon: + createAdmin: + enabled: true + chart: + version: 1.2.3 + appVersion: 4.5.6 + asserts: + - matchSnapshot: {} diff --git a/charts/mastodon/tests/99_helmlabels_test.yaml b/charts/mastodon/tests/99_helmlabels_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fecc1e2aab2e2fe049f83bb50857dc05b2efabec --- /dev/null +++ b/charts/mastodon/tests/99_helmlabels_test.yaml @@ -0,0 +1,41 @@ +suite: Kubernetes recommendations +templates: + - configmap-env.yaml + - cronjob-media-remove.yaml + - deployment-sidekiq.yaml + - deployment-streaming.yaml + - deployment-web.yaml + - ingress.yaml + - job-assets-precompile.yaml + - job-chewy-upgrade.yaml + - job-create-admin.yaml + - job-db-migrate.yaml + - job-db-pre-migrate.yaml + - pvc-assets.yaml + - pvc-system.yaml + - secrets.yaml + - serviceaccount.yaml + - service-streaming.yaml + - service-web.yaml +tests: + - it: should have the kubernetes recommended labels + values: + - mocks/dev.yaml + set: + mastodon: + createAdmin: + enabled: true + release: + name: "test-suite" + chart: + version: 1.2.3 + asserts: + - equal: + path: metadata.labels.[app.kubernetes.io/instance] + value: "test-suite" + - equal: + path: metadata.labels.[app.kubernetes.io/managed-by] + value: "Helm" + - equal: + path: metadata.labels.[app.kubernetes.io/name] + value: "mastodon" diff --git a/charts/mastodon/tests/__snapshot__/50_sidekiq_test.yaml.snap b/charts/mastodon/tests/__snapshot__/50_sidekiq_test.yaml.snap new file mode 100644 index 0000000000000000000000000000000000000000..bd53acffc71254703967eca07088ec3ab9c10613 --- /dev/null +++ b/charts/mastodon/tests/__snapshot__/50_sidekiq_test.yaml.snap @@ -0,0 +1,147 @@ +should match basic snapshot: + 1: | + apiVersion: v1 + data: + DB_HOST: RELEASE-NAME-postgresql + DB_NAME: mastodon_production + DB_POOL: "25" + DB_PORT: "5432" + DB_USER: mastodon + DEFAULT_LOCALE: en + ES_ENABLED: "true" + ES_HOST: RELEASE-NAME-elasticsearch-master-hl + ES_PORT: "9200" + LOCAL_DOMAIN: mastodon.local + MALLOC_ARENA_MAX: "2" + NODE_ENV: production + PREPARED_STATEMENTS: "true" + RAILS_ENV: production + REDIS_HOST: RELEASE-NAME-redis-master + REDIS_PORT: "6379" + SMTP_AUTH_METHOD: plain + SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt + SMTP_DELIVERY_METHOD: smtp + SMTP_ENABLE_STARTTLS: auto + SMTP_FROM_ADDRESS: notifications@example.com + SMTP_OPENSSL_VERIFY_MODE: peer + SMTP_PORT: "587" + SMTP_SERVER: smtp.mailgun.org + STREAMING_CLUSTER_NUM: "1" + kind: ConfigMap + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-env + 2: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: + app.kubernetes.io/component: sidekiq-all-queues + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-sidekiq-all-queues + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: sidekiq-all-queues + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + strategy: + type: Recreate + template: + metadata: + annotations: + checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726 + checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4 + rollme: "0" + labels: + app.kubernetes.io/component: sidekiq-all-queues + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + spec: + containers: + - command: + - bundle + - exec + - sidekiq + - -c + - "25" + - -q + - default,8 + - -q + - push,6 + - -q + - ingress,4 + - -q + - mailers,2 + - -q + - pull + - -q + - scheduler + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: mastodon + resources: {} + securityContext: {} + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + securityContext: + fsGroup: 991 + runAsGroup: 991 + runAsUser: 991 + serviceAccountName: RELEASE-NAME-mastodon + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 3: | + apiVersion: v1 + data: + OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA== + SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl + VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk= + VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ== + kind: Secret + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon + type: Opaque diff --git a/charts/mastodon/tests/__snapshot__/50_web_test.yaml.snap b/charts/mastodon/tests/__snapshot__/50_web_test.yaml.snap new file mode 100644 index 0000000000000000000000000000000000000000..5f5ca5e7493aba68246b41826598fbc57e51082e --- /dev/null +++ b/charts/mastodon/tests/__snapshot__/50_web_test.yaml.snap @@ -0,0 +1,204 @@ +should match basic snapshot: + 1: | + apiVersion: v1 + data: + DB_HOST: RELEASE-NAME-postgresql + DB_NAME: mastodon_production + DB_POOL: "25" + DB_PORT: "5432" + DB_USER: mastodon + DEFAULT_LOCALE: en + ES_ENABLED: "true" + ES_HOST: RELEASE-NAME-elasticsearch-master-hl + ES_PORT: "9200" + LOCAL_DOMAIN: mastodon.local + MALLOC_ARENA_MAX: "2" + NODE_ENV: production + PREPARED_STATEMENTS: "true" + RAILS_ENV: production + REDIS_HOST: RELEASE-NAME-redis-master + REDIS_PORT: "6379" + SMTP_AUTH_METHOD: plain + SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt + SMTP_DELIVERY_METHOD: smtp + SMTP_ENABLE_STARTTLS: auto + SMTP_FROM_ADDRESS: notifications@example.com + SMTP_OPENSSL_VERIFY_MODE: peer + SMTP_PORT: "587" + SMTP_SERVER: smtp.mailgun.org + STREAMING_CLUSTER_NUM: "1" + kind: ConfigMap + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-env + 2: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-web + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: web + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + template: + metadata: + annotations: + checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726 + checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4 + rollme: "0" + labels: + app.kubernetes.io/component: web + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + spec: + containers: + - command: + - bundle + - exec + - puma + - -C + - config/puma.rb + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + livenessProbe: + tcpSocket: + port: http + name: mastodon-web + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: http + startupProbe: + failureThreshold: 30 + httpGet: + path: /health + port: http + periodSeconds: 5 + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + securityContext: + fsGroup: 991 + runAsGroup: 991 + runAsUser: 991 + serviceAccountName: RELEASE-NAME-mastodon + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 3: | + apiVersion: networking.k8s.io/v1 + kind: Ingress + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon + spec: + rules: + - host: mastodon.local + http: + paths: + - backend: + service: + name: RELEASE-NAME-mastodon-web + port: + number: 3000 + path: / + pathType: Prefix + - backend: + service: + name: RELEASE-NAME-mastodon-streaming + port: + number: 4000 + path: /api/v1/streaming + pathType: Prefix + tls: + - hosts: + - mastodon.local + secretName: mastodon-tls + 4: | + apiVersion: v1 + data: + OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA== + SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl + VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk= + VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ== + kind: Secret + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon + type: Opaque + 5: | + apiVersion: v1 + kind: Service + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-web + spec: + ports: + - name: http + port: 3000 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/component: web + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + type: ClusterIP diff --git a/charts/mastodon/tests/__snapshot__/98_snapshot_test.yaml.snap b/charts/mastodon/tests/__snapshot__/98_snapshot_test.yaml.snap new file mode 100644 index 0000000000000000000000000000000000000000..92c567d5c92f5fe0f17ce865f4cf368258c997dd --- /dev/null +++ b/charts/mastodon/tests/__snapshot__/98_snapshot_test.yaml.snap @@ -0,0 +1,811 @@ +should match basic snapshot: + 1: | + apiVersion: v1 + data: + DB_HOST: RELEASE-NAME-postgresql + DB_NAME: mastodon_production + DB_POOL: "25" + DB_PORT: "5432" + DB_USER: mastodon + DEFAULT_LOCALE: en + ES_ENABLED: "true" + ES_HOST: RELEASE-NAME-elasticsearch-master-hl + ES_PORT: "9200" + LOCAL_DOMAIN: mastodon.local + MALLOC_ARENA_MAX: "2" + NODE_ENV: production + PREPARED_STATEMENTS: "true" + RAILS_ENV: production + REDIS_HOST: RELEASE-NAME-redis-master + REDIS_PORT: "6379" + SMTP_AUTH_METHOD: plain + SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt + SMTP_DELIVERY_METHOD: smtp + SMTP_ENABLE_STARTTLS: auto + SMTP_FROM_ADDRESS: notifications@example.com + SMTP_OPENSSL_VERIFY_MODE: peer + SMTP_PORT: "587" + SMTP_SERVER: smtp.mailgun.org + STREAMING_CLUSTER_NUM: "1" + kind: ConfigMap + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-env + 2: | + apiVersion: batch/v1 + kind: CronJob + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-media-remove + spec: + jobTemplate: + spec: + template: + metadata: + name: RELEASE-NAME-mastodon-media-remove + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app.kubernetes.io/part-of + operator: In + values: + - rails + topologyKey: kubernetes.io/hostname + containers: + - command: + - bin/tootctl + - media + - remove + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: RELEASE-NAME-mastodon-media-remove + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + restartPolicy: OnFailure + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + schedule: 0 0 * * 0 + 3: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: + app.kubernetes.io/component: sidekiq-all-queues + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-sidekiq-all-queues + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: sidekiq-all-queues + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + strategy: + type: Recreate + template: + metadata: + annotations: + checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726 + checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4 + rollme: "0" + labels: + app.kubernetes.io/component: sidekiq-all-queues + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + spec: + containers: + - command: + - bundle + - exec + - sidekiq + - -c + - "25" + - -q + - default,8 + - -q + - push,6 + - -q + - ingress,4 + - -q + - mailers,2 + - -q + - pull + - -q + - scheduler + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: mastodon + resources: {} + securityContext: {} + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + securityContext: + fsGroup: 991 + runAsGroup: 991 + runAsUser: 991 + serviceAccountName: RELEASE-NAME-mastodon + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 4: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-streaming + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: streaming + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + template: + metadata: + annotations: + checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726 + checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4 + rollme: "0" + labels: + app.kubernetes.io/component: streaming + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + spec: + containers: + - command: + - node + - ./streaming + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "4000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /api/v1/streaming/health + port: streaming + name: mastodon-streaming + ports: + - containerPort: 4000 + name: streaming + protocol: TCP + readinessProbe: + httpGet: + path: /api/v1/streaming/health + port: streaming + securityContext: + fsGroup: 991 + runAsGroup: 991 + runAsUser: 991 + serviceAccountName: RELEASE-NAME-mastodon + 5: | + apiVersion: apps/v1 + kind: Deployment + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-web + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: web + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + template: + metadata: + annotations: + checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726 + checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4 + rollme: "0" + labels: + app.kubernetes.io/component: web + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + app.kubernetes.io/part-of: rails + spec: + containers: + - command: + - bundle + - exec + - puma + - -C + - config/puma.rb + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + livenessProbe: + tcpSocket: + port: http + name: mastodon-web + ports: + - containerPort: 3000 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: http + startupProbe: + failureThreshold: 30 + httpGet: + path: /health + port: http + periodSeconds: 5 + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + securityContext: + fsGroup: 991 + runAsGroup: 991 + runAsUser: 991 + serviceAccountName: RELEASE-NAME-mastodon + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 6: | + apiVersion: networking.k8s.io/v1 + kind: Ingress + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon + spec: + rules: + - host: mastodon.local + http: + paths: + - backend: + service: + name: RELEASE-NAME-mastodon-web + port: + number: 3000 + path: / + pathType: Prefix + - backend: + service: + name: RELEASE-NAME-mastodon-streaming + port: + number: 4000 + path: /api/v1/streaming + pathType: Prefix + tls: + - hosts: + - mastodon.local + secretName: mastodon-tls + 7: | + apiVersion: batch/v1 + kind: Job + metadata: + annotations: + helm.sh/hook: post-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "-2" + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-assets-precompile + spec: + template: + metadata: + name: RELEASE-NAME-mastodon-assets-precompile + spec: + containers: + - command: + - bash + - -c + - | + bundle exec rake assets:precompile && yarn cache clean + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: RELEASE-NAME-mastodon-assets-precompile + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + restartPolicy: Never + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 8: | + apiVersion: batch/v1 + kind: Job + metadata: + annotations: + helm.sh/hook: post-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "-1" + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-chewy-upgrade + spec: + template: + metadata: + name: RELEASE-NAME-mastodon-chewy-upgrade + spec: + containers: + - command: + - bundle + - exec + - rake + - chewy:upgrade + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: RELEASE-NAME-mastodon-chewy-setup + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + restartPolicy: Never + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 9: | + apiVersion: batch/v1 + kind: Job + metadata: + annotations: + helm.sh/hook: post-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "-1" + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-create-admin + spec: + template: + metadata: + name: RELEASE-NAME-mastodon-create-admin + spec: + containers: + - command: + - bin/tootctl + - accounts + - create + - not_gargron + - --email + - not@example.com + - --confirmed + - --role + - Owner + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: RELEASE-NAME-mastodon-create-admin + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + restartPolicy: Never + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 10: | + apiVersion: batch/v1 + kind: Job + metadata: + annotations: + helm.sh/hook: post-install,post-upgrade + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "-2" + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-db-migrate + spec: + template: + metadata: + name: RELEASE-NAME-mastodon-db-migrate + spec: + containers: + - command: + - bundle + - exec + - rake + - db:migrate + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: RELEASE-NAME-mastodon-db-migrate + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + restartPolicy: Never + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 11: | + apiVersion: batch/v1 + kind: Job + metadata: + annotations: + helm.sh/hook: pre-upgrade + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "-2" + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-db-migrate + spec: + template: + metadata: + name: RELEASE-NAME-mastodon-db-migrate + spec: + containers: + - command: + - bundle + - exec + - rake + - db:migrate + env: + - name: DB_PASS + valueFrom: + secretKeyRef: + key: password + name: RELEASE-NAME-postgresql + - name: REDIS_PASSWORD + valueFrom: + secretKeyRef: + key: redis-password + name: RELEASE-NAME-redis + - name: PORT + value: "3000" + - name: SKIP_POST_DEPLOYMENT_MIGRATIONS + value: "true" + envFrom: + - configMapRef: + name: RELEASE-NAME-mastodon-env + - secretRef: + name: RELEASE-NAME-mastodon + image: ghcr.io/mastodon/mastodon:4.5.6 + imagePullPolicy: IfNotPresent + name: RELEASE-NAME-mastodon-db-migrate + volumeMounts: + - mountPath: /opt/mastodon/public/assets + name: assets + - mountPath: /opt/mastodon/public/system + name: system + restartPolicy: Never + volumes: + - name: assets + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-assets + - name: system + persistentVolumeClaim: + claimName: RELEASE-NAME-mastodon-system + 12: | + apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-assets + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: null + 13: | + apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-system + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Gi + storageClassName: null + 14: | + apiVersion: v1 + data: + OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA== + SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl + VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk= + VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ== + kind: Secret + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon + type: Opaque + 15: | + apiVersion: v1 + kind: ServiceAccount + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon + 16: | + apiVersion: v1 + kind: Service + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-streaming + spec: + ports: + - name: streaming + port: 4000 + protocol: TCP + targetPort: streaming + selector: + app.kubernetes.io/component: streaming + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + type: ClusterIP + 17: | + apiVersion: v1 + kind: Service + metadata: + labels: + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: mastodon + app.kubernetes.io/version: 4.5.6 + helm.sh/chart: mastodon-1.2.3 + name: RELEASE-NAME-mastodon-web + spec: + ports: + - name: http + port: 3000 + protocol: TCP + targetPort: http + selector: + app.kubernetes.io/component: web + app.kubernetes.io/instance: RELEASE-NAME + app.kubernetes.io/name: mastodon + type: ClusterIP diff --git a/charts/mastodon/tests/mocks/dev.yaml b/charts/mastodon/tests/mocks/dev.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b3a963ea114f9dc7ec7cfe1f3a181a7d25366188 --- /dev/null +++ b/charts/mastodon/tests/mocks/dev.yaml @@ -0,0 +1,25 @@ +# Chart values used for testing the Helm chart. +# +mastodon: + secrets: + secret_key_base: dummy-secret_key_base + otp_secret: dummy-otp_secret + vapid: + private_key: dummy-vapid-private_key + public_key: dummy-vapid-public_key + +# ref: https://github.com/bitnami/charts/tree/main/bitnami/redis#parameters +redis: + replica: + replicaCount: 1 + +# ref: https://github.com/bitnami/charts/tree/main/bitnami/elasticsearch#parameters +elasticsearch: + master: + replicaCount: 1 + data: + replicaCount: 1 + coordinating: + replicaCount: 1 + ingest: + replicaCount: 1 diff --git a/charts/mastodon/tests/mocks/sidekiq.yaml b/charts/mastodon/tests/mocks/sidekiq.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0903eba13b0c8fda28885c1158fae99d36ce4a6f --- /dev/null +++ b/charts/mastodon/tests/mocks/sidekiq.yaml @@ -0,0 +1,13 @@ +mastodon: + sidekiq: + workers: + - name: scheduler + concurrency: 25 + replicas: 1 + queues: + - scheduler + - name: default + concurrency: 25 + replicas: 2 + queues: + - default \ No newline at end of file