diff --git a/cmd/aspect/info/BUILD.bazel b/cmd/aspect/info/BUILD.bazel new file mode 100644 index 000000000..809d488f9 --- /dev/null +++ b/cmd/aspect/info/BUILD.bazel @@ -0,0 +1,13 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "info", + srcs = ["info.go"], + importpath = "aspect.build/cli/cmd/aspect/info", + visibility = ["//visibility:public"], + deps = [ + "//pkg/aspect/info", + "//pkg/ioutils", + "@com_github_spf13_cobra//:cobra", + ], +) diff --git a/cmd/aspect/info/info.go b/cmd/aspect/info/info.go new file mode 100644 index 000000000..24102eec5 --- /dev/null +++ b/cmd/aspect/info/info.go @@ -0,0 +1,51 @@ +/* +Copyright © 2021 Aspect Build Systems + +Not licensed for re-use +*/ + +package info + +import ( + "github.com/spf13/cobra" + + "aspect.build/cli/pkg/aspect/info" + "aspect.build/cli/pkg/ioutils" +) + +func NewDefaultInfoCmd() *cobra.Command { + return NewInfoCmd(ioutils.DefaultStreams) +} + +func NewInfoCmd(streams ioutils.Streams) *cobra.Command { + v := info.New(streams) + + cmd := &cobra.Command{ + Use: "info", + Short: "Displays runtime info about the bazel server", + Long: `Displays information about the state of the bazel process in the +form of several "key: value" pairs. This includes the locations of +several output directories. Because some of the +values are affected by the options passed to 'bazel build', the +info command accepts the same set of options. + +A single non-option argument may be specified (e.g. "bazel-bin"), in +which case only the value for that key will be printed. + +If --show_make_env is specified, the output includes the set of key/value +pairs in the "Make" environment, accessible within BUILD files. + +The full list of keys and the meaning of their values is documented in +the bazel User Manual, and can be programmatically obtained with +'bazel help info-keys'. + +See also 'bazel version' for more detailed bazel version +information.`, + Args: cobra.MaximumNArgs(1), + RunE: v.Run, + } + + cmd.PersistentFlags().BoolVarP(&v.ShowMakeEnv, "show_make_env", "", false, `include the set of key/value pairs in the "Make" environment, +accessible within BUILD files`) + return cmd +} diff --git a/cmd/aspect/root/BUILD.bazel b/cmd/aspect/root/BUILD.bazel index faa150428..b7c3b244f 100644 --- a/cmd/aspect/root/BUILD.bazel +++ b/cmd/aspect/root/BUILD.bazel @@ -11,6 +11,7 @@ go_library( deps = [ "//cmd/aspect/build", "//cmd/aspect/docs", + "//cmd/aspect/info", "//cmd/aspect/version", "//docs/help/topics", "//pkg/ioutils", diff --git a/cmd/aspect/root/root.go b/cmd/aspect/root/root.go index 2345184f6..5b3213e0b 100644 --- a/cmd/aspect/root/root.go +++ b/cmd/aspect/root/root.go @@ -17,6 +17,7 @@ import ( "aspect.build/cli/cmd/aspect/build" "aspect.build/cli/cmd/aspect/docs" + "aspect.build/cli/cmd/aspect/info" "aspect.build/cli/cmd/aspect/version" "aspect.build/cli/docs/help/topics" "aspect.build/cli/pkg/ioutils" @@ -70,6 +71,7 @@ func NewRootCmd(streams ioutils.Streams, defaultInteractive bool) *cobra.Command cmd.AddCommand(build.NewDefaultBuildCmd()) cmd.AddCommand(version.NewDefaultVersionCmd()) cmd.AddCommand(docs.NewDefaultDocsCmd()) + cmd.AddCommand(info.NewDefaultInfoCmd()) // ### "Additional help topic commands" which are not runnable // https://pkg.go.dev/github.com/spf13/cobra#Command.IsAdditionalHelpTopicCommand diff --git a/docs/BUILD.bazel b/docs/BUILD.bazel index 4fd027dd5..3abc99db6 100644 --- a/docs/BUILD.bazel +++ b/docs/BUILD.bazel @@ -6,6 +6,7 @@ _DOCS = [ "aspect.md", "aspect_build.md", "aspect_docs.md", + "aspect_info.md", "aspect_version.md", ] diff --git a/docs/aspect.md b/docs/aspect.md index 24c1aa845..69358f293 100644 --- a/docs/aspect.md +++ b/docs/aspect.md @@ -18,6 +18,7 @@ Aspect CLI is a better frontend for running bazel * [aspect build](aspect_build.md) - Builds the specified targets, using the options. * [aspect docs](aspect_docs.md) - Open documentation in the browser +* [aspect info](aspect_info.md) - Displays runtime info about the bazel server * [aspect version](aspect_version.md) - Print the version of aspect CLI as well as tools it invokes ###### Auto generated by spf13/cobra diff --git a/docs/aspect_info.md b/docs/aspect_info.md new file mode 100644 index 000000000..5f326205e --- /dev/null +++ b/docs/aspect_info.md @@ -0,0 +1,49 @@ +## aspect info + +Displays runtime info about the bazel server + +### Synopsis + +Displays information about the state of the bazel process in the +form of several "key: value" pairs. This includes the locations of +several output directories. Because some of the +values are affected by the options passed to 'bazel build', the +info command accepts the same set of options. + +A single non-option argument may be specified (e.g. "bazel-bin"), in +which case only the value for that key will be printed. + +If --show_make_env is specified, the output includes the set of key/value +pairs in the "Make" environment, accessible within BUILD files. + +The full list of keys and the meaning of their values is documented in +the bazel User Manual, and can be programmatically obtained with +'bazel help info-keys'. + +See also 'bazel version' for more detailed bazel version +information. + +``` +aspect info [flags] +``` + +### Options + +``` + -h, --help help for info + --show_make_env include the set of key/value pairs in the "Make" environment, + accessible within BUILD files +``` + +### Options inherited from parent commands + +``` + --config string config file (default is $HOME/.aspect.yaml) + --interactive Interactive mode (e.g. prompts for user input) +``` + +### SEE ALSO + +* [aspect](aspect.md) - Aspect.build bazel wrapper + +###### Auto generated by spf13/cobra diff --git a/pkg/aspect/info/BUILD.bazel b/pkg/aspect/info/BUILD.bazel new file mode 100644 index 000000000..16c13bd4d --- /dev/null +++ b/pkg/aspect/info/BUILD.bazel @@ -0,0 +1,14 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "info", + srcs = ["info.go"], + importpath = "aspect.build/cli/pkg/aspect/info", + visibility = ["//visibility:public"], + deps = [ + "//pkg/aspecterrors", + "//pkg/bazel", + "//pkg/ioutils", + "@com_github_spf13_cobra//:cobra", + ], +) diff --git a/pkg/aspect/info/info.go b/pkg/aspect/info/info.go new file mode 100644 index 000000000..35fdf5c68 --- /dev/null +++ b/pkg/aspect/info/info.go @@ -0,0 +1,47 @@ +/* +Copyright © 2021 Aspect Build Systems Inc + +Not licensed for re-use. +*/ + +package info + +import ( + "aspect.build/cli/pkg/bazel" + "aspect.build/cli/pkg/ioutils" + "github.com/spf13/cobra" + + "aspect.build/cli/pkg/aspecterrors" +) + +type Info struct { + ioutils.Streams + + ShowMakeEnv bool +} + +func New(streams ioutils.Streams) *Info { + return &Info{ + Streams: streams, + } +} + +func (v *Info) Run(_ *cobra.Command, args []string) error { + bazelCmd := []string{"info"} + if v.ShowMakeEnv { + // Propagate the flag + bazelCmd = append(bazelCmd, "--show_make_env") + } + bazelCmd = append(bazelCmd, args...) + bzl := bazel.New() + + if exitCode, err := bzl.Spawn(bazelCmd); exitCode != 0 { + err = &aspecterrors.ExitError{ + Err: err, + ExitCode: exitCode, + } + return err + } + + return nil +}