func newPullExecutor()

in command-runner/internal/containers/finch/finch_pull.go [24:60]


func newPullExecutor(input newPullExecutorInput) common.Executor {
	return func(ctx context.Context) error {
		log.Ctx(ctx).Printf("containerd pull %s force? %v", input.Image, input.ForcePull)

		if common.Dryrun(ctx) {
			return nil
		}

		pull := input.ForcePull
		if !pull {
			imageExists, err := imageExistsLocally(ctx, input.Image, input.Platform)
			log.Ctx(ctx).Printf("Image exists? %v", imageExists)
			if err != nil {
				return fmt.Errorf("unable to determine if image already exists for image '%s' (%s): %w", input.Image, input.Platform, err)
			}

			if !imageExists {
				pull = true
			}
		}

		if !pull {
			return nil
		}

		f, err := newFinch(finchInstallDir)
		if err != nil {
			return err
		}

		imageRef := input.Image
		log.Ctx(ctx).Printf("pulling image '%v' (%s)", imageRef, input.Platform)

		_, _, err = f.RunWithoutStdio(ctx, "pull", "-q", imageRef)
		return err
	}
}