{"id":48826495,"url":"https://github.com/mcp-tool-shop-org/registry-sync","last_synced_at":"2026-04-14T18:30:49.386Z","repository":{"id":341521727,"uuid":"1170454068","full_name":"mcp-tool-shop-org/registry-sync","owner":"mcp-tool-shop-org","description":"Desired-state sync engine for multi-registry package publishing","archived":false,"fork":false,"pushed_at":"2026-03-20T03:31:07.000Z","size":196,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-20T19:14:36.323Z","etag":null,"topics":["audit","cli","drift","ghcr","mcp","npm","registry","sync","typescript"],"latest_commit_sha":null,"homepage":"https://mcp-tool-shop-org.github.io/registry-sync/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mcp-tool-shop-org.png","metadata":{"files":{"readme":"README.es.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["mcp-tool-shop"]}},"created_at":"2026-03-02T06:17:55.000Z","updated_at":"2026-03-20T03:31:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mcp-tool-shop-org/registry-sync","commit_stats":null,"previous_names":["mcp-tool-shop-org/registry-sync"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mcp-tool-shop-org/registry-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Fregistry-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Fregistry-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Fregistry-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Fregistry-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcp-tool-shop-org","download_url":"https://codeload.github.com/mcp-tool-shop-org/registry-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcp-tool-shop-org%2Fregistry-sync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31810736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audit","cli","drift","ghcr","mcp","npm","registry","sync","typescript"],"created_at":"2026-04-14T18:30:45.487Z","updated_at":"2026-04-14T18:30:49.380Z","avatar_url":"https://github.com/mcp-tool-shop-org.png","language":"TypeScript","funding_links":["https://github.com/sponsors/mcp-tool-shop"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.ja.md\"\u003e日本語\u003c/a\u003e | \u003ca href=\"README.zh.md\"\u003e中文\u003c/a\u003e | \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e | \u003ca href=\"README.fr.md\"\u003eFrançais\u003c/a\u003e | \u003ca href=\"README.hi.md\"\u003eहिन्दी\u003c/a\u003e | \u003ca href=\"README.it.md\"\u003eItaliano\u003c/a\u003e | \u003ca href=\"README.pt-BR.md\"\u003ePortuguês (BR)\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://mcp-tool-shop-org.github.io/registry-sync/\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/registry-sync/readme.png\" width=\"400\" alt=\"registry-sync\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/mcp-tool-shop-org/registry-sync/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/mcp-tool-shop-org/registry-sync/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@mcptoolshop/registry-sync\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@mcptoolshop/registry-sync\" alt=\"npm\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/mcp-tool-shop-org/registry-sync/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"MIT License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://mcp-tool-shop-org.github.io/registry-sync/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Landing_Page-live-blue\" alt=\"Landing Page\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nMotor de sincronización de estado deseado para la publicación de paquetes en múltiples registros. Audita su organización de GitHub frente a npmjs y GHCR, detecta desviaciones de versión, encuentra paquetes huérfanos y genera planes de acción, como Terraform para registros de paquetes.\n\nLa herramienta complementaria de escritura para [`registry-stats`](https://github.com/mcp-tool-shop-org/registry-stats).\n\n## Instalación\n\n```bash\nnpm install -g @mcptoolshop/registry-sync\n```\n\nO úselo directamente:\n\n```bash\nnpx @mcptoolshop/registry-sync audit --org my-org\n```\n\n## Inicio rápido\n\n```bash\n# Set your GitHub token\nexport GITHUB_TOKEN=ghp_...\n\n# Audit your org — see what's published, what's drifted, what's missing\nregistry-sync audit --org mcp-tool-shop-org\n\n# Generate an action plan\nregistry-sync plan --org mcp-tool-shop-org\n\n# Execute the plan (creates GitHub issues + PRs)\nregistry-sync apply --confirm\n```\n\n## Comandos\n\n### `audit`\n\nEscanea todos los repositorios en una organización de GitHub, lee el archivo `package.json` de cada repositorio y verifica la presencia de `Dockerfile`, y luego consulta npmjs y GHCR para crear una matriz de presencia.\n\n```\nregistry-sync audit [--org \u003corg\u003e] [--format table|json|markdown]\n```\n\nLa salida muestra el estado de la desviación por registro:\n- **✓** current — la versión publicada coincide con el repositorio\n- **⚠** behind — la versión del repositorio está por delante de la publicada\n- **missing** — aún no se ha publicado\n- **○** orphan — publicado pero no hay un repositorio correspondiente\n\n### `plan`\n\nEjecuta una auditoría y genera un plan de acción con niveles de riesgo.\n\n```\nregistry-sync plan [--org \u003corg\u003e] [--target npmjs|ghcr|all]\n```\n\nTipos de acción:\n- **publish** — publicación inicial en un registro\n- **update** — se necesita un aumento de versión (el repositorio está por delante de la versión publicada)\n- **scaffold-workflow** — agrega un flujo de trabajo de publicación de CI a través de una solicitud de extracción\n- **prune** — el paquete huérfano necesita limpieza\n\n### `apply`\n\nEjecuta el plan. Todas las acciones son no destructivas en la versión 1:\n- Crea **problemas** de GitHub para las acciones de publicación/actualización/limpieza\n- Abre **solicitudes de extracción** de GitHub con archivos de flujo de trabajo de CI para las acciones de creación de estructura\n\n```\nregistry-sync apply --confirm [--target npmjs|ghcr|all]\n```\n\nSin `--confirm`, muestra una ejecución de prueba (igual que `plan`).\n\n## Configuración\n\nColoque `registry-sync.config.json` en la raíz de su proyecto:\n\n```json\n{\n  \"org\": \"mcp-tool-shop-org\",\n  \"exclude\": [\".github\", \"brand\"],\n  \"targets\": {\n    \"npm\": { \"enabled\": true },\n    \"ghcr\": { \"enabled\": true }\n  }\n}\n```\n\nUtiliza valores predeterminados si no se encuentra ningún archivo de configuración.\n\n## Autenticación\n\nRequiere un token de GitHub con el alcance `repo`:\n\n1. Variable de entorno `GITHUB_TOKEN` (preferido)\n2. `gh auth token` (si está instalado el CLI de GitHub)\n\nNo se requiere un token de npm en la versión 1 (consultas de solo lectura al registro).\n\n## Uso de la biblioteca\n\n```typescript\nimport { audit, plan, loadConfig } from '@mcptoolshop/registry-sync';\n\nconst config = loadConfig();\nconst auditResult = await audit(config);\nconst planResult = plan(auditResult, config);\n\nconsole.log(planResult.summary);\n// { publish: 9, update: 1, scaffold: 26, prune: 3, skip: 45 }\n```\n\n## Seguridad y modelo de amenazas\n\nConsulte [SECURITY.md](./SECURITY.md) para obtener el modelo de seguridad completo.\n\n**Lo que afecta:** API pública de GitHub (metadatos del repositorio, contenido de archivos, problemas, solicitudes de extracción) y el registro público de npm (metadatos de paquetes de solo lectura). Crea problemas y solicitudes de extracción en los repositorios a los que tiene acceso de escritura cuando se utiliza `apply --confirm`.\n\n**Lo que NO afecta:** No se modifican archivos locales (búsqueda de configuración de solo lectura). No se realiza la publicación en npm, ni se envía ninguna imagen Docker, ni se almacenan credenciales. Ningún dato sale de su máquina más allá de las llamadas a las API de GitHub/npm.\n\n**Permisos requeridos:** Token de GitHub con el alcance `repo` (lectura para la auditoría, escritura para la aplicación). No se necesita token de npm.\n\n**Sin telemetría.** Sin análisis. Sin comunicación con servidores externos. Sin recopilación de datos de ningún tipo.\n\n---\n\nDesarrollado por \u003ca href=\"https://mcp-tool-shop.github.io/\"\u003eMCP Tool Shop\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcp-tool-shop-org%2Fregistry-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcp-tool-shop-org%2Fregistry-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcp-tool-shop-org%2Fregistry-sync/lists"}