Skip to main content

config-sync

Config sync across FVH repos: extract, diff, propagate tooling improvements. Use when syncing workflows or configs across multiple repos.

来源信息

仓库
laurigates/claude-plugins
最近来源活动
2026年10月5日 05:04
检测到的 SKILL.md 语言
英语
星标
60
分支
6

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
4 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
config-sync
description
Config sync across FVH repos: extract, diff, propagate tooling improvements. Use when syncing workflows or configs across multiple repos.
allowed-tools
Bash(git *), Bash(gh *), Bash(fd *), Bash(rg *), Bash(diff *), Bash(sha256sum *), Bash(shasum *), Read, Grep, Glob, Edit, Write, TodoWrite, AskUserQuestion
args
<mode> [options]
argument-hint
extract [repo]|diff <file-pattern>|apply <file-pattern> [--from repo] [--to repos|--all]
created
2026-02-21T00:00:00.000Z
modified
2026-10-05T00:00:00.000Z
reviewed
2026-09-02T00:00:00.000Z
# /configure:config-sync Extract, compare, and propagate tooling config improvements across FVH repos. ## When to Use This Skill | Use this skill when... | Use another approach when... | |------------------------|------------------------------| | Comparing a workflow/config across all FVH repos | Configuring a single repo's workflow from scratch — use `/configure:workflows` | | Propagating an improvement from one repo to many | Debugging a failing CI run — use `github-actions-inspection` | | Identifying which repos have outdated configs | Creating a reusable workflow — use `/configure:reusable-workflows` | | Extracting novel patterns from a repo to share | Checking a single repo's compliance — use `/configure:status` | ## Context - Workspace root: `/Users/lgates/repos/ForumViriumHelsinki` - Repos: !`fd -t d -d 1 . /Users/lgates/repos/ForumViriumHelsinki --exclude .git --exclude node_modules` - Current directory: !`pwd` ## Parameters Parse mode and options from command arguments: ### Modes 1. **`extract [repo-name]`** — Identify improvements in a source repo 2. **`diff <file-pattern>`** — Compare a specific config across all repos 3. **`apply <file-pattern> [--from repo] [--to repo1,repo2,...|--all]`** — Propagate config to targets ### Options - `--from <repo>` — Source repo for apply mode (default: best version detected) - `--to <repo1,repo2,...>` — Target repos (comma-separated) - `--all` — Target all repos that have the file - `--dry-run` — Show what would change without creating branches/PRs (default behavior) - `--confirm` — Actually create branches and PRs ## Config Categories Tracked files fall into five sync tiers: **Wholesale** (copy verbatim: `claude.yml`, `renovate.json`), **Parameterized** (shared core + variation points), **Structural** (`justfile` recipe names), **Pattern-based** (`Dockerfile*`, by stack), and **Reference** (compare and report). Full file patterns, variation points, and stack detection: [references/config-tiers.md](references/config-tiers.md) — read it when classifying a file in Extract Step 3 or Apply Step 3. ## Execution ### Extract Mode **Goal**: Scan a repo and identify improvements that could benefit other repos. #### Step 1: Identify the source repo If repo name provided, use `/Users/lgates/repos/ForumViriumHelsinki/<repo-name>`. Otherwise use the current working directory (must be inside an FVH repo). #### Step 2: Scan tooling files Scan for all tracked config categories: ```bash fd -t f -d 3 '(claude|renovate|auto-merge|release-please|container-build|Dockerfile|justfile|skaffold)' <repo-path> ``` Also check: - `.github/workflows/*.yml` - `justfile` - `Dockerfile*` - `renovate.json` - `release-please-config.json` - `.release-please-manifest.json` - `skaffold.yaml` #### Step 3: Compare against workspace patterns For each file found: 1. **Wholesale tier**: Hash the file content and compare against the most common version across all repos. Report if this repo has a newer/different version. 2. **Parameterized tier**: Extract the shared core (strip known variation points) and compare structure. 3. **Structural tier (justfile)**: Check for standard recipes (`default`, `help`, `dev`, `build`, `clean`, `lint`, `format`, `format-check`, `test`, `pre-commit`, `ci`). Report missing standard recipes and non-standard names (e.g., `check` instead of `lint`). 4. **Pattern-based tier**: Detect tech stack, then check for best practices: - Pinned base images (not `latest`) - `.dockerignore` present - Multi-stage builds - Non-root user - SHA-pinned GitHub Actions - SBOM/provenance attestation 5. **Reference tier**: Note divergences from the most common configuration. #### Step 4: Generate extract report Emit the report (wholesale/parameterized/structural/pattern-based sections, then "Potential Improvements to Propagate"). Template: [references/report-templates.md](references/report-templates.md#extract-report-extract-step-4). ### Diff Mode **Goal**: Compare a specific file across all FVH repos. #### Step 1: Resolve file pattern Interpret the file pattern argument: - Full path: `.github/workflows/claude.yml` - Short name: `claude.yml` → search in `.github/workflows/` - Glob: `*.yml` → match all workflows #### Step 2: Find the file across repos ```bash fd -t f '<pattern>' /Users/lgates/repos/ForumViriumHelsinki --max-depth 4 ``` #### Step 3: Group by content hash For each found file, compute a content hash: ```bash shasum -a 256 <file> ``` Group files by identical hash. Sort groups by size (largest first = most common version). #### Step 4: Identify the "best" version Heuristics for selecting the canonical version: 1. Most common hash (majority rules) 2. If tie: most recently modified 3. If tie: from `infrastructure` repo (reference repo) #### Step 5: Generate diff report Report each hash group (canonical first, with repo list and differences), repos missing the file, and a recommendation. For small files (< 100 lines), show an inline unified diff between the canonical and each outlier group. Template: [references/report-templates.md](references/report-templates.md#diff-report-diff-step-5). ### Apply Mode **Goal**: Propagate a config file from source to target repos. #### Step 1: Determine source - If `--from` specified, use that repo's version - Otherwise, run diff mode internally to find the canonical version #### Step 2: Determine targets - If `--to` specified, use those repos - If `--all`, use all repos that currently have the file (excluding source) - Otherwise, ask the user which repos to target #### Step 3: Determine sync strategy by tier **Wholesale**: Copy file verbatim to targets. **Parameterized**: Copy file but preserve known variation points: - `auto-merge-image-updater.yml`: preserve `BRANCH_PREFIX` value - `release-please.yml`: preserve extra publish/deploy jobs **Structural (justfile)**: Do NOT overwrite. Instead: - Add missing standard recipe stubs (commented templates) - Suggest renaming non-conforming recipes - Preserve all project-specific recipes and recipe bodies **Pattern-based**: Only apply general improvements matching the target's stack: - Pin unpinned base images - Add missing `.dockerignore` - Update SHA-pinned actions - Do NOT change build args, multi-arch config, or app-specific steps **Reference**: Show diff and ask user to confirm each change. #### Step 4: Preview changes (default / --dry-run) For each target repo, show the unified diff of what would change, plus a total. Template: [references/report-templates.md](references/report-templates.md#dry-run-preview-apply-step-4). #### Step 5: Execute changes (--confirm or user approval) For each target repo: 1. Create a branch: `config-sync/<filename-slug>` 2. Copy/update the file 3. Commit with conventional message: `chore: sync <filename> from <source-repo>` 4. Push and create PR via `gh pr create` Full command sequence and the quoted-heredoc PR-body rule (never backslash-escape inside `<<'EOF'`): [references/apply-execution.md](references/apply-execution.md). Report one line per repo with the PR link — template in [references/report-templates.md](references/report-templates.md#apply-results-apply-step-5). ## Agentic Optimizations | Context | Command | |---------|---------| | Quick workflow comparison | `/configure:config-sync diff claude.yml` | | Find improvements in a repo | `/configure:config-sync extract theme-management` | | Propagate renovate config | `/configure:config-sync apply renovate.json --from infrastructure --all` | | Preview changes only | `/configure:config-sync apply claude.yml --all` (dry-run is default) | | Create PRs | `/configure:config-sync apply claude.yml --all --confirm` | ## Safety - **Dry-run by default**: `apply` only shows diffs unless `--confirm` is passed or user explicitly approves - **Never overwrites justfile recipe bodies**: Only adds stubs and suggests renames - **Stack-aware Dockerfile sync**: Only applies improvements matching the target's tech stack - **Preserves parameterized variation points**: Known customizations are not overwritten ## See Also - `/configure:workflows` — Single-repo workflow compliance - `/configure:reusable-workflows` — Install reusable workflow patterns - `/configure:justfile` — Single-repo justfile compliance - `/configure:dockerfile` — Single-repo Dockerfile compliance - `/configure:all` — Run all compliance checks on current repo
在 GitHub 查看