func SetupLocal()

in e2etestrunner/setuplocal.go [37:109]


func SetupLocal(
	ctx context.Context,
	args *Args,
	logger *log.Logger,
) (*testclient.Client, Cleanup, error) {
	pubsubInfo, cleanupTf, err := setuptf.SetupTf(
		ctx,
		args.ProjectID,
		args.TestRunID,
		localTfDir,
		map[string]string{},
		logger,
	)
	if err != nil {
		return nil, cleanupTf, err
	}

	cli, err := client.NewClientWithOpts(client.FromEnv)
	if err != nil {
		return nil, cleanupTf, err
	}
	cli.NegotiateAPIVersion(ctx)

	createdRes, err := createContainer(ctx, cli, args, pubsubInfo, logger)
	if err != nil {
		if errdefs.IsNotFound(err) {
			err = fmt.Errorf(
				`docker image not found, try running "docker pull %v": %w`,
				args.Local.Image,
				err,
			)
		}
		return nil, cleanupTf, err
	}

	if len(createdRes.Warnings) != 0 {
		logger.Printf("Started with warnings: %v", createdRes.Warnings)
	}
	containerID := createdRes.ID
	removeContainer := func() {
		defer cleanupTf()
		err = cli.ContainerRemove(ctx, containerID, container.RemoveOptions{Force: true})
		if err != nil {
			logger.Panic(err)
		}
	}

	err = cli.ContainerStart(ctx, containerID, container.StartOptions{})
	if err != nil {
		return nil, removeContainer, err
	}

	cleanup := func() {
		logger.Printf("Stopping and removing container ID %v\n", containerID)
		timeout := 15
		err = cli.ContainerStop(ctx, containerID, container.StopOptions{Timeout: &timeout})
		defer removeContainer()
		if err != nil {
			logger.Panic(err)
		}
	}

	err = startForwardingContainerLogs(ctx, cli, containerID, logger)
	if err != nil {
		return nil, cleanup, err
	}

	client, err := testclient.New(ctx, args.ProjectID, pubsubInfo)
	if err != nil {
		return nil, cleanup, err
	}
	return client, cleanup, err
}