🔄 UpdatePackage
触发 Packagist 对已存在包重新抓取元数据(不修改仓库地址)。
何时使用
🔄 推送了新 tag 或发布新版本后,主动通知 Packagist 刷新;⏱️ webhook 失灵时手动触发更新;🤖 发布流水线末尾确保元数据及时同步。
签名
go
func (c *ComposerClient) UpdatePackage(ctx context.Context, request *domain.PackageUpdateRequest) (*domain.PackageUpdateResponse, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
ctx | context.Context | 上下文,用于超时与取消 |
request | *domain.PackageUpdateRequest | 请求体,Repository 字段为仓库 URL |
返回值
| 值 | 类型 | 说明 |
|---|---|---|
| 结果 | *domain.PackageUpdateResponse | 含 Status 与 Jobs(触发的抓取作业 ID 列表) |
| 错误 | error | 凭据缺失、HTTP 失败、非 200、JSON 解析失败时返回 |
对应端点(POST):https://packagist.org/api/update-package?username={u}&apiToken={t}。
示例
go
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/scagogogo/composer-skills/pkg/client"
"github.com/scagogogo/composer-skills/pkg/domain"
)
func main() {
c := client.NewComposerClient(
30*time.Second,
client.WithAPICredentials("your-username", "your-api-token"),
)
req := &domain.PackageUpdateRequest{
Repository: "https://github.com/your-org/your-package",
}
resp, err := c.UpdatePackage(context.Background(), req)
if err != nil {
log.Fatalf("更新失败: %v", err)
}
fmt.Printf("状态: %s\n", resp.Status)
for _, job := range resp.Jobs {
fmt.Println("作业:", job)
}
}进阶
与 EditPackage 区别
UpdatePackage 用 POST 触发重新抓取,不改仓库地址;EditPackage 用 PUT 覆盖仓库地址。若仅想刷新版本,优先用本方法。
凭据必需
本方法在调用前检查 username / apiToken,为空直接返回错误,请通过 WithAPICredentials 配置。
- 🚀 首次注册新包用
CreatePackage。 - ✏️ 修改仓库地址用
EditPackage。 - 📦 更新后验证新版本用
GetPackage或GetPackageStats。