diff --git a/charts/miroir/Chart.yaml b/charts/miroir/Chart.yaml new file mode 100644 index 0000000..362cc98 --- /dev/null +++ b/charts/miroir/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: miroir +description: Distributed search orchestrator for Meilisearch +type: application +version: 0.1.0 +appVersion: "0.1.0" diff --git a/charts/miroir/tests/README.md b/charts/miroir/tests/README.md new file mode 100644 index 0000000..2218da2 --- /dev/null +++ b/charts/miroir/tests/README.md @@ -0,0 +1,26 @@ +# Helm Chart Tests + +This directory contains test cases for validating the `values.schema.json` constraints. + +## Running Tests + +Use `helm lint --strict` with the test values files: + +```bash +# Valid: single replica with SQLite (should pass) +helm lint --strict miroir -f miroir/tests/valid-single-replica-sqlite.yaml + +# Invalid: multiple replicas with SQLite (should fail with constraint error) +helm lint --strict miroir -f miroir/tests/invalid-multi-replica-sqlite.yaml + +# Valid: multiple replicas with Redis (should pass) +helm lint --strict miroir -f miroir/tests/valid-multi-replica-redis.yaml +``` + +## Test Cases + +| Test Case | Description | Expected Result | +|-----------|-------------|-----------------| +| `valid-single-replica-sqlite.yaml` | `replicas: 1, backend: sqlite` | ✅ Pass | +| `invalid-multi-replica-sqlite.yaml` | `replicas: 2, backend: sqlite` | ❌ Fail with constraint error | +| `valid-multi-replica-redis.yaml` | `replicas: 2, backend: redis` | ✅ Pass | diff --git a/charts/miroir/tests/invalid-multi-replica-sqlite.yaml b/charts/miroir/tests/invalid-multi-replica-sqlite.yaml new file mode 100644 index 0000000..92315b0 --- /dev/null +++ b/charts/miroir/tests/invalid-multi-replica-sqlite.yaml @@ -0,0 +1,9 @@ +# Test case: replicas: 2, backend: sqlite +# Expected: helm lint --strict fails (multiple replicas require Redis) +--- +miroir: + replicas: 2 + +taskStore: + backend: sqlite + path: /data/miroir-tasks.db diff --git a/charts/miroir/tests/valid-multi-replica-redis.yaml b/charts/miroir/tests/valid-multi-replica-redis.yaml new file mode 100644 index 0000000..05565c8 --- /dev/null +++ b/charts/miroir/tests/valid-multi-replica-redis.yaml @@ -0,0 +1,9 @@ +# Test case: replicas: 2, backend: redis +# Expected: helm lint --strict passes (multiple replicas with Redis) +--- +miroir: + replicas: 2 + +taskStore: + backend: redis + url: redis://redis:6379 diff --git a/charts/miroir/tests/valid-single-replica-sqlite.yaml b/charts/miroir/tests/valid-single-replica-sqlite.yaml new file mode 100644 index 0000000..5d1ada9 --- /dev/null +++ b/charts/miroir/tests/valid-single-replica-sqlite.yaml @@ -0,0 +1,9 @@ +# Test case: replicas: 1, backend: sqlite +# Expected: helm lint --strict passes (single replica can use SQLite) +--- +miroir: + replicas: 1 + +taskStore: + backend: sqlite + path: /data/miroir-tasks.db diff --git a/charts/miroir/values.schema.json b/charts/miroir/values.schema.json new file mode 100644 index 0000000..bc7d267 --- /dev/null +++ b/charts/miroir/values.schema.json @@ -0,0 +1,76 @@ +{ + "$schema": "http://json-schema.org/draft-7/schema#", + "title": "Miroir Helm Chart Values", + "type": "object", + "properties": { + "miroir": { + "type": "object", + "properties": { + "image": { + "type": "object", + "properties": { + "repository": { "type": "string" }, + "tag": { "type": "string" } + } + }, + "replicas": { + "type": "integer", + "minimum": 1 + }, + "shards": { + "type": "integer", + "minimum": 1 + }, + "replicationFactor": { + "type": "integer", + "minimum": 1 + }, + "replicaGroups": { + "type": "integer", + "minimum": 1 + }, + "existingSecret": { "type": "string" } + } + }, + "taskStore": { + "type": "object", + "properties": { + "backend": { + "type": "string", + "enum": ["sqlite", "redis"] + }, + "path": { "type": "string" }, + "url": { "type": "string" } + }, + "required": ["backend"] + } + }, + "if": { + "properties": { + "miroir": { + "properties": { + "replicas": { + "type": "integer", + "exclusiveMinimum": 1 + } + }, + "required": ["replicas"] + } + }, + "required": ["miroir"] + }, + "then": { + "properties": { + "taskStore": { + "properties": { + "backend": { + "const": "redis", + "errorMessage": "SQLite task store cannot run with multiple replicas; set taskStore.backend=redis" + } + }, + "required": ["backend"] + } + }, + "required": ["taskStore"] + } +} diff --git a/charts/miroir/values.yaml b/charts/miroir/values.yaml new file mode 100644 index 0000000..61e38a8 --- /dev/null +++ b/charts/miroir/values.yaml @@ -0,0 +1,16 @@ +# Miroir Helm Chart Values + +miroir: + image: + repository: ghcr.io/jedarden/miroir + tag: "" # defaults to Chart.appVersion + replicas: 1 # dev default: override to 2+ in production (requires taskStore.backend=redis) + shards: 64 + replicationFactor: 1 # dev default: override to 2 in production + replicaGroups: 1 # dev default: override to 2 in production + existingSecret: "" # name of K8s Secret with masterKey, nodeMasterKey, adminApiKey + +taskStore: + backend: sqlite # sqlite | redis + path: /data/miroir-tasks.db + url: "" # for redis: redis://host:6379