Dockerfile, a README and an icon. The catalog is built from that repository, so there is no submission form in the dashboard. This tutorial takes the bot from the first tutorial from “works as a private template” to an open pull request, and the same path works for image templates.
Templates in the catalog show a Community badge and your name, are always open code and are packaged by the Vertra build from the commit that was merged, so nobody depends on your account to keep them available.
Before you start
The Vertra CLI and a GitHub account.
Code that you are allowed to distribute publicly, under a license compatible with that. The reviewers check it.
code.view: false, env_hidden and share.full_copy are refused for public templates with forbidden_in_public. If your template is a closed template, it stays private.
Step by step
1
Test it as a private template first
A private template and a public one run on the same engine, so the cheapest test is to use your template for real. In a clean state, check at least:
- Fresh deploy from the wizard or
vertra template deploy, answering the questions with realistic values, then the first screen of the software. - The defaults. Deploy again accepting every default: it must come up without extra steps.
- The skipped paths. If a
whenor an option turns services off, deploy each variant. - Restart and update. Restart the app, publish version
1.0.1and update an app, then roll back. Data must survive restarts. - Minimum RAM. Deploy with the value of
ram.minand watch the log for out-of-memory kills.
2
Check that the template is eligible
The review looks for these, so look first:
- No miners, hidden telemetry, calls to unrelated servers or secrets in the code.
- A license that allows public distribution, linked in
links.license. - Open code: the template must be fully visible, with no
env_hidden. - A fixed software version, with its image pinned (see the manifest step).
- A README another person can follow without asking you anything.
secret type for keys); a literal secret in the manifest is refused with secret_in_manifest.3
Assemble the folder
Fork the catalog repository, clone your fork and create a folder named after the template A code template brings its code (
id, as the existing templates do:src/); an image template brings its Dockerfile and everything the build needs, with no src/. The docs/ folder holds longer pages that feed the template page on the documentation site; the dashboard shows only the README.4
Adapt the manifest to the catalog rules
Copy the manifest from your private template and change what differs:
For the bot, the catalog manifest looks like this:
vertracloud.template.yaml (catalog)
For an image template, the catalog manifest has
source: { type: image, image: "docker.io/vendor/app@sha256:<64 hex digits>", context: . }. The image is pinned by digest so every deploy runs the same bytes, and the Dockerfile in the folder is built by the catalog pipeline into an image that belongs to the platform, not to you.5
Add the icon
icon.svg is a plain vector file, for example 128 by 128. The catalog refuses an SVG that contains scripts, foreignObject, event attributes such as onload= or references to external resources:icon.svg
6
Write the README
The README is the page of the template. Existing catalog templates write it in three sections (Portuguese, English and Spanish) with the same structure. Cover what the template gives the user and what to know:Say the true things: memory the template needs, what is created, what the user must do after the deploy, what the template does not do and the license of the packaged software.
README.md
7
Validate before you push
source.path, no closed code), so read the table in the manifest step once more before the push. See Validate and test for how to read each finding.8
Open the pull request
Commit the folder on a branch of your fork and open a pull request to the catalog repository. On every pull request the pipeline:
- Validates the manifest against the schema and the rules (placeholders,
when, permissions, plan slugs). - Builds the image, when the template has a
Dockerfile, or resolves the pinned image. - Checks the image for file capabilities: a binary with one cannot run with the platform’s restrictions.
- Checks the declared license.
9
Go through the review
A person at Vertra runs the template on the platform with the minimum memory you declared and reviews security (no miners, no hidden telemetry, no secrets in the code), the license and the quality of the README. Expect comments and answer them in the pull request. When it is approved and merged, the pipeline packages the folder at that commit as a version of the template and publishes it with the Community badge and your name. Later versions are new pull requests, reviewed the same way. A community template that stops being maintained can be marked deprecated: it leaves the gallery, apps already created keep running and get a notice.
The path to the public catalog is the pull request, by hand: there is no button in the dashboard. A closed template never goes to the catalog.
Troubleshooting
Next steps
- Contribute to the public catalog: the checklist and the review criteria in one page.
- Validate and test: testing as private and reading validation findings.
- Manifest reference: the fields the catalog requires.
- Manifest schema: the JSON Schema that editors and the CI use.
- Error reference: validation and deploy error codes.
- Private templates: versions, workspaces and the limit of 5.