X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2cfb41d14010e26d97df93c4cf8ad00f0ac01701..879bde382ebf26aa593869cfff22cc7e85be6bb0:/cmd/arvados-package/cmd.go diff --git a/cmd/arvados-package/cmd.go b/cmd/arvados-package/cmd.go index 9b9971e92c..54f0809d64 100644 --- a/cmd/arvados-package/cmd.go +++ b/cmd/arvados-package/cmd.go @@ -11,6 +11,7 @@ import ( "io" "os" "path/filepath" + "strings" "git.arvados.org/arvados.git/lib/cmd" "git.arvados.org/arvados.git/lib/install" @@ -24,13 +25,17 @@ var ( "--version": cmd.Version, "build": cmdFunc(build), - "fpm": cmdFunc(fpm), "testinstall": cmdFunc(testinstall), + "_fpm": cmdFunc(fpm), // internal use "_install": install.Command, // internal use }) ) func main() { + if len(os.Args) < 2 || strings.HasPrefix(os.Args[1], "-") { + parseFlags([]string{"-help"}) + os.Exit(2) + } os.Exit(handler.RunCommand(os.Args[0], os.Args[1:], os.Stdin, os.Stdout, os.Stderr)) } @@ -59,11 +64,16 @@ type opts struct { RebuildImage bool SourceDir string TargetOS string + Maintainer string + Vendor string } func parseFlags(args []string) (opts, error) { opts := opts{ - TargetOS: "debian:10", + SourceDir: ".", + TargetOS: "debian:10", + Maintainer: "Arvados Package Maintainers ", + Vendor: "The Arvados Project", } flags := flag.NewFlagSet("", flag.ContinueOnError) flags.StringVar(&opts.PackageVersion, "package-version", opts.PackageVersion, "package version to build/test, like \"1.2.3\"") @@ -71,7 +81,45 @@ func parseFlags(args []string) (opts, error) { flags.StringVar(&opts.PackageDir, "package-dir", opts.PackageDir, "destination directory for new package (default is cwd)") flags.StringVar(&opts.PackageChown, "package-chown", opts.PackageChown, "desired uid:gid for new package (default is current user:group)") flags.StringVar(&opts.TargetOS, "target-os", opts.TargetOS, "target operating system vendor:version") + flags.StringVar(&opts.Maintainer, "package-maintainer", opts.Maintainer, "maintainer to be listed in package metadata") + flags.StringVar(&opts.Vendor, "package-vendor", opts.Vendor, "vendor to be listed in package metadata") flags.BoolVar(&opts.RebuildImage, "rebuild-image", opts.RebuildImage, "rebuild docker image(s) instead of using existing") + flags.Usage = func() { + fmt.Fprint(flags.Output(), `Usage: arvados-package [options] + +Subcommands: + build + use a docker container to build a package from a checked + out version of the arvados source tree + testinstall + use a docker container to install a package and confirm + the resulting installation is functional + version + show program version + +Internally used subcommands: + _fpm + build a package + _install + equivalent to "arvados-server install" + +Automation/integration notes: + The first time a given machine runs "build" or "testinstall" (and + any time the -rebuild-image is used), new docker images are built, + which is quite slow. If you use on-demand VMs to run automated builds, + run "build" and "testinstall" once when setting up your initial VM + image, and be prepared to rebuild that VM image when package-building + slows down (this will happen when new dependencies are introduced). + + The "build" subcommand, if successful, also runs + dpkg-scanpackages to create/replace Packages.gz in the package + dir. This enables the "testinstall" subcommand to list the + package dir as a source in /etc/apt/sources.*. + +Options: +`) + flags.PrintDefaults() + } err := flags.Parse(args) if err != nil { return opts, err @@ -87,5 +135,9 @@ func parseFlags(args []string) (opts, error) { opts.SourceDir = d } opts.PackageDir = filepath.Clean(opts.PackageDir) + opts.SourceDir, err = filepath.Abs(opts.SourceDir) + if err != nil { + return opts, err + } return opts, nil }