scagogogo/composer-skills

GitHub: scagogogo/composer-skills

这是一个为 PHP Composer 生态系统提供强类型 Go 封装的 SDK,将 Packagist API 调用与 Composer CLI 操作统一为结构化的 Go 接口,免去了手动解析命令行输出的麻烦。

Stars: 0 | Forks: 0

# Composer Skills [![Go Reference](https://pkg.go.dev/badge/github.com/scagogogo/composer-skills.svg)](https://pkg.go.dev/github.com/scagogogo/composer-skills) [![Go Report Card](https://goreportcard.com/badge/github.com/scagogogo/composer-skills)](https://goreportcard.com/report/github.com/scagogogo/composer-skills) [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/cas/dd/dded91b241dbb5b3d776820a82e1a684210defd685a8a6434ebe557ea8632d7c.svg)](https://github.com/scagogogo/composer-skills/actions/workflows/go-tests.yml) [![License: MIT](https://img.shields.io/github/license/scagogogo/composer-skills)](LICENSE) [简体中文](README-zh-CN.md) · **English** Go module: `github.com/scagogogo/composer-skills` · License: MIT · Go ≥ 1.23 针对 PHP Composer 生态系统的强类型 Go SDK。只需一次导入即可暴露两个独立的 SDK 以及一个基础层。无需解析 `exec.Command` 输出——所有结果均为 Go structs。 ## 包 | 导入路径 | 角色 | 是否需要 PHP | |---|---|---| | `pkg/client` | Packagist REST API 客户端(20 个方法) | 否 | | `pkg/repository` | 底层 Packagist HTTP 层(支持 `context`) | 否 | | `pkg/composer` | Composer CLI 包装器(234 个方法,20 个类别) | 是(PHP 7.4+,Composer 2.0+) | | `pkg/detector` | 跨操作系统 Composer 二进制文件检测 | 否 | | `pkg/installer` | 自动安装 Composer + PHP(Windows/macOS/Linux) | 否 | | `pkg/domain` | 数据模型(`Package`、`Advisory`、`Statistics`、`Version` 等) | 否 | | `pkg/composerutils` | 文件系统 / HTTP / mock / 测试辅助工具 | 否 | | `cmd/composer-skills` | 暴露所有 SDK 功能的 Cobra CLI(50+ 子命令) | 混合 | ## 选择 SDK - 查询 packagist.org(搜索、统计、安全公告、包信息)→ `pkg/client`。纯 Go 实现,无需 PHP。 - 操作本地 PHP 项目(安装/更新/依赖/审计/验证)→ `pkg/composer`。需要在主机上安装 PHP+Composer。 - 检测是否已安装 Composer → `pkg/detector`。如果缺失则进行安装 → `pkg/installer`。 ## 安装 ``` go get github.com/scagogogo/composer-skills ``` ## Packagist API(无需 PHP) ``` package main import ( "fmt" "time" "github.com/scagogogo/composer-skills/pkg/client" ) func main() { c := client.NewComposerClient(30 * time.Second) r, _ := c.SearchPackages("logging", 10, 1) fmt.Println("matches:", r.Total) p, _ := c.GetPackage("monolog/monolog") fmt.Println(p.Package.Name, "—", p.Package.Description) a, _ := c.GetSecurityAdvisories() fmt.Println("advisories:", len(a.Advisories)) s, _ := c.GetStatistics() fmt.Println("total packages:", s.Packages) } ``` ## Composer CLI(需要 PHP + Composer) ``` package main import ( "fmt" "log" "github.com/scagogogo/composer-skills/pkg/composer" ) func main() { comp, err := composer.New(composer.DefaultOptions()) // auto-installs Composer if missing if err != nil { log.Fatal(err) } comp.SetWorkingDir("/path/to/php/project") _ = comp.Install(false, true) _ = comp.RequirePackage("monolog/monolog", "^3.0", false) _ = comp.Update([]string{}, false) audit, _ := comp.AuditWithJSON() // typed security audit fmt.Println("vulns:", audit.Found) outdated, _ := comp.GetOutdatedInfo() // typed outdated info fmt.Println("outdated:", len(outdated.Outdated)) _ = comp.ValidateStructured() // validate composer.json phpVer, _ := comp.GetPHPVersion() hasExt, _ := comp.HasExtension("mbstring") fmt.Println(phpVer, hasExt) } ``` ## 自动安装 Composer ``` package main import ( "fmt" "github.com/scagogogo/composer-skills/pkg/detector" "github.com/scagogogo/composer-skills/pkg/installer" ) func main() { d := detector.NewDetector() if d.IsInstalled() { path, _ := d.Detect() fmt.Println("found:", path) return } inst := installer.NewInstaller(installer.SmartConfig()) fmt.Println(inst.Install()) // downloads Composer (+ PHP if needed), OS-aware } ``` ## 结构化结果方法 优先使用这些方法而不是原始字符串变体——它们会将 `composer ... --format=json` 解析为 Go structs。 | 方法 | 返回值 | 包装命令 | |---|---|---| | `AuditWithJSON` | `*AuditResult` | `composer audit --format=json` | | `GetOutdatedInfo` | `*OutdatedResult` | `composer outdated --format=json` | | `GetVersionInfo` | `*VersionInfo` | `composer --version` | | `ShowPackageInfo` | `*PackageInfo` | `composer show --format=json` | | `SearchInfo` | `*SearchResult` | `composer search --format=json` | | `ValidateStructured` | `*ValidateResult` | `composer validate` | | `CheckPlatformReqsStructured` | `*PlatformCheckResult` | `composer check-platform-reqs` | | `GetLicensesInfo` | `*LicensesResult` | `composer licenses` | | `GetConfigStructured` | `*ConfigResult` | `composer config` | | `DiagnoseStructured` | `*DiagnoseResult` | `composer diagnose` | ## 便捷辅助方法 `IsPackageInstalled`, `IsPackageDev`, `HasComposerLock`, `HasVendorDir`, `GetInstalledPackageNames`, `GetDirectDependencyNames`, `GetProjectDependencies`, `GetProjectSummary`, `GetRequireWithVersion`, `GetAbandonedPackagesFromLock`, `GetNamespaceMap`, `GetScripts`, `GetVendorDir`, `GetCacheDir`, `GetComposerHomeDir`。 ## CLI ``` go install github.com/scagogogo/composer-skills/cmd/composer-skills@latest ``` ``` composer-skills search query "logging" # Packagist (no PHP) composer-skills package info symfony/console --json composer-skills security advisories composer-skills repo stats composer-skills repo popular composer-skills local install --working-dir /path/to/project # Composer (needs PHP) composer-skills local audit --working-dir /path/to/project composer-skills local outdated --working-dir /path/to/project composer-skills local why monolog/monolog --working-dir /path/to/project ``` 全局 flags:`--timeout`(默认 60s)、`--base-url`、`--repo-url`、`--username`、`--api-token`、`--json`。 ## Composer CLI 方法分类(234 个方法) Core (10) · Dependencies (16) · Packages (20) · Audit (10) · Project (10) · Config (12) · Validation (14) · Platform (8) · Repository (18) · Global (14) · Auth (10) · Fund (7) · Licenses (4) · Diagnosis (8) · Exec (8) · Satis (8) · Version (5) · Environment (12) · composer.json (10) · Archive (6)。 命名约定:每个操作都有一个基础方法、一个 `WithOptions(map[string]string)` 变体,以及在 Composer 支持 `--format` 的情况下的一个 `WithFormat(format)` 变体。结构化变体命名为 `XxxInfo` / `XxxStructured` / `XxxWithJSON`。 ## 项目结构 ``` cmd/composer-skills/ CLI (Cobra, 50+ subcommands) pkg/client/ Packagist API client pkg/repository/ Low-level Packagist HTTP layer pkg/composer/ Composer CLI wrapper SDK pkg/detector/ Composer detection (cross-OS) pkg/installer/ Composer + PHP auto-install pkg/domain/ Data models pkg/composerutils/ Filesystem / HTTP / mock / test helpers examples/ 15+ runnable programs docs/skills/ Progressive guides (12) website/docs/ VitePress docs site ``` ## 测试 ``` make test # all tests make test-race # with race detector make test-coverage # coverage report ``` 包含 450+ 个测试,通过 `pkg/composerutils/mock` 和 `composer.SetupMockOutput` 实现基于 mock 的隔离。 ## 文档 - 文档网站:https://scagogogo.github.io/composer-skills/ - Go 参考:https://pkg.go.dev/github.com/scagogogo/composer-skills - 示例:`examples/` 目录 ## AI 提示词 将下方的代码块复制到您的 AI 对话(ChatGPT、Claude、Copilot 等)中,让它为您集成此 SDK。请将括号中的内容替换为您具体的实际目标。 ``` # 任务:将 `composer-skills` 集成到 Go 项目中 You are integrating **Composer Skills** — `github.com/scagogogo/composer-skills`, a typed Go SDK for the PHP Composer ecosystem. Go ≥ 1.23, MIT. ## 两个独立的 SDK 1. `pkg/client` — Packagist REST API. Pure Go, no PHP. Methods: `SearchPackages`, `GetPackage`, `GetSecurityAdvisories`, `GetStatistics`, `ListPackages*`, `GetPackageStats`, `CreatePackage`/`EditPackage`/`UpdatePackage` (need `WithAPICredentials`). Construct: `c := client.NewComposerClient(30*time.Second)`. 2. `pkg/composer` — typed wrapper over the local `composer` binary. Needs PHP 7.4+ + Composer 2.0+. Construct: `comp, err := composer.New(composer.DefaultOptions())` (auto-installs Composer if missing). 234 methods across 20 categories. Foundation: `pkg/detector` (cross-OS Composer detection, `NewDetector().Detect()`), `pkg/installer` (auto-install Composer+PHP, `installer.NewInstaller(installer.SmartConfig()).Install()`), `pkg/domain` (data models), `pkg/composerutils` (fs/http/mock/test helpers). ## 规则 - Prefer structured methods returning Go structs: `AuditWithJSON`, `GetOutdatedInfo`, `GetVersionInfo`, `ShowPackageInfo`, `SearchInfo`, `ValidateStructured`, `CheckPlatformReqsStructured`, `GetLicensesInfo`, `GetConfigStructured`, `DiagnoseStructured`. Avoid parsing raw string output. - Each operation has base, `WithOptions(map[string]string)`, and (where Composer supports) `WithFormat(format)` variants. - Convenience helpers: `IsPackageInstalled`, `GetDirectDependencyNames`, `GetProjectSummary`, `GetAbandonedPackagesFromLock`, `GetNamespaceMap`, `GetScripts`, `HasComposerLock`, `HasVendorDir`. - CLI: `go install github.com/scagogogo/composer-skills/cmd/composer-skills@latest` — 50+ subcommands (`search`, `package`, `repo`, `security`, `local`, …), `--json` flag, `--working-dir` for local ops. - Docs: https://scagogogo.github.io/composer-skills/ · Go ref: https://pkg.go.dev/github.com/scagogogo/composer-skills · Examples: `examples/`. ## 我的目标 [Replace this line with what you want to build, e.g. "a Go service that nightly scans all my PHP projects for vulnerable dependencies and alerts Slack."] Deliver: (1) which SDK and why, (2) complete runnable Go code with imports + error handling, (3) `go get` command + environment prerequisites, (4) relevant doc links. ``` ## 致谢 - [Packagist](https://packagist.org/) — PHP 包仓库 - [Composer](https://getcomposer.org/) — PHP 依赖管理器 ## 许可证 [MIT](LICENSE)
标签:Composer, EVTX分析, Go模块, OpenVAS, Packagist API, PHP, SOC Prime, 开发工具, 日志审计, 服务器监控, 特权提升, 自动化部署