{"id":36938773,"url":"https://github.com/georgepwall1991/cpmigrate","last_synced_at":"2026-02-01T16:01:29.468Z","repository":{"id":326393257,"uuid":"1105362770","full_name":"georgepwall1991/CPMigrate","owner":"georgepwall1991","description":"A beautiful CLI tool to automatically migrate .NET solutions to NuGet Central Package Management (CPM). Handles version conflicts, backups, and dry-runs.","archived":false,"fork":false,"pushed_at":"2026-01-25T13:19:47.000Z","size":2055,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-26T05:29:59.407Z","etag":null,"topics":["central-package-management","cli","cpm","csharp","dependency-management","devops","dotnet","dotnet-tool","fsharp","migration-tool","nuget","productivity","spectre-console","vb-net"],"latest_commit_sha":null,"homepage":"","language":"C#","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/georgepwall1991.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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}},"created_at":"2025-11-27T13:54:57.000Z","updated_at":"2026-01-25T13:19:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/georgepwall1991/CPMigrate","commit_stats":null,"previous_names":["georgepwall1991/cpmigrate"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/georgepwall1991/CPMigrate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgepwall1991%2FCPMigrate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgepwall1991%2FCPMigrate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgepwall1991%2FCPMigrate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgepwall1991%2FCPMigrate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/georgepwall1991","download_url":"https://codeload.github.com/georgepwall1991/CPMigrate/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/georgepwall1991%2FCPMigrate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28981893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T15:35:50.179Z","status":"ssl_error","status_checked_at":"2026-02-01T15:35:38.075Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["central-package-management","cli","cpm","csharp","dependency-management","devops","dotnet","dotnet-tool","fsharp","migration-tool","nuget","productivity","spectre-console","vb-net"],"created_at":"2026-01-13T10:21:33.321Z","updated_at":"2026-02-01T16:01:29.463Z","avatar_url":"https://github.com/georgepwall1991.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CPMigrate: The Ultimate .NET Central Package Management (CPM) Migration Tool\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./docs/images/logo.png\" alt=\"CPMigrate Logo\" width=\"128\" /\u003e\n  \u003cbr/\u003e\n  \u003cimg src=\"./docs/images/banner.png\" alt=\"CPMigrate Banner\" width=\"100%\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![.NET](https://img.shields.io/badge/.NET-10.0+-512BD4?style=flat-square\u0026logo=dotnet)](https://dotnet.microsoft.com/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)\n[![NuGet](https://img.shields.io/nuget/v/CPMigrate.svg?style=flat-square\u0026logo=nuget)](https://www.nuget.org/packages/CPMigrate/)\n[![Downloads](https://img.shields.io/nuget/dt/CPMigrate.svg?style=flat-square\u0026color=blue)](https://www.nuget.org/packages/CPMigrate/)\n\n\u003c/div\u003e\n\n![CPMigrate Interactive Wizard](./docs/images/cpmigrate-interactive.gif)\n\n## 🚀 Why CPMigrate?\n\nStop wrestling with **dependency hell** and **version drift**. CPMigrate is the advanced **CLI tool** that instantly modernizes your **.NET solutions** to use **NuGet Central Package Management (CPM)**.\n\nIt doesn't just move XML around; it is a full-featured **repository health auditor** that:\n*   **Analyzes** your entire dependency graph.\n*   **Resolves** deep version conflicts automatically.\n*   **Cleans** redundant `\u003cPackageReference\u003e` entries to reduce technical debt.\n*   **Secures** your codebase by detecting high-severity vulnerabilities before they are locked in.\n\n---\n\n## ✨ Key Features \u0026 Capabilities\n\n### 🛡️ **Intelligent Dependency Management**\n*   **Transitive Conflict Resolution:** Automatically detects and resolves deep dependency conflicts that `dotnet restore` often misses.\n*   **Dependency Lifting (Cleanup):** Identifies redundant explicit package references that are already transitively provided, keeping your `.csproj` files clean and minimal.\n*   **Smart Versioning Strategies:** Choose between *Highest*, *Lowest*, or *Fail* strategies to handle version mismatches across your repository.\n\n### 🔒 **Security-First Architecture**\n*   **Automated Vulnerability Audits:** Runs integrated security scans (`dotnet list package --vulnerable`) to prevent locking in insecure packages.\n*   **Secure Execution:** Strict path resolution prevents PATH injection attacks.\n*   **Supply Chain Hardening:** CI/CD workflows are pinned to secure hashes to prevent upstream compromises.\n\n### 🚀 **Modern Development Workflow**\n*   **SLNX Support:** Fully compatible with the new Visual Studio 17.10+ `.slnx` solution format.\n*   **Directory.Build.props Unification:** Automatically promotes repeated properties (Authors, TargetFramework, etc.) to a root-level configuration file, enforcing consistency across 100+ projects instantly.\n*   **Self-Updating:** Includes a built-in update checker to ensure you're always using the latest version of the tool.\n    *   `cpmigrate --update`\n\n### 🎮 **Mission Control Dashboard**\nAn immersive, keyboard-driven Terminal User Interface (TUI) that provides:\n*   **Real-time Risk Assessment:** Scans your repo and calculates a \"Migration Risk\" score.\n*   **Dry-Run Previews:** Visualize massively destructive changes before they happen.\n*   **Live Verification:** Automatically verifies build integrity after every migration step.\n\n---\n\n## 📦 Installation \u0026 Updating\n\n### As a .NET Global Tool (Recommended)\n\nRequires **.NET SDK 8.0** or later (supports .NET 10).\n\n**Install:**\n```bash\ndotnet tool install --global CPMigrate\n```\n\n**Update:**\nYou can let the tool update itself:\n```bash\ncpmigrate --update\n```\nOr manually via .NET CLI:\n```bash\ndotnet tool update --global CPMigrate\n```\n\n\u003e **Note:** NuGet indexing may take up to 15 minutes after a new release. Clear your HTTP cache if updates aren't found immediately:\n\u003e `dotnet nuget locals http-cache --clear`\n\n### From Source\n\n```bash\ngit clone https://github.com/georgepwall1991/CPMigrate.git\ncd CPMigrate\ndotnet build\n```\n\n---\n\n## 🕹️ Usage Scenarios\n\n### 1. The \"Mission Control\" (Interactive Mode)\nIdeal for first-time users or complex repositories.\n\n```bash\ncpmigrate\n```\n*   Drives the entire process via a step-by-step wizard.\n*   Offers rollbacks, backups, and detailed explanations.\n\n### 2. CI/CD \u0026 Automation (Headless Mode)\nPerfect for GitHub Actions, Azure DevOps, or Git hooks.\n\n**Migrate a specific solution:**\n```bash\ncpmigrate -s ./MySolution.sln\n```\n\n**Analyze repository health (No changes):**\n```bash\ncpmigrate --analyze\n```\n\n**Auto-fix common issues (No migration):**\n```bash\ncpmigrate --analyze --fix\n```\n\n### 3. Repository Modernization\nRefactor your entire codebase structure in one command.\n\n**Unify generic properties to `Directory.Build.props`:**\n```bash\ncpmigrate --unify-props\n```\n\n**Batch migrate a monorepo with 50+ solutions:**\n```bash\ncpmigrate --batch /path/to/repo --batch-parallel\n```\n\n\n### Options Reference\n\n| Option | Short | Description |\n|--------|-------|-------------|\n| `--interactive` | `-i` | Launch the Mission Control TUI (Default if no args). |\n| `--solution` | `-s` | Path to `.sln` or `.slnx` file or directory. |\n| `--unify-props` | - | Migrate common project properties to `Directory.Build.props`. |\n| `--dry-run` | `-d` | Simulate operations without writing files. |\n| `--analyze` | `-a` | Run health checks (duplicates, security, transitive). |\n| `--fix` | - | Apply automatic fixes to discovered analysis issues. |\n| `--rollback` | `-r` | Restore the last backup state. |\n| `--prune-backups` | - | Clean up old backup files to save space. |\n| `--output` | - | Output format: `Terminal` (default) or `Json` (for CI pipes). |\n\n---\n\n## 🖼️ Gallery\n\n### Mission Control Dashboard\n![CPMigrate Interactive](./docs/images/cpmigrate-interactive.gif)\n*The state-driven dashboard assessing migration risk.*\n\n### Risk Analysis \u0026 Dry Run\n![CPMigrate Demo](./docs/images/cpmigrate-demo.gif)\n*Previewing massive changes safely before committing.*\n\n### Security \u0026 Package Analysis\n![CPMigrate Analyze](./docs/images/cpmigrate-analyze.gif)\n*Scanning for vulnerabilities and redundant dependencies.*\n\n---\n\n## 🤝 Contributing\n\nContributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\n1.  Fork the Project\n2.  Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3.  Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4.  Push to the Branch (`git push origin feature/AmazingFeature`)\n5.  Open a Pull Request\n\n---\n\n## 📄 License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n\n## 👤 Author\n\n**George Wall**\n-   GitHub: [@georgepwall1991](https://github.com/georgepwall1991)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgepwall1991%2Fcpmigrate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeorgepwall1991%2Fcpmigrate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeorgepwall1991%2Fcpmigrate/lists"}