MCPcopy
hub / github.com/keploy/keploy / GetLatestGitHubRelease

Function GetLatestGitHubRelease

utils/utils.go:511–546  ·  view source on GitHub ↗

GetLatestGitHubRelease fetches the latest version and release body from GitHub releases with a timeout.

(ctx context.Context, logger *zap.Logger)

Source from the content-addressed store, hash-verified

509
510// GetLatestGitHubRelease fetches the latest version and release body from GitHub releases with a timeout.
511func GetLatestGitHubRelease(ctx context.Context, logger *zap.Logger) (GitHubRelease, error) {
512 // GitHub repository details
513 repoOwner := "keploy"
514 repoName := "keploy"
515
516 apiURL := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases/latest", repoOwner, repoName)
517
518 client := http.Client{
519 Timeout: 4 * time.Second,
520 }
521
522 req, err := http.NewRequestWithContext(ctx, "GET", apiURL, nil)
523 if err != nil {
524 return GitHubRelease{}, err
525 }
526
527 resp, err := client.Do(req)
528 if err != nil {
529 var netErr net.Error
530 if errors.As(err, &netErr) && netErr.Timeout() {
531 return GitHubRelease{}, ErrGitHubAPIUnresponsive
532 }
533 return GitHubRelease{}, err
534 }
535 defer func() {
536 if err := resp.Body.Close(); err != nil {
537 LogError(logger, err, "failed to close response body")
538 }
539 }()
540
541 var release GitHubRelease
542 if err := json.NewDecoder(resp.Body).Decode(&release); err != nil {
543 return GitHubRelease{}, err
544 }
545 return release, nil
546}
547
548// FindDockerCmd checks if the cli is related to docker or not, it also returns if it is a docker compose file
549// ExtractCommandFromArgs parses os.Args to find the value of -c or --command flag.

Callers 1

UpdateMethod · 0.92

Calls 3

LogErrorFunction · 0.85
TimeoutMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected