Skip to content

Commit 10d5256

Browse files
committed
Add rhdh-templates skill
Software Templates authoring and validation for RHDH Scaffolder workflows, with scripts, examples, and tests.
1 parent d8f5208 commit 10d5256

60 files changed

Lines changed: 6884 additions & 4 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ If told an implementation was wrong, apply the correction and then record what w
6868

6969
User-facing skills live under `skills/`:
7070

71+
- `rhdh-templates` — Software Templates authoring and validation
7172
- `skill-maker` — Create, audit, and consolidate Agent Skills
7273

7374
When adding a skill, update [README.md](./README.md) and keep `SKILL.md` `name` aligned with the directory name per the Agent Skills spec.

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ This project is released under the Apache-2.0 License.
88

99
This pack is for skills that help people **use and extend RHDH**. Skills aimed at Red Hat internal engineering (Jira automation, release trains, internal CI) belong in [`redhat-developer/rhdh-skill`](https://github.com/redhat-developer/rhdh-skill), not here.
1010

11-
The pack currently ships `skill-maker` for authoring new skills. Additional user-facing skills are welcome as focused contributions.
11+
The pack currently ships `rhdh-templates` for Software Template authoring and `skill-maker` for authoring new skills. Additional user-facing skills are welcome as focused contributions.
1212

1313
## Get started
1414

README.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,19 @@ Agent Skills for adopting and using [Red Hat Developer Hub](https://developers.r
1111

1212
| Skill | Use when you want to… |
1313
| ----- | --------------------- |
14+
| [rhdh-templates](./skills/rhdh-templates/SKILL.md) | Author, validate, and test RHDH Software Templates (Scaffolder) |
1415
| [skill-maker](./skills/skill-maker/SKILL.md) | Create, audit, and consolidate Agent Skills following the open standard |
1516

17+
### Software Templates (`rhdh-templates`)
18+
19+
Interactive authoring for RHDH Scaffolder templates — templatize an existing repo, create from scratch, fix common gotchas, and validate locally or against a running instance.
20+
21+
Example prompts:
22+
23+
- "Help me turn this Node.js repo into an RHDH Software Template"
24+
- "Validate my `template.yaml` and fix Scaffolder gotchas"
25+
- "List scaffolder actions available on my RHDH instance"
26+
1627
### Agent Skills authoring (`skill-maker`)
1728

1829
Create, audit, or consolidate [Agent Skills](https://agentskills.io/specification) — useful when packaging your own RHDH workflows or contributing skills to this pack.
@@ -29,9 +40,10 @@ Example prompts:
2940
npx skills add redhat-developer/rhdh-users-skill-pack
3041
```
3142

32-
Or install only this skill:
43+
Or install only one skill:
3344

3445
```bash
46+
npx skills add redhat-developer/rhdh-users-skill-pack --skill rhdh-templates
3547
npx skills add redhat-developer/rhdh-users-skill-pack --skill skill-maker
3648
```
3749

@@ -61,7 +73,7 @@ npx skills add ./rhdh-users-skill-pack
6173

6274
1. **Install** the pack (see above).
6375
2. **Open your project** in an agent-enabled editor or CLI.
64-
3. **Describe your goal in plain language** — for example, "help me write a skill for our RHDH golden paths."
76+
3. **Describe your goal in plain language** — for example, "help me turn this repo into an RHDH Software Template" or "help me write a skill for our RHDH golden paths."
6577

6678
You can also name the skill explicitly:
6779

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ requires-python = ">=3.10"
1212
dev = [
1313
"pytest>=9.0.3",
1414
"pyyaml>=6.0", # SKILL.md structure tests
15+
"jsonschema>=4.0",
1516
"ruff>=0.4.0",
1617
]
1718

skills/rhdh-templates/SKILL.md

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
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

Comments
 (0)