mirror of
https://github.com/Heretek-AI/arcane-repo.git
synced 2026-07-01 18:25:50 -04:00
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:
@@ -1,5 +1,8 @@
|
||||
.kilocode
|
||||
|
||||
# Build artifact — generated by CI, not committed to main
|
||||
registry.json
|
||||
|
||||
# ── GSD baseline (auto-generated) ──
|
||||
.gsd
|
||||
.gsd-id
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user