func main()

in example/ecr-copy/main.go [35:85]


func main() {
	ctx := namespaces.NamespaceFromEnv(context.Background())

	if len(os.Args) < 3 {
		log.G(ctx).Fatal("Must provide source and destination as arguments")
	} else if len(os.Args) > 3 {
		log.G(ctx).Fatal("Must provide only the source and destination as arguments")
	}

	sourceRef := os.Args[1]
	destRef := os.Args[2]

	enableDebug := defaultEnableDebug
	parseEnvInt(ctx, "ECR_COPY_DEBUG", &enableDebug)
	if enableDebug == 1 {
		log.L.Logger.SetLevel(logrus.TraceLevel)
	}

	client, err := containerd.New("/run/containerd/containerd.sock")
	if err != nil {
		log.G(ctx).WithError(err).Fatal("Failed to connect to containerd")
	}
	defer client.Close()

	resolver, err := ecr.NewResolver()
	if err != nil {
		log.G(ctx).WithError(err).Fatal("Failed to create resolver")
	}

	log.G(ctx).WithField("sourceRef", sourceRef).Info("Pulling from Amazon ECR")
	img, err := client.Fetch(
		ctx,
		sourceRef,
		containerd.WithResolver(resolver),
	)
	if err != nil {
		log.G(ctx).WithError(err).WithField("sourceRef", sourceRef).Fatal("Failed to pull")
	}
	log.G(ctx).WithField("img", img.Name).Info("Pulled successfully!")

	log.G(ctx).WithField("sourceRef", sourceRef).WithField("destRef", destRef).Info("Pushing to Amazon ECR")
	desc := img.Target
	err = client.Push(ctx, destRef, desc,
		containerd.WithResolver(resolver),
	)
	if err != nil {
		log.G(ctx).WithError(err).WithField("destRef", destRef).Fatal("Failed to push")
	}

	log.G(ctx).WithField("destRef", destRef).Info("Pushed successfully!")
}