func Main()

in internal/plugin/plugin.go [31:70]


func Main(progname string, args []string) {
	input, inputStdin := "", false

	fs := flag.NewFlagSet(progname, flag.ExitOnError)

	const inputFlag = "input"
	fs.StringVar(&input, inputFlag, "", "plugin `payload`")

	const inputStdinFlag = "input-stdin"
	fs.BoolVar(&inputStdin, inputStdinFlag, false, "receive plugin payload on stdin")

	_ = fs.Parse(args)

	if input == "" && !inputStdin {
		fs.Usage()
		log.Fatalf("no plugin input: either %q or %q flag must be specified",
			fs.Lookup(inputFlag).Name,
			fs.Lookup(inputStdinFlag).Name)
	}

	var r io.Reader = strings.NewReader(input)
	if inputStdin {
		r = os.Stdin
	}

	in, err := parseInput(r)
	if err != nil {
		log.Fatalf("invalid plugin input: %v", err)
	}

	// This is a logger used for extra diagnostics, when the debugging mode is on.
	debugLog := log.New(log.Writer(), log.Prefix(), log.Flags())
	if !in.Configuration.Debug {
		debugLog.SetOutput(io.Discard)
	}

	if err := invokeOperation(context.Background(), in, debugLog); err != nil {
		log.Fatal(err)
	}
}