func()

in container_images/registry-image-forked/commands/check.go [44:90]


func (c *Check) Execute() error {
	setupLogging(c.stderr)

	var req resource.CheckRequest
	decoder := json.NewDecoder(c.stdin)
	decoder.DisallowUnknownFields()
	err := decoder.Decode(&req)
	if err != nil {
		return fmt.Errorf("invalid payload: %s", err)
	}

	if req.Source.AwsAccessKeyID != "" && req.Source.AwsSecretAccessKey != "" && req.Source.AwsRegion != "" {
		if !req.Source.AuthenticateToECR() {
			return fmt.Errorf("cannot authenticate with ECR")
		}
	}

	mirrorSource, hasMirror, err := req.Source.Mirror()
	if err != nil {
		return fmt.Errorf("failed to resolve mirror: %w", err)
	}

	var response resource.CheckResponse

	if hasMirror {
		response, err = check(mirrorSource, req.Version)
		if err != nil {
			logrus.Warnf("checking mirror %s failed: %s", mirrorSource.Repository, err)
		} else if len(response) == 0 {
			logrus.Warnf("checking mirror %s failed: tag not found", mirrorSource.Repository)
		}
	}

	if len(response) == 0 {
		response, err = check(req.Source, req.Version)
		if err != nil {
			return fmt.Errorf("checking origin %s failed: %w", req.Source.Repository, err)
		}
	}

	err = json.NewEncoder(c.stdout).Encode(response)
	if err != nil {
		return fmt.Errorf("could not marshal JSON: %s", err)
	}

	return nil
}