Skip to content

Commit 2e4b977

Browse files
committed
[maestrod] initial chart
1 parent 79799b5 commit 2e4b977

29 files changed

Lines changed: 2206 additions & 1 deletion

.github/workflows/helm-docs.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,10 @@ jobs:
2727
chart-search-root: charts/ai-assistant
2828
# git-push: true
2929
fail-on-diff: true
30+
31+
- name: Run helm-docs for Maestrod
32+
uses: losisin/helm-docs-github-action@v1
33+
with:
34+
chart-search-root: charts/maestrod
35+
# git-push: true
36+
fail-on-diff: true

CLAUDE.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@ Nutrient Helm Charts repository. Contains Kubernetes Helm charts for Nutrient pr
1515
|-------|-------------|
1616
| `document-engine` | Backend for document processing and automation workflows. Most complex chart. |
1717
| `ai-assistant` | AI Assistant application. Depends on `document-engine` chart. |
18+
| `maestrod` | Orchestration backend for Nutrient managed cloud workloads. Single stateless Deployment. |
1819
| `signing-service-example` | Example chart for demonstration. Excluded from CI. |
1920
| `simple-resource-wrapper` | Generic Kubernetes resource wrapper (Terraform workaround). |
2021

2122
## Code Generation — Do Not Edit Generated Files Directly
2223

2324
### README.md (helm-docs)
2425

25-
README.md files for `document-engine` and `ai-assistant` are **auto-generated** by
26+
README.md files for `document-engine`, `ai-assistant`, and `maestrod` are **auto-generated** by
2627
[helm-docs](https://github.com/norwoodj/helm-docs). CI fails if they are out of sync.
2728

2829
- **Template**: `charts/<chart>/README.md.gotmpl`
@@ -34,6 +35,7 @@ To regenerate locally:
3435
```bash
3536
helm-docs --chart-search-root charts/document-engine
3637
helm-docs --chart-search-root charts/ai-assistant
38+
helm-docs --chart-search-root charts/maestrod
3739
```
3840

3941
### values.schema.json (helm-values-schema-json)
@@ -49,6 +51,7 @@ To regenerate locally:
4951
```bash
5052
cd charts/document-engine && helm schema -input values.yaml -draft 2020 -indent 2 -output values.schema.json
5153
cd charts/ai-assistant && helm schema -input values.yaml -draft 2020 -indent 2 -output values.schema.json
54+
cd charts/maestrod && helm schema
5255
```
5356

5457
## values.yaml Comment Conventions
@@ -135,6 +138,7 @@ After modifying any chart, regenerate derived files before committing:
135138
```bash
136139
helm-docs --chart-search-root charts/document-engine
137140
helm-docs --chart-search-root charts/ai-assistant
141+
helm-docs --chart-search-root charts/maestrod
138142
```
139143
2. **values.schema.json** — run `helm schema` whenever `values.yaml` schema annotations change:
140144
```bash

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ helm upgrade --install -n document-engine \
2121
-f ./document-engine-values.yaml
2222
```
2323

24+
### Maestrod
25+
26+
```
27+
helm upgrade --install -n maestrod \
28+
maestrod nutrient/maestrod \
29+
-f ./maestrod-values.yaml
30+
```
31+
2432
## Support, Issues and License Questions
2533

2634
Nutrient offers support via https://support.nutrient.io/hc/en-us/requests/new

charts/maestrod/.helmignore

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*.orig
18+
*~
19+
# Various IDEs
20+
.project
21+
.idea/
22+
*.tmproj
23+
.vscode/

charts/maestrod/.schema.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
input:
2+
- values.yaml
3+
4+
draft: 2020
5+
indent: 2
6+
output: values.schema.json

charts/maestrod/CHANGELOG.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# Changelog
2+
3+
- [Changelog](#changelog)
4+
- [0.4.0 (2026-05-26)](#040-2026-05-26)
5+
- [Added](#added)
6+
- [Changed](#changed)
7+
8+
## 0.4.0 (2026-05-26)
9+
10+
First public release of the Maestrod Helm chart on
11+
[`https://pspdfkit.github.io/helm-charts`](https://pspdfkit.github.io/helm-charts).
12+
Continues the version line from the internal `0.3.4` chart with full
13+
backwards-compatibility for existing value paths.
14+
15+
### Added
16+
17+
* `licenseSecret.name: ""` now skips wiring the `NUTRIENT_LICENSE_KEY` env var
18+
entirely (vs. the internal `0.3.4` chart which always rendered the
19+
`secretKeyRef`, leaving pods in `CreateContainerConfigError` whenever the
20+
Secret was missing). The default `licenseSecret.name: maestrod-secret`
21+
preserves the previous behaviour for existing consumers.
22+
* `podDisruptionBudget.{minAvailable,maxUnavailable}` accept integer or
23+
percentage string (e.g. `"50%"`); the schema reflects that.
24+
* Sectioned `values.yaml` with `# @section`, `# --`, `# @schema`, and `# @notationType`
25+
annotations for [helm-docs](https://github.com/norwoodj/helm-docs) and
26+
[helm-values-schema-json](https://github.com/losisin/helm-values-schema-json).
27+
* Generated `README.md` (helm-docs) and `values.schema.json`
28+
(helm-values-schema-json).
29+
* Optional `ServiceAccount` via `serviceAccount.{create,name,annotations,automount}`
30+
(defaults to `create: false` so existing pod specs are unchanged).
31+
* Optional [HorizontalPodAutoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)
32+
via `autoscaling.*` (defaults to disabled).
33+
* Optional [PodDisruptionBudget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/)
34+
via `podDisruptionBudget.*` (defaults to disabled).
35+
* Optional `startupProbe`, `livenessProbe`, and `lifecycle` hooks alongside the
36+
existing `readinessProbe`.
37+
* `extraEnvs`, `extraEnvFrom`, `extraEnvFromSecrets`, `extraVolumes`,
38+
`extraVolumeMounts`, `sidecars`, `initContainers` for extending the
39+
pod spec without modifying templates.
40+
* `deploymentAnnotations`, `topologySpreadConstraints`, `schedulerName` knobs.
41+
* `helm test` connection probe under `templates/tests/test-connection.yaml`.
42+
* `ci/` test value files for `helm-chart-testing`.
43+
44+
### Changed
45+
46+
* **Migration from internal `0.3.4`:** the following defaults changed; users who
47+
previously relied on them must set them explicitly in their values file:
48+
49+
```yaml
50+
image:
51+
repository: 111300957880.dkr.ecr.eu-west-1.amazonaws.com/maestrod # was the default
52+
tag: stable # was the default
53+
pullPolicy: Always # was the default
54+
55+
imagePullSecrets:
56+
- name: image-registry-mcleod-ecr # was the default
57+
58+
podLabels:
59+
component_name: maestrod # was the default
60+
otel/logging-enabled: "true" # was the default
61+
62+
# only if restartJob.enabled: true
63+
restartJob:
64+
registryAuthSecretName: image-registry-mcleod-ecr # was the default
65+
```
66+
67+
All other values keys (`licenseSecret`, `maestro.*`, `service`, `ingress`,
68+
`subdomainHostName`, `subdomainRootName`, `environmentShortName`, scheduling,
69+
resources, `updateStrategy`, `restartJob.*`) keep identical defaults and
70+
semantics.
71+
72+
* `image.repository` no longer has a default; the JSON schema rejects an empty
73+
string at install time. Set it to the registry/repository hosting your
74+
Maestrod image.
75+
* `image.tag` defaults to the chart's `appVersion` when unset (matches the
76+
convention used by the other charts in this repo).
77+
* `image.pullPolicy` defaults to `IfNotPresent` (consistent with a pinned tag).
78+
* `imagePullSecrets` defaults to `[]`.
79+
* `podLabels` defaults to `{}`.
80+
* Restart Job templates moved to `templates/restart-job/`. The CronJob remains
81+
opt-in (`restartJob.enabled: false` by default) and now requires
82+
`restartJob.registryAuthSecretName` to be set explicitly when enabled.
83+
84+
### Fixed
85+
86+
* `PodDisruptionBudget` template no longer renders both `minAvailable` and
87+
`maxUnavailable` simultaneously (which Kubernetes rejects). When
88+
`maxUnavailable` is non-empty it takes precedence; otherwise `minAvailable`
89+
is rendered.

charts/maestrod/Chart.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v2
2+
name: maestrod
3+
type: application
4+
description: Maestrod, the orchestration backend for Nutrient managed cloud workloads.
5+
home: https://www.nutrient.io
6+
icon: https://cdn.prod.website-files.com/65fdb7696055f07a05048833/66e58e33c3880ff24aa34027_nutrient-logo.png
7+
version: 0.4.0
8+
appVersion: "1.0.0"
9+
10+
keywords:
11+
- nutrient
12+
- maestrod
13+
14+
maintainers:
15+
- name: Nutrient
16+
email: support@nutrient.io
17+
url: https://www.nutrient.io

charts/maestrod/LICENSE

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
The Nutrient Sample applications are licensed with a modified BSD
2+
license. In plain language: you're allowed to do whatever you wish
3+
with the code, modify, redistribute, embed in your products (free or
4+
commercial), but you must include copyright, terms of usage and
5+
disclaimer as stated in the license.
6+
7+
You will require a commercial Nutrient License to run these examples
8+
in non-demo mode. Please refer to sales@nutrient.io for details.
9+
10+
Copyright © 2018-present PSPDFKit GmbH.
11+
All rights reserved.
12+
13+
Redistribution and use in source or binary forms,
14+
with or without modification, are permitted provided
15+
that the following conditions are met:
16+
17+
- Redistributions of source code must retain the above copyright
18+
notice, this list of conditions and the following disclaimer.
19+
20+
- Redistributions in binary form must reproduce the above copyright
21+
notice, this list of conditions and the following disclaimer in the
22+
documentation and/or other materials provided with the
23+
distribution.
24+
25+
- Redistributions of Nutrient Samples must include attribution to
26+
Nutrient, either in documentation or other appropriate media.
27+
28+
- Neither the name of the Nutrient, PSPDFKit GmbH, nor its developers
29+
may be used to endorse or promote products derived from
30+
this software without specific prior written permission.
31+
32+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
35+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36+
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
38+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
39+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
40+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
42+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

0 commit comments

Comments
 (0)