[PR #978] [MERGED] feat: per-template metadata (blueprints/<id>/meta.json) — no more meta.json merge conflicts #15304

Closed
opened 2026-07-13 17:00:24 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Dokploy/templates/pull/978
Author: @Siumauricio
Created: 7/8/2026
Status: Merged
Merged: 7/8/2026
Merged by: @Siumauricio

Base: canaryHead: feat/per-template-meta


📝 Commits (1)

  • c3de62f feat: per-template metadata — eliminate meta.json merge conflicts

📊 Changes

455 files changed (+7982 additions, -8469 deletions)

View changed files

📝 .github/workflows/validate-meta.yml (+21 -60)
📝 .github/workflows/validate.yml (+6 -129)
📝 AGENTS.md (+19 -42)
📝 CONTRIBUTING.md (+6 -6)
📝 README.md (+1 -1)
📝 app/package.json (+4 -3)
app/public/.gitignore (+1 -0)
📝 app/vite.config.ts (+2 -4)
blueprints/ackee/meta.json (+16 -0)
blueprints/activepieces/meta.json (+17 -0)
blueprints/actualbudget/meta.json (+17 -0)
blueprints/adguardhome/meta.json (+18 -0)
blueprints/adminer/meta.json (+18 -0)
blueprints/adventurelog/meta.json (+19 -0)
blueprints/affinepro/meta.json (+18 -0)
blueprints/agent-zero/meta.json (+17 -0)
blueprints/agentdvr/meta.json (+20 -0)
blueprints/akaunting/meta.json (+19 -0)
blueprints/alarik/meta.json (+17 -0)
blueprints/alist/meta.json (+17 -0)

...and 80 more files

📄 Description

Why

Almost every PR in this repo adds an entry to the single root meta.json, so any two template PRs conflict with each other and every merge to canary invalidates all open PRs (see e.g. #812, and the 11 PRs whose conflicts had to be resolved by hand this week).

What

  • Each template now owns its metadata: blueprints/<id>/meta.json (one JSON object, same shape as the old array entries). 442 files migrated with build-scripts/explode-meta.js — the regenerated aggregate is byte-identical to the old root meta.json (after alphabetical sort).
  • The served meta.json is generated at build time by build-scripts/generate-meta.js into app/public/meta.json (gitignored). pnpm dev and pnpm build run it automatically, so the app keeps fetching /meta.json with zero frontend changes and the deployed artifact is unchanged.
  • CI: validate-meta.yml and validate.yml now run generate-meta.js --check, which validates required fields, id == folder name, logo file existence and folder↔meta bidirectionality (same rules as before, but errors point at the exact template). A committed root meta.json is rejected with a helpful message.
  • Removed: root meta.json, dedupe-and-sort-meta.js, build-scripts/process-meta.js (all obsolete — duplicates are impossible by construction and sorting happens at generation).
  • Docs: CONTRIBUTING.md, AGENTS.md and README.md updated to the new flow.

Verification

  • Roundtrip: explodegenerate produces a byte-identical meta.json (442/442 entries).
  • Full local build: pnpm install && pnpm build in app/dist/meta.json + 442 blueprints copied.
  • generate-meta.js --check passes on the migrated tree with 0 errors/warnings.

Open PRs transition

Existing open PRs still edit the root meta.json; after this merges, their meta diff must move to blueprints/<id>/meta.json. I have maintainer tooling ready to do that automatically for every open PR that allows maintainer edits (same mechanism used for this week's conflict fixes); the few that don't allow edits will get a comment with instructions.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Dokploy/templates/pull/978 **Author:** [@Siumauricio](https://github.com/Siumauricio) **Created:** 7/8/2026 **Status:** ✅ Merged **Merged:** 7/8/2026 **Merged by:** [@Siumauricio](https://github.com/Siumauricio) **Base:** `canary` ← **Head:** `feat/per-template-meta` --- ### 📝 Commits (1) - [`c3de62f`](https://github.com/Dokploy/templates/commit/c3de62fb834ed91d56f437651f4d935ab1a6742d) feat: per-template metadata — eliminate meta.json merge conflicts ### 📊 Changes **455 files changed** (+7982 additions, -8469 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/validate-meta.yml` (+21 -60) 📝 `.github/workflows/validate.yml` (+6 -129) 📝 `AGENTS.md` (+19 -42) 📝 `CONTRIBUTING.md` (+6 -6) 📝 `README.md` (+1 -1) 📝 `app/package.json` (+4 -3) ➕ `app/public/.gitignore` (+1 -0) 📝 `app/vite.config.ts` (+2 -4) ➕ `blueprints/ackee/meta.json` (+16 -0) ➕ `blueprints/activepieces/meta.json` (+17 -0) ➕ `blueprints/actualbudget/meta.json` (+17 -0) ➕ `blueprints/adguardhome/meta.json` (+18 -0) ➕ `blueprints/adminer/meta.json` (+18 -0) ➕ `blueprints/adventurelog/meta.json` (+19 -0) ➕ `blueprints/affinepro/meta.json` (+18 -0) ➕ `blueprints/agent-zero/meta.json` (+17 -0) ➕ `blueprints/agentdvr/meta.json` (+20 -0) ➕ `blueprints/akaunting/meta.json` (+19 -0) ➕ `blueprints/alarik/meta.json` (+17 -0) ➕ `blueprints/alist/meta.json` (+17 -0) _...and 80 more files_ </details> ### 📄 Description ## Why Almost every PR in this repo adds an entry to the single root `meta.json`, so any two template PRs conflict with each other and every merge to `canary` invalidates all open PRs (see e.g. #812, and the 11 PRs whose conflicts had to be resolved by hand this week). ## What - **Each template now owns its metadata**: `blueprints/<id>/meta.json` (one JSON object, same shape as the old array entries). 442 files migrated with `build-scripts/explode-meta.js` — the regenerated aggregate is **byte-identical** to the old root `meta.json` (after alphabetical sort). - **The served `meta.json` is generated at build time** by `build-scripts/generate-meta.js` into `app/public/meta.json` (gitignored). `pnpm dev` and `pnpm build` run it automatically, so the app keeps fetching `/meta.json` with zero frontend changes and the deployed artifact is unchanged. - **CI**: `validate-meta.yml` and `validate.yml` now run `generate-meta.js --check`, which validates required fields, `id` == folder name, logo file existence and folder↔meta bidirectionality (same rules as before, but errors point at the exact template). A committed root `meta.json` is rejected with a helpful message. - **Removed**: root `meta.json`, `dedupe-and-sort-meta.js`, `build-scripts/process-meta.js` (all obsolete — duplicates are impossible by construction and sorting happens at generation). - **Docs**: CONTRIBUTING.md, AGENTS.md and README.md updated to the new flow. ## Verification - Roundtrip: `explode` → `generate` produces a byte-identical `meta.json` (442/442 entries). - Full local build: `pnpm install && pnpm build` in `app/` → `dist/meta.json` + 442 blueprints copied. ✅ - `generate-meta.js --check` passes on the migrated tree with 0 errors/warnings. ## Open PRs transition Existing open PRs still edit the root `meta.json`; after this merges, their meta diff must move to `blueprints/<id>/meta.json`. I have maintainer tooling ready to do that automatically for every open PR that allows maintainer edits (same mechanism used for this week's conflict fixes); the few that don't allow edits will get a comment with instructions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-07-13 17:00:24 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/templates#15304