Skip to content

⬆️ 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

🔍 相关方法

基于 MIT 许可证发布