⬆️ GetOutdatedInfo
获取结构化的过时包信息,内部执行 composer outdated --format=json 并解析为 *OutdatedResult。
何时使用
- 📊 程序化遍历过时包,生成升级报告。
- 🤖 CI 中按
LatestStatus判断是否安全升级。 - 📈 监控依赖新鲜度指标。
签名
go
func (c *Composer) GetOutdatedInfo() (*OutdatedResult, error)参数
无。
返回值
| 值 | 类型 | 说明 |
|---|---|---|
| 结果 | *OutdatedResult | 解析后的过时包信息 |
| 错误 | error | 执行或 JSON 解析失败时返回 |
OutdatedResult 与条目结构:
go
type OutdatedResult struct {
Installed []OutdatedPackage `json:"installed"`
Count int `json:"count,omitempty"`
}
type OutdatedPackage struct {
Name string `json:"name"`
Latest string `json:"latest"`
Installed string `json:"version"`
LatestStatus string `json:"latest_status"`
Abandoned interface{} `json:"abandoned,omitempty"`
}LatestStatus 取值:semver-safe-update(语义安全升级)、update-possible(可升级但可能破坏)、up-to-date(已是最新)。
示例
go
package main
import (
"fmt"
"log"
"github.com/scagogogo/composer-skills/pkg/composer"
)
func main() {
comp, err := composer.New(composer.DefaultOptions())
if err != nil {
log.Fatalf("初始化失败: %v", err)
}
result, err := comp.GetOutdatedInfo()
if err != nil {
log.Fatalf("获取过时包信息失败: %v", err)
}
fmt.Printf("共 %d 个过时包\n", result.Count)
for _, pkg := range result.Installed {
fmt.Printf("%s: %s -> %s (%s)\n",
pkg.Name, pkg.Installed, pkg.Latest, pkg.LatestStatus)
}
}进阶
GetOutdatedInfoWithOptions
需要附加 --direct、--minor-only 等标志时使用:
go
func (c *Composer) GetOutdatedInfoWithOptions(options map[string]string) (*OutdatedResult, error)非零退出码处理
composer outdated 在有过时包时可能返回非零退出码,但输出仍包含有效 JSON。SDK 已处理此情况:当 err 非 nil 但 output 非空时仍会解析输出;仅当输出为空时返回空结果。
文本输出
只需原始文本用 OutdatedPackages。
🔍 相关方法
OutdatedPackages:文本输出。BumpPackages:升级到约束内最新版。