1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
15 "git.arvados.org/arvados.git/lib/cmd"
16 "git.arvados.org/arvados.git/lib/install"
17 "git.arvados.org/arvados.git/sdk/go/ctxlog"
21 handler = cmd.Multi(map[string]cmd.Handler{
22 "version": cmd.Version,
23 "-version": cmd.Version,
24 "--version": cmd.Version,
26 "build": cmdFunc(build),
28 "testinstall": cmdFunc(testinstall),
29 "_install": install.Command, // internal use
34 os.Exit(handler.RunCommand(os.Args[0], os.Args[1:], os.Stdin, os.Stdout, os.Stderr))
37 type cmdFunc func(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writer) error
39 func (cf cmdFunc) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
40 logger := ctxlog.New(stderr, "text", "info")
41 ctx := ctxlog.Context(context.Background(), logger)
42 opts, err := parseFlags(args)
44 logger.WithError(err).Error("error parsing command line flags")
47 err = cf(ctx, opts, stdin, stdout, stderr)
49 logger.WithError(err).Error("failed")
64 func parseFlags(args []string) (opts, error) {
66 TargetOS: "debian:10",
68 flags := flag.NewFlagSet("", flag.ContinueOnError)
69 flags.StringVar(&opts.PackageVersion, "package-version", opts.PackageVersion, "package version to build/test, like \"1.2.3\"")
70 flags.StringVar(&opts.SourceDir, "source", opts.SourceDir, "arvados source tree location")
71 flags.StringVar(&opts.PackageDir, "package-dir", opts.PackageDir, "destination directory for new package (default is cwd)")
72 flags.StringVar(&opts.PackageChown, "package-chown", opts.PackageChown, "desired uid:gid for new package (default is current user:group)")
73 flags.StringVar(&opts.TargetOS, "target-os", opts.TargetOS, "target operating system vendor:version")
74 flags.BoolVar(&opts.RebuildImage, "rebuild-image", opts.RebuildImage, "rebuild docker image(s) instead of using existing")
75 err := flags.Parse(args)
79 if len(flags.Args()) > 0 {
80 return opts, fmt.Errorf("unrecognized command line arguments: %v", flags.Args())
82 if opts.SourceDir == "" {
85 return opts, fmt.Errorf("Getwd: %w", err)
89 opts.PackageDir = filepath.Clean(opts.PackageDir)