diff --git a/shell/BUILD b/shell/BUILD index 4148901..75347bb 100644 --- a/shell/BUILD +++ b/shell/BUILD @@ -27,3 +27,16 @@ bzl_library( visibility = ["//visibility:public"], deps = ["//shell/private:private_bzl"], ) + +[ + starlark_doc_extract( + name = module + ".doc_extract", + src = module + ".bzl", + deps = [":rules_bzl"], + ) + for module in [ + "sh_binary", + "sh_library", + "sh_test", + ] +] diff --git a/shell/private/sh_binary.bzl b/shell/private/sh_binary.bzl index 7a3c791..4862fae 100644 --- a/shell/private/sh_binary.bzl +++ b/shell/private/sh_binary.bzl @@ -21,25 +21,25 @@ visibility("public") sh_binary = make_sh_executable_rule( doc = """ -

- The sh_binary rule is used to declare executable shell scripts. - (sh_binary is a misnomer: its outputs aren't necessarily binaries.) This rule ensures - that all dependencies are built, and appear in the runfiles area at execution time. - We recommend that you name your sh_binary() rules after the name of the script minus - the extension (e.g. .sh); the rule name and the file name must be distinct. - sh_binary respects shebangs, so any available interpreter may be used (eg. - #!/bin/zsh) -

-

Example

-

For a simple shell script with no dependencies and some data files: -

-
-sh_binary(
-    name = "foo",
-    srcs = ["foo.sh"],
-    data = glob(["datafiles/*.txt"]),
-)
-
+ The `sh_binary` rule is used to declare executable shell scripts. + (`sh_binary` is a misnomer: its outputs aren't necessarily binaries.) This rule ensures + that all dependencies are built, and appear in the `runfiles` area at execution time. + We recommend that you name your `sh_binary()` rules after the name of the script minus + the extension (e.g. `.sh`); the rule name and the file name must be distinct. + `sh_binary` respects shebangs, so any available interpreter may be used (eg. + `#!/bin/zsh`) + + #### Example + + For a simple shell script with no dependencies and some data files: + + ```starlark + sh_binary( + name = "foo", + srcs = ["foo.sh"], + data = glob(["datafiles/*.txt"]), + ) + ``` """, executable = True, ) diff --git a/shell/private/sh_executable.bzl b/shell/private/sh_executable.bzl index 359667b..b1fea70 100644 --- a/shell/private/sh_executable.bzl +++ b/shell/private/sh_executable.bzl @@ -187,12 +187,11 @@ def make_sh_executable_rule(doc, extra_attrs = {}, **kwargs): allow_files = True, doc = """ The file containing the shell script. -

- This attribute must be a singleton list, whose element is the shell script. - This script must be executable, and may be a source file or a generated file. - All other files required at runtime (whether scripts or data) belong in the - data attribute. -

+ +This attribute must be a singleton list, whose element is the shell script. +This script must be executable, and may be a source file or a generated file. +All other files required at runtime (whether scripts or data) belong in the +`data` attribute. """, ), "data": attr.label_list( @@ -203,14 +202,13 @@ The file containing the shell script. allow_rules = ["sh_library"], doc = """ The list of "library" targets to be aggregated into this target. -See general comments about deps -at Typical attributes defined by -most build rules. -

- This attribute should be used to list other sh_library rules that provide - interpreted program source code depended on by the code in srcs. The files - provided by these rules will be present among the runfiles of this target. -

+See general comments about `deps` at +[Typical attributes defined by most build rules](https://bazel.build/reference/be/common-definitions#typical.deps) + +This attribute should be used to list other `sh_library` rules that provide +interpreted program source code depended on by the code in `srcs`. The files +provided by these rules will be present among the `runfiles` of this target. + """, ), "_runfiles_dep": attr.label( diff --git a/shell/private/sh_library.bzl b/shell/private/sh_library.bzl index 2f3613c..2f7a582 100644 --- a/shell/private/sh_library.bzl +++ b/shell/private/sh_library.bzl @@ -46,35 +46,29 @@ def _sh_library_impl(ctx): sh_library = rule( _sh_library_impl, doc = """ -

- The main use for this rule is to aggregate together a logical - "library" consisting of related scripts—programs in an - interpreted language that does not require compilation or linking, - such as the Bourne shell—and any data those programs need at - run-time. Such "libraries" can then be used from - the data attribute of one or - more sh_binary rules. -

+The main use for this rule is to aggregate together a logical +"library" consisting of related scripts -- programs in an +interpreted language that does not require compilation or linking, +such as the Bourne shell -- and any data those programs need at +run-time. Such "libraries" can then be used from +the `data` attribute of one or +more `sh_binary` rules. -

- You can use the filegroup rule to aggregate data - files. -

+You can use the [filegroup](https://bazel.build/reference/be/general#filegroup) +rule to aggregate data files. -

- In interpreted programming languages, there's not always a clear - distinction between "code" and "data": after all, the program is - just "data" from the interpreter's point of view. For this reason - this rule has three attributes which are all essentially equivalent: - srcs, deps and data. - The current implementation does not distinguish between the elements of these lists. - All three attributes accept rules, source files and generated files. - It is however good practice to use the attributes for their usual purpose (as with other rules). -

+In interpreted programming languages, there's not always a clear +distinction between "code" and "data": after all, the program is +just "data" from the interpreter's point of view. For this reason +this rule has three attributes which are all essentially equivalent: +`srcs`, `deps` and `data`. +The current implementation does not distinguish between the elements of these lists. +All three attributes accept rules, source files and generated files. +It is however good practice to use the attributes for their usual purpose (as with other rules). -

Examples

+#### Examples -
+```starlark
 sh_library(
     name = "foo",
     data = [
@@ -82,18 +76,17 @@ sh_library(
         ":deploy_foo",  # another sh_binary with srcs
     ],
 )
-
+``` """, attrs = { "srcs": attr.label_list( allow_files = True, doc = """ The list of input files. -

- This attribute should be used to list shell script source files that belong to - this library. Scripts can load other scripts using the shell's source - or . command. -

+ +This attribute should be used to list shell script source files that belong to +this library. Scripts can load other scripts using the shell's `source` +or `.` command. """, ), "data": attr.label_list( @@ -104,14 +97,12 @@ The list of input files. allow_rules = ["sh_library"], doc = """ The list of "library" targets to be aggregated into this target. -See general comments about deps -at Typical attributes defined by -most build rules. -

- This attribute should be used to list other sh_library rules that provide - interpreted program source code depended on by the code in srcs. The files - provided by these rules will be present among the runfiles of this target. -

+See general comments about `deps` at +[Typical attributes defined by most build rules](https://bazel.build/reference/be/common-definitions#typical.deps). + +This attribute should be used to list other `sh_library` rules that provide +interpreted program source code depended on by the code in `srcs`. The files +provided by these rules will be present among the `runfiles` of this target. """, ), }, diff --git a/shell/private/sh_test.bzl b/shell/private/sh_test.bzl index eaffd9e..5618fbd 100644 --- a/shell/private/sh_test.bzl +++ b/shell/private/sh_test.bzl @@ -21,14 +21,14 @@ visibility("public") sh_test = make_sh_executable_rule( doc = """ -

A sh_test() rule creates a test written as a Bourne shell script.

+A `sh_test()` rule creates a test written as a Bourne shell script. -

See the -attributes common to all test rules (*_test).

+See the +[attributes common to all test rules (*_test)](https://bazel.build/reference/be/common-definitions#common-attributes-tests). -

Examples

+#### Examples -
+```
 sh_test(
     name = "foo_integration_test",
     size = "small",
@@ -36,7 +36,7 @@ sh_test(
     deps = [":foo_sh_lib"],
     data = glob(["testdata/*.txt"]),
 )
-
+``` """, test = True, fragments = ["coverage"],