in container_images/registry-image-forked/commands/in.go [51:126]
func (i *In) Execute() error {
setupLogging(i.stderr)
var req resource.InRequest
decoder := json.NewDecoder(i.stdin)
decoder.DisallowUnknownFields()
err := decoder.Decode(&req)
if err != nil {
return fmt.Errorf("invalid payload: %s", err)
}
if req.Source.Debug {
logrus.SetLevel(logrus.DebugLevel)
}
if len(i.args) < 2 {
return fmt.Errorf("destination path not specified")
}
dest := i.args[1]
if req.Source.AwsAccessKeyID != "" && req.Source.AwsSecretAccessKey != "" && req.Source.AwsRegion != "" {
if !req.Source.AuthenticateToECR() {
return fmt.Errorf("cannot authenticate with ECR")
}
}
repo, err := req.Source.NewRepository()
if err != nil {
return fmt.Errorf("failed to resolve repository: %w", err)
}
tag := repo.Tag(req.Version.Tag)
if !req.Params.SkipDownload {
mirrorSource, hasMirror, err := req.Source.Mirror()
if err != nil {
return fmt.Errorf("failed to resolve mirror: %w", err)
}
usedMirror := false
if hasMirror {
err := downloadWithRetry(tag, mirrorSource, req.Params, req.Version, dest, i.stderr)
if err != nil {
logrus.Warnf("download from mirror %s failed: %s", mirrorSource.Repository, err)
} else {
usedMirror = true
}
}
if !usedMirror {
err := downloadWithRetry(tag, req.Source, req.Params, req.Version, dest, i.stderr)
if err != nil {
return fmt.Errorf("download failed: %w", err)
}
}
}
err = saveVersionInfo(dest, req.Version, req.Source.Repository)
if err != nil {
return fmt.Errorf("saving version info failed: %w", err)
}
err = json.NewEncoder(os.Stdout).Encode(resource.InResponse{
Version: req.Version,
Metadata: append(req.Source.Metadata(), resource.MetadataField{
Name: "tag",
Value: req.Version.Tag,
}),
})
if err != nil {
return fmt.Errorf("could not marshal JSON: %s", err)
}
return nil
}