docs: Scaffolded repo structure with templates/, scripts/, .github/work…

- schema.json
- README.md
- .gitignore
- templates/.gitkeep

GSD-Task: S01/T01
This commit is contained in:
John Doe
2026-04-29 14:27:18 -04:00
parent ab7ffba069
commit b84bf3774b
4 changed files with 155 additions and 0 deletions
+3
View File
@@ -1,5 +1,8 @@
.kilocode
# Build artifact — generated by CI, not committed to main
registry.json
# ── GSD baseline (auto-generated) ──
.gsd
.gsd-id
+23
View File
@@ -0,0 +1,23 @@
# Arcane Template Registry
A curated registry of Docker Compose templates for Arcane. Template folders serve as the single source of truth — CI validates their structure, assembles `registry.json` from on-disk state, and publishes it to GitHub Pages. No manual registry edits, no stale entries, no sync drift between folders and the index.
> **Status:** Early development. Structure and CI are being established.
## Badges
<!-- TODO: Add CI status badge once GitHub Actions are configured -->
## Quick Start
See [CONTRIBUTING.md](CONTRIBUTING.md) for how to add, modify, or remove templates.
## How It Works
1. Each template lives in its own directory under `templates/` with an `arcane.json` metadata file and a `docker-compose.yml`.
2. A CI workflow (`build-registry.yml`) runs the `scripts/build-registry.js` script, which reads each template folder, validates it against `schema.json`, and produces `registry.json`.
3. The generated `registry.json` is deployed to GitHub Pages for consumption by Arcane clients.
## License
MIT
+129
View File
@@ -0,0 +1,129 @@
{
"$schema": "https://json-schema.org/draft-07/schema",
"$id": "https://github.com/getarcaneapp/templates/schema.json",
"title": "Arcane Templates Registry Schema",
"description": "Schema for Docker Compose template registry configuration",
"type": "object",
"properties": {
"$schema": {
"type": "string",
"description": "Optional JSON Schema meta reference in the registry file."
},
"name": {
"description": "The name of the template registry.",
"type": "string",
"minLength": 1
},
"description": {
"description": "A brief description of the template registry and its purpose.",
"type": "string",
"minLength": 1
},
"version": {
"description": "The version of the registry using semantic versioning.",
"$ref": "#/definitions/semver"
},
"author": {
"description": "The author or organization maintaining the registry.",
"type": "string",
"minLength": 1
},
"url": {
"description": "The URL to the registry repository or homepage.",
"$ref": "#/definitions/url"
},
"templates": {
"description": "An array of Docker Compose templates available in the registry.",
"type": "array",
"items": { "$ref": "#/definitions/template" },
"minItems": 1
}
},
"required": ["name", "description", "version", "author", "url", "templates"],
"additionalProperties": false,
"definitions": {
"semver": {
"type": "string",
"description": "Semantic Versioning 2.0.0",
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
},
"slug": {
"type": "string",
"description": "Lowercase slug with hyphens only.",
"pattern": "^[a-z0-9-]+$",
"minLength": 1
},
"tag": {
"type": "string",
"description": "Tag with letters, numbers, and hyphens.",
"pattern": "^[a-zA-Z0-9-]+$",
"minLength": 1
},
"url": { "type": "string", "format": "uri" },
"template": {
"type": "object",
"properties": {
"id": {
"description": "A unique identifier for the template. Must be lowercase with hyphens only.",
"$ref": "#/definitions/slug"
},
"name": {
"description": "The human-readable name of the template.",
"type": "string",
"minLength": 1
},
"description": {
"description": "A detailed description of what the template provides and its use case.",
"type": "string",
"minLength": 1
},
"version": {
"description": "The version of the template using semantic versioning.",
"$ref": "#/definitions/semver"
},
"author": {
"description": "The author or organization that created the template.",
"type": "string",
"minLength": 1
},
"compose_url": {
"description": "The direct URL to the docker-compose.yml file for this template.",
"$ref": "#/definitions/url"
},
"env_url": {
"description": "The direct URL to the environment variables example file (.env.example).",
"$ref": "#/definitions/url"
},
"documentation_url": {
"description": "The URL to the template's documentation or README.",
"$ref": "#/definitions/url"
},
"content_hash": {
"description": "SHA-256 fingerprint of the template source files used to detect updates.",
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"tags": {
"description": "An array of tags for categorizing and searching templates.",
"type": "array",
"items": { "$ref": "#/definitions/tag" },
"minItems": 1,
"uniqueItems": true
}
},
"required": [
"id",
"name",
"description",
"version",
"author",
"compose_url",
"env_url",
"documentation_url",
"content_hash",
"tags"
],
"additionalProperties": false
}
}
}
View File