MCPcopy Create free account
hub / github.com/github/gh-aw / defaultWorkflowUpdateDeps

Function defaultWorkflowUpdateDeps

pkg/cli/update_workflows.go:460–488  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

458}
459
460func defaultWorkflowUpdateDeps() workflowUpdateDeps {
461 return workflowUpdateDeps{
462 runReleasesAPI: func(ctx context.Context, repo string) ([]byte, error) {
463 endpoint := fmt.Sprintf("/repos/%s/releases", repo)
464 output, err := workflow.RunGHContext(ctx, "Fetching releases...", "api", endpoint, "--jq", ".[].tag_name")
465 if err != nil && gitutil.IsAuthError(err.Error()) {
466 updateLog.Printf("GitHub API auth failed for releases of %s, retrying without token", repo)
467 body, fallbackErr := fetchPublicGitHubAPI(ctx, endpoint)
468 if fallbackErr != nil {
469 return nil, fmt.Errorf("failed (with token: %w; without token: %w)", err, fallbackErr)
470 }
471 var releases []struct {
472 TagName string `json:"tag_name"`
473 }
474 if fallbackErr = json.Unmarshal(body, &releases); fallbackErr != nil {
475 return nil, fmt.Errorf("failed to parse releases response: %w", fallbackErr)
476 }
477 var tags []string
478 for _, r := range releases {
479 if r.TagName != "" {
480 tags = append(tags, r.TagName)
481 }
482 }
483 return []byte(strings.Join(tags, "\n")), nil
484 }
485 return output, err
486 },
487 }
488}
489
490// resolveLatestRelease resolves the latest compatible release for a workflow source
491func resolveLatestRelease(ctx context.Context, repo, currentRef string, allowMajor, verbose bool, coolDown time.Duration) (string, error) {

Callers 2

mockWorkflowUpdateDepsFunction · 0.85
resolveLatestReleaseFunction · 0.85

Calls 6

RunGHContextFunction · 0.92
IsAuthErrorFunction · 0.92
fetchPublicGitHubAPIFunction · 0.85
ErrorMethod · 0.45
PrintfMethod · 0.45
ErrorfMethod · 0.45

Tested by 1

mockWorkflowUpdateDepsFunction · 0.68