func launchScriptRunner()

in cmd/metadata_script_runner_compat/metadata_script_runner_compat.go [79:123]


func launchScriptRunner(ctx context.Context, mdsClient metadata.MDSClientInterface, event string) error {
	var enabled bool
	opts := run.Options{
		Name:       metadataScriptRunnerLegacy,
		OutputType: run.OutputStream,
		Args:       []string{event},
	}

	mds, err := mdsClient.Get(ctx)
	if err != nil {
		galog.Warnf("Failed to fetch MDS descriptor: [%v], falling back to legacy script runner", err)
	} else {
		if enabled = mds.HasCorePluginEnabled(); enabled {
			opts.Name = metadataScriptRunnerNew
		}
	}

	if !file.Exists(metadataScriptRunnerLegacy, file.TypeFile) {
		galog.Infof("Script runner binary %q not found, running in test environment, overriding to new script runner", metadataScriptRunnerLegacy)
		opts.Name = metadataScriptRunnerNew
	}

	galog.Infof("Enable core plugin set to: [%t], launching script runner for event %q from %q", enabled, event, opts.Name)
	res, err := run.WithContext(ctx, opts)
	if err != nil {
		return fmt.Errorf("failed to run script runner: %v", err)
	}

	streams := res.OutputScanners
	// Go routines will exit once all output is consumed. Run library guarantees
	// that all channels are closed after use.
	go func() {
		for line := range streams.StdOut {
			galog.Info(line)
		}
	}()

	go func() {
		for line := range streams.StdErr {
			galog.Error(line)
		}
	}()

	return <-streams.Result
}