|
| 1 | +--- |
| 2 | +name: rhdh-templates |
| 3 | +description: >- |
| 4 | + Author and validate RHDH Software Templates (Scaffolder) with AI-guided workflows. Use when |
| 5 | + asked to "create software template", "templatize a codebase", "convert repo to |
| 6 | + template", "write template.yaml", "location.yaml for templates", "scaffolder |
| 7 | + template", "golden path template", "parameterize skeleton files", "fix template |
| 8 | + gotchas", "validate template", "dry-run template", "list scaffolder actions", |
| 9 | + "explain scaffolder action", "Nunjucks in template", "template best practices", |
| 10 | + "reference templates", "example templates", "what templates do customers use", |
| 11 | + "Template Editor", or mentions RHDH template |
| 12 | + authoring, Software Catalog templates, or /rhdh-templates commands. Covers setup, |
| 13 | + templatize (highest value), from-scratch create, reference example discovery, |
| 14 | + incremental parameter/step/skeleton authoring, location.yaml generation, common |
| 15 | + convention fixes, local validation, and live Scaffolder API dry-run/action discovery. |
| 16 | +--- |
| 17 | + |
| 18 | +<essential_principles> |
| 19 | + |
| 20 | +## Domain |
| 21 | + |
| 22 | +Software Templates are `kind: Template` entities processed by the Scaffolder. Each template has: |
| 23 | + |
| 24 | +- `template.yaml` — metadata, `spec.parameters` (form), `spec.steps` (actions), `spec.output` |
| 25 | +- `skeleton/` — files copied/templated into the target repo (Nunjucks `{% raw %}` blocks where needed) |
| 26 | +- `location.yaml` (repo root) — `kind: Location` registering all `template.yaml` files for catalog import |
| 27 | + |
| 28 | +Read `references/conventions.md` before editing any template artifact — it encodes RHDH-specific rules that differ from generic Backstage docs. |
| 29 | + |
| 30 | +Read `references/best-practices.md` when authoring or reviewing templates — it encodes Red Hat's 10 tips for repository layout, Template Editor workflow, custom fields, Nunjucks, secrets, type/tags, TechDocs, and maintenance. |
| 31 | + |
| 32 | +## Authoring stance |
| 33 | + |
| 34 | +- **Interactive, not fully automatic.** Templatize proposes parameterization; the user confirms each literal-to-parameter mapping. |
| 35 | +- **Conservative parameterization.** Under-parameterize rather than expose every string — users can add parameters incrementally. |
| 36 | +- **First-try correctness.** Generated artifacts should pass local `validate` with zero critical findings before merge. |
| 37 | + |
| 38 | +## Script paths |
| 39 | + |
| 40 | +All `scripts/` and `references/` paths are relative to this SKILL.md directory. Resolve them before invoking. |
| 41 | + |
| 42 | +</essential_principles> |
| 43 | + |
| 44 | +<setup> |
| 45 | + |
| 46 | +## Setup gates (non-optional before file edits) |
| 47 | + |
| 48 | +| Gate | Required check | If fail | |
| 49 | +|------|----------------|---------| |
| 50 | +| Command | Sub-command reference loaded | Load the matching `references/<command>.md` (or `example-catalog.md` for `examples`) | |
| 51 | +| Layout | Template project initialized or path confirmed | Run `init` or ask user for template repo root | |
| 52 | +| Conventions | `references/conventions.md` read for authoring commands | Read it first | |
| 53 | + |
| 54 | +</setup> |
| 55 | + |
| 56 | +<intake> |
| 57 | + |
| 58 | +## What would you like to do? |
| 59 | + |
| 60 | +| # | Command | |
| 61 | +|---|---------| |
| 62 | +| 1 | `init` | |
| 63 | +| 2 | `templatize` | |
| 64 | +| 3 | `create` | |
| 65 | +| 4 | `add-parameter` | |
| 66 | +| 5 | `add-step` | |
| 67 | +| 6 | `add-skeleton` | |
| 68 | +| 7 | `create-location` | |
| 69 | +| 8 | `fix-gotchas` | |
| 70 | +| 9 | `validate` | |
| 71 | +| 10 | `list-actions` | |
| 72 | +| 11 | `dry-run` | |
| 73 | +| 12 | `explain-action` | |
| 74 | +| 13 | `examples` | |
| 75 | + |
| 76 | +Command descriptions and argument hints: `scripts/command-metadata.json` |
| 77 | + |
| 78 | +**Wait for response before proceeding.** |
| 79 | + |
| 80 | +</intake> |
| 81 | + |
| 82 | +<routing> |
| 83 | + |
| 84 | +| Response | Reference | |
| 85 | +|----------|-----------| |
| 86 | +| 1, "init", "setup", "scaffold", "prerequisites" | [references/init.md](references/init.md) | |
| 87 | +| 2, "templatize", "convert", "parameterize repo", "existing codebase" | [references/templatize.md](references/templatize.md) | |
| 88 | +| 3, "create", "from scratch", "new template" | [references/create.md](references/create.md) | |
| 89 | +| 4, "add-parameter", "add parameter", "form field" | [references/add-parameter.md](references/add-parameter.md) | |
| 90 | +| 5, "add-step", "add step", "scaffolder action", "pipeline step" | [references/add-step.md](references/add-step.md) | |
| 91 | +| 6, "add-skeleton", "skeleton file", "nunjucks" | [references/add-skeleton.md](references/add-skeleton.md) | |
| 92 | +| 7, "create-location", "location.yaml", "register templates" | [references/create-location.md](references/create-location.md) | |
| 93 | +| 8, "fix-gotchas", "fix template", "gotchas", "raw endraw" | [references/fix-gotchas.md](references/fix-gotchas.md) | |
| 94 | +| 9, "validate", "lint template", "check template", "lint-nunjucks", "lint nunjucks", "djlint", "nunjucks lint" | [references/validate.md](references/validate.md) | |
| 95 | +| 10, "list-actions", "list actions", "scaffolder actions" | [references/list-actions.md](references/list-actions.md) | |
| 96 | +| 11, "dry-run", "dry run", "test template remotely" | [references/dry-run.md](references/dry-run.md) | |
| 97 | +| 12, "explain-action", "action schema", "parameter schema" | [references/explain-action.md](references/explain-action.md) | |
| 98 | +| 13, "examples", "reference templates", "show me templates", "what templates exist" | [references/example-catalog.md](references/example-catalog.md) | |
| 99 | +| First word doesn't match | Infer from context. "Turn my Spring Boot app into a template" → `templatize`. "Add owner picker to my template" → `add-parameter`. "Does my template validate?" → `validate`. "What templates do customers use?" → `examples`. | |
| 100 | + |
| 101 | +</routing> |
| 102 | + |
| 103 | +<cli_commands> |
| 104 | + |
| 105 | +## Bundled scripts |
| 106 | + |
| 107 | +```bash |
| 108 | +# Resolve skill directory (adjust if SKILL.md path differs) |
| 109 | +SKILL_DIR="<path-to>/skills/rhdh-templates" |
| 110 | + |
| 111 | +python "$SKILL_DIR/scripts/init.py" --help |
| 112 | +python "$SKILL_DIR/scripts/analyze.py" --help |
| 113 | +python "$SKILL_DIR/scripts/create_location.py" --help |
| 114 | +python "$SKILL_DIR/scripts/fix_gotchas.py" --help |
| 115 | +python "$SKILL_DIR/scripts/validate.py" --help |
| 116 | +python "$SKILL_DIR/scripts/list_actions.py" --help |
| 117 | +python "$SKILL_DIR/scripts/dry_run.py" --help |
| 118 | +python "$SKILL_DIR/scripts/explain_action.py" --help |
| 119 | +python "$SKILL_DIR/scripts/list_examples.py" --help |
| 120 | +``` |
| 121 | + |
| 122 | +Run `init.py` for deterministic tooling checks and project scaffolding. Use `analyze.py` during `templatize` Phase 1. Use `list_examples.py` during `create`, `templatize`, or `examples` to rank upstream reference templates. Use `create_location.py` and `fix_gotchas.py` where the reference files direct you — they produce structured JSON when piped. |
| 123 | + |
| 124 | +Validation scripts: `validate.py` for local checks (include `--lint-skeleton` for Nunjucks/djLint); `list_actions.py`, `dry_run.py`, and `explain_action.py` require a reachable RHDH `--rhdh-url` and optional bearer token (`RHDH_TOKEN` env or `--token`). |
| 125 | + |
| 126 | +</cli_commands> |
| 127 | + |
| 128 | +<reference_index> |
| 129 | + |
| 130 | +| File | Load when... | |
| 131 | +|------|-------------| |
| 132 | +| `references/conventions.md` | Any authoring command — RHDH template rules | |
| 133 | +| `references/best-practices.md` | Authoring/review — Red Hat 10 tips and pre-merge checklist | |
| 134 | +| `references/template-structure.md` | Writing or reviewing `template.yaml` anatomy | |
| 135 | +| `references/parameter-widgets.md` | Choosing form fields and UI widgets for parameters | |
| 136 | +| `references/example-catalog.md` | Command `examples` or picking upstream study references (`assets/example-catalog.json` is the data source; bundled templates under `assets/examples/`) | |
| 137 | +| `references/schemas/template-v1beta3.schema.json` | Bundled JSON Schema for deep `validate` checks | |
| 138 | + |
| 139 | +</reference_index> |
0 commit comments