From a523959cf8237498af176876673e327a424c9aee Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Sun, 17 May 2026 10:03:57 +0200 Subject: [PATCH] chore: decommission self-published marketplace; agent-plugins is the only one terraform-skill is distributed solely through the antonbabenko/agent-plugins marketplace (it is an external plugin there, now pinned v1.9.0). Stop self-publishing a duplicate-named marketplace. - Delete .claude-plugin/marketplace.json (the only self-publish manifest). - automated-release.yml: conventional-changelog-action now uses skip-version-file (version derives from conventional commits / git tags); dropped the marketplace.json version-file + the inline marketplace.json sync block. SKILL.md frontmatter metadata.version is the single human-readable version mirror; git add no longer references the deleted file. - validate.yml: removed the "Validate marketplace.json" step (frontmatter, size, broken-link, markdown-lint steps unchanged). - CLAUDE.md / CONTRIBUTING.md: version-sync docs now describe SKILL.md frontmatter as the single source; removed marketplace.json references. README install paths (agent-plugins marketplace, skills.sh, git clone, gemini extensions) and the do-not-add-antonbabenko/terraform-skill note are unchanged. Release pipeline verified to run with no marketplace.json (simulated VERSION sync -> SKILL.md only). --- .claude-plugin/marketplace.json | 34 ------------------ .github/workflows/automated-release.yml | 36 ++----------------- .github/workflows/validate.yml | 48 ------------------------- CLAUDE.md | 8 ++--- CONTRIBUTING.md | 3 +- 5 files changed, 7 insertions(+), 122 deletions(-) delete mode 100644 .claude-plugin/marketplace.json diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json deleted file mode 100644 index 5f87dfc..0000000 --- a/.claude-plugin/marketplace.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "antonbabenko", - "owner": { - "name": "Anton Babenko" - }, - "version": "1.9.0", - "metadata": { - "description": "Use when writing, reviewing, or debugging Terraform/OpenTofu modules, tests, CI, scans, or state ops - diagnoses failure mode (identity churn, secrets, blast radius, CI drift, state corruption) with version-aware guards.", - "repository": "https://github.com/antonbabenko/terraform-skill", - "license": "Apache-2.0" - }, - "plugins": [ - { - "name": "terraform-skill", - "description": "Use when writing, reviewing, or debugging Terraform/OpenTofu modules, tests, CI, scans, or state ops - diagnoses failure mode (identity churn, secrets, blast radius, CI drift, state corruption) with version-aware guards.", - "source": "./", - "category": "development", - "keywords": [ - "terraform", - "opentofu", - "iac", - "infrastructure-as-code", - "state-management", - "testing", - "ci-cd", - "security-scanning", - "modules", - "lsp", - "terraform-ls" - ], - "version": "1.9.0" - } - ] -} diff --git a/.github/workflows/automated-release.yml b/.github/workflows/automated-release.yml index e230723..d03db4a 100644 --- a/.github/workflows/automated-release.yml +++ b/.github/workflows/automated-release.yml @@ -42,10 +42,8 @@ jobs: preset: 'angular' tag-prefix: 'v' output-file: 'CHANGELOG.md' - version-file: './.claude-plugin/marketplace.json' - version-path: 'version' skip-on-empty: 'false' - skip-version-file: 'false' + skip-version-file: 'true' skip-commit: 'false' # 2b. Sync plugin version, SKILL.md version, and git ref @@ -93,38 +91,10 @@ jobs: try: version = os.environ['VERSION'] - # 1. Update marketplace.json - with open('.claude-plugin/marketplace.json', 'r') as f: - data = json.load(f) - - # Validate structure - if 'plugins' not in data or len(data['plugins']) == 0: - raise ValueError("No plugins found in marketplace.json") - - # Sync marketplace.json versions - data['plugins'][0]['version'] = version - - # Validate marketplace.json synced state - if data['version'] != version: - raise ValueError(f"Marketplace version {data['version']} != {version}") - - with open('.claude-plugin/marketplace.json', 'w') as f: - json.dump(data, f, indent=2) - f.write('\n') - - print(f"āœ… Synced marketplace.json plugin version to {version}") - - # 2. Update SKILL.md + # SKILL.md frontmatter is the single version source. skill_path = update_skill_version(version) print(f"āœ… Synced {skill_path} metadata.version to {version}") - # 3. Final validation - all three versions match - print(f"\nšŸ“‹ Version Sync Summary:") - print(f" - marketplace.json root: {data['version']}") - print(f" - marketplace.json plugins[0]: {data['plugins'][0]['version']}") - print(f" - SKILL.md metadata: {version}") - print(f" āœ… All versions synchronized to {version}") - except Exception as e: print(f"āŒ ERROR: Failed to sync versions: {e}") sys.exit(1) @@ -133,7 +103,7 @@ jobs: # Commit the sync git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - git add .claude-plugin/marketplace.json skills/terraform-skill/SKILL.md + git add skills/terraform-skill/SKILL.md git commit --amend --no-edit git push --force-with-lease diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 302a75d..ac6eec3 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -100,54 +100,6 @@ jobs: echo "āœ… Size OK" fi - - name: Validate marketplace.json - run: | - python3 << 'EOF' - import json - import sys - import re - - print("šŸ” Validating marketplace.json...") - - with open('.claude-plugin/marketplace.json', 'r') as f: - marketplace = json.load(f) - - # Validate marketplace-level fields - required_marketplace = ['name', 'owner', 'version', 'plugins'] - missing = [f for f in required_marketplace if f not in marketplace] - - if missing: - print(f"āŒ ERROR: Missing marketplace fields: {missing}") - sys.exit(1) - - # Validate owner structure - if 'name' not in marketplace['owner']: - print("āŒ ERROR: owner must have 'name'") - sys.exit(1) - - # Validate version format - version = marketplace['version'] - if not re.match(r'^\d+\.\d+\.\d+$', version): - print(f"āŒ ERROR: Invalid marketplace version: {version}") - sys.exit(1) - - # Validate plugins array - if not isinstance(marketplace['plugins'], list) or len(marketplace['plugins']) == 0: - print("āŒ ERROR: 'plugins' must be a non-empty array") - sys.exit(1) - - # Validate each plugin - for idx, plugin in enumerate(marketplace['plugins']): - required_plugin = ['name', 'description', 'source'] - missing = [f for f in required_plugin if f not in plugin] - - if missing: - print(f"āŒ ERROR: Plugin {idx} missing fields: {missing}") - sys.exit(1) - - print(f"āœ… marketplace.json valid (v{version}, {len(marketplace['plugins'])} plugin(s))") - EOF - - name: Check for Broken Links run: | echo "šŸ” Checking internal links..." diff --git a/CLAUDE.md b/CLAUDE.md index 4b3f1e5..fe39f6a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,7 +14,6 @@ A **Claude Code skill** - executable documentation that Claude loads to provide ``` terraform-skill/ -ā”œā”€ā”€ .claude-plugin/marketplace.json # Plugin metadata (version synced automatically) ā”œā”€ā”€ skills/ │ └── terraform-skill/ # Skill autodiscovered by Claude Code plugin system │ ā”œā”€ā”€ SKILL.md # Core skill file (~299 lines) @@ -88,10 +87,9 @@ Releases are **fully automated** from conventional commits on `master`: The release workflow automatically: - Bumps the version in `CHANGELOG.md` -- Syncs versions across **three places** (must stay in sync): - 1. `.claude-plugin/marketplace.json` → `version` (root) - 2. `.claude-plugin/marketplace.json` → `plugins[0].version` - 3. `skills/terraform-skill/SKILL.md` YAML frontmatter → `metadata.version` +- Syncs `skills/terraform-skill/SKILL.md` YAML frontmatter + `metadata.version` (the single version source; the canonical version is the + git tag managed by the release pipeline) **Never manually edit version numbers** - the CI handles this. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2385a35..09b797b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -326,7 +326,7 @@ git commit -m "docs: improve testing strategy documentation" git commit -m "chore: update workflow dependencies" ``` -Commit type determines the version bump, the changelog group, and whether a release is cut on merge to master. The release workflow updates the version in marketplace.json (marketplace root and plugin entry) and in SKILL.md frontmatter. +Commit type determines the version bump, the changelog group, and whether a release is cut on merge to master. The release workflow updates the version in SKILL.md frontmatter (the single version source) and tags the release. ## Submitting Changes @@ -379,7 +379,6 @@ Releases are automated from conventional commits: 2. Workflow analyzes commits since the last release 3. Workflow calculates the version bump (major/minor/patch) 4. Workflow updates: - - `.claude-plugin/marketplace.json` (marketplace version, plugin version, git ref) - `skills/terraform-skill/SKILL.md` frontmatter (`metadata.version`) - `CHANGELOG.md` (generated from commits) 5. Workflow creates the git tag and GitHub Release