Skip to content
helmstudio
Contents

Publishing

A studio can reach people three ways, from least ceremony to most: a manifest in someone's own helmstudio, a helmstudio.yaml in the studio's repository that anyone can add by URL, and an entry in the registry that ships with helmstudio.

The criteria

Fifteen criteria describe a studio fit to publish. helm validate -criteria, the launcher's editor and its approval screen all score them from one table, so they cannot disagree. Seven can be decided from a manifest alone, and the score counts only those: "5 of 7 checkable pass" rather than "5 of 15", because nothing was checked for the rest. Each of the other eight says what it would need.

Scored against the manifest in wrap a repository:

# Criterion Required This manifest: 5 of 7 checkable pass
1 A valid manifest with a well-formed id Yes Passes
2 Declares what it needs: tools, memory, disk and its peak Yes Passes
3 Installs from a clean machine with no manual steps Yes Not checked: needs the smoke harness, which builds and runs the studio.
4 Exactly one main process, with a health probe Yes Passes
5 Takes the port it is given Yes Passes
6 Releases its memory when stopped Yes Not checked: needs the smoke harness, which builds and runs the studio.
7 Writes only inside its own roots Yes Not checked: needs the smoke harness, which builds and runs the studio.
8 Declares its licence Yes Passes
9 Requests the minimum capabilities it uses, and no more Yes Not checked: needs the studio's source, which is not cloned yet.
10 Survives a restart with its work intact No Not checked: needs the smoke harness, which builds and runs the studio.
11 Fails legibly when a weight or a tool is missing No Not checked: needs the smoke harness, which builds and runs the studio.
12 Theme conformance: tokens only, both themes No Not checked: needs the studio's stylesheets, which are not cloned yet.
13 Declares a test profile No Fails: test.profile is not declared
14 Uninstalls completely Yes Not checked: needs the smoke harness, which builds and runs the studio.
15 Pins the SDK majors it builds against, and its own ref No Fails: undeclared: [sdk]

Required criteria are the ones the design holds a registry entry to. No criterion stops someone installing a studio on their own machine: a failure is shown, so they know what they are deciding.

To check your own studio before you share it:

wrap/validate.sh
helm validate -criteria helmstudio.yaml
theming/lint.sh
helm validate -strict -theme .

Levels

A studio's level is a label on its card, derived from what has been checked. It is never declared in a file, and it never stops anyone running a studio on their own machine.

Level Means Reachable today
Draft A manifest with local_path: a directory already on this machine, which nobody could have reviewed. Yes
Unverified Every other manifest: valid, from a repository, not checked by a harness. Yes
Verified Every required criterion passes, and the smoke harness ran from a clean state. No — there is no smoke harness yet
Registry In helmstudio's registry, verified in CI on every release. No — for the same reason

So every studio today, the four helmstudio launches with included, is Draft or Unverified, and says so.

A registry pull request

The registry is the studios/ directory of helmstudio's repository, one file per studio, named for its id. An entry is a pointer:

publishing/tern-studio.yaml
# studios/tern-studio.yaml: the whole registry entry for a studio whose
# repository ships its own helmstudio.yaml. The ref is the commit that was
# reviewed, so the manifest that runs is the one reviewed.
id: tern-studio
repo: https://github.com/someone/tern
ref: 3f9c2a1d8e7b6c5a4f3e2d1c0b9a8f7e6d5c4b3a

The repository and ref are what a reviewer reads, and the commit the ref resolves to is what installs, so the manifest that runs is the manifest that was reviewed. An entry for a repository that does not ship a helmstudio.yaml carries the manifest inline, under manifest, and any id, repo or ref it sets must match the pointer's. When the repository starts shipping one, the pull request that moves ref removes the inline copy.

A pull request adds or changes one file. helmstudio's gate validates every entry in studios/, inline manifests included. Running each studio's smoke test on a clean machine is part of the design, and is not built.

An update moves ref. An entry never gains a field saying it was checked: there is none to set.