diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index fc40687..31934d2 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -96,4 +96,18 @@ tasks:
- "--test_env=LOCALAPPDATA"
- "--test_tag_filters=-no_windows"
+ ubuntu1804_last_green_bzlmod:
+ name: "Last Green Bazel (with bzlmod)"
+ platform: ubuntu1804
+ bazel: last_green
+ build_targets:
+ - "//..."
+ test_targets:
+ - "//..."
+ build_flags:
+ - "--experimental_enable_bzlmod"
+ test_flags:
+ - "--experimental_enable_bzlmod"
+ - "--test_env=PATH"
+
buildifier: latest
diff --git a/BUILD b/BUILD
index fd7798b..8425403 100644
--- a/BUILD
+++ b/BUILD
@@ -7,7 +7,10 @@ package(default_visibility = ["//visibility:public"])
# buildifier: disable=skylark-comment
# gazelle:exclude skylark_library.bzl
-exports_files(["LICENSE"])
+exports_files([
+ "LICENSE",
+ "MODULE.bazel",
+])
filegroup(
name = "test_deps",
@@ -69,6 +72,7 @@ filegroup(
"BUILD",
"CODEOWNERS",
"CONTRIBUTORS",
+ "WORKSPACE.bzlmod",
"//lib:distribution",
"//rules:distribution",
"//rules/private:distribution",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4567ed3..ef9c469 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,26 @@
+Release 1.3.0
+
+**New Features**
+- Added `dicts.omit` and `dicts.pick` (#304)
+- Added `expand_template` rule (#330)
+- Added `subpackages` module (#348)
+- Added `copy_directory` rule (#366)
+- Added `bzlmod` support (#385)
+
+**Incompatible Changes**
+- `native_binary` and `native_test` now use symlinks instead of copying, if
+ the OS supports it (#340)
+- `native_binary` and `native_test` now build in target configuration instead
+ of host configuration (#341)
+- `copy_file` no longer adds non-executables to `default_runfiles` (#326)
+
+**Contributors**
+
+Alex Eagle, Alexandre Rostovtsev, Barry McNamara, Derek Cormier, Fabian
+Meumertzheim, Geoffrey Martin-Noble, hchsiao, Kevin Kres, nickgooding,
+Vertexwahn, Vinh Tran
+
+
Release 1.2.1
Bugfix release: fixes build failure with --incompatible_disallow_empty_glob
diff --git a/MODULE.bazel b/MODULE.bazel
new file mode 100644
index 0000000..698c698
--- /dev/null
+++ b/MODULE.bazel
@@ -0,0 +1,33 @@
+module(
+ name = "bazel_skylib",
+ compatibility_level = 1,
+ version = "1.3.0",
+)
+
+register_toolchains(
+ "//toolchains/unittest:cmd_toolchain",
+ "//toolchains/unittest:bash_toolchain",
+)
+
+bazel_dep(name = "platforms", version = "0.0.4")
+
+### INTERNAL ONLY - lines after this are not included in the release packaging.
+
+# Gazelle extension is experimental
+bazel_dep(name = "rules_go", repo_name = "io_bazel_rules_go", version = "0.33.0")
+bazel_dep(name = "gazelle", repo_name = "bazel_gazelle", version = "0.26.0")
+
+go_deps = use_extension("@bazel_gazelle//:extensions.bzl", "go_deps")
+
+go_deps.module(
+ path = "github.com/bazelbuild/buildtools",
+ sum = "h1:fmdo+fvvWlhldUcqkhAMpKndSxMN3vH5l7yow5cEaiQ=",
+ version = "v0.0.0-20220531122519-a43aed7014c8",
+)
+
+use_repo(go_deps, "com_github_bazelbuild_buildtools")
+
+# Build-only / test-only dependencies
+bazel_dep(name = "stardoc", dev_dependency = True, repo_name = "io_bazel_stardoc", version = "0.5.1")
+bazel_dep(name = "rules_pkg", dev_dependency = True, version = "0.5.1")
+bazel_dep(name = "rules_cc", dev_dependency = True, version = "0.0.1")
diff --git a/README.md b/README.md
index cd2bc6b..12ef7dc 100644
--- a/README.md
+++ b/README.md
@@ -61,8 +61,14 @@ s = shell.quote(p)
* [analysis_test](docs/analysis_test_doc.md)
* [build_test](docs/build_test_doc.md)
+* [common_settings](docs/common_settings_doc.md)
+* [copy_directory](docs/copy_directory_doc.md)
* [copy_file](docs/copy_file_doc.md)
+* [diff_test](docs/diff_test_doc.md)
* [expand_template](docs/expand_template_doc.md)
+* [native_binary and native_test](docs/native_binary_doc.md)
+* [run_binary](docs/run_binary_doc.md)
+* [select_file](docs/select_file_doc.md)
* [write_file](docs/write_file_doc.md)
## Writing a new module
diff --git a/WORKSPACE b/WORKSPACE
index 00f86ab..6a84653 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -6,10 +6,10 @@ load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
maybe(
name = "io_bazel_rules_go",
repo_rule = http_archive,
- sha256 = "2b1641428dff9018f9e85c0384f03ec6c10660d935b750e3fa1492a281a53b0f",
+ sha256 = "685052b498b6ddfe562ca7a97736741d87916fe536623afb7da2824c0211c369",
urls = [
- "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.29.0/rules_go-v0.29.0.zip",
- "https://github.com/bazelbuild/rules_go/releases/download/v0.29.0/rules_go-v0.29.0.zip",
+ "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip",
+ "https://github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip",
],
)
@@ -26,10 +26,10 @@ go_register_toolchains(version = "1.17.1")
maybe(
http_archive,
name = "io_bazel_stardoc",
- sha256 = "c9794dcc8026a30ff67cf7cf91ebe245ca294b20b071845d12c192afe243ad72",
+ sha256 = "aa814dae0ac400bbab2e8881f9915c6f47c49664bf087c409a15f90438d2c23e",
urls = [
- "https://mirror.bazel.build/github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz",
- "https://github.com/bazelbuild/stardoc/releases/download/0.5.0/stardoc-0.5.0.tar.gz",
+ "https://mirror.bazel.build/github.com/bazelbuild/stardoc/releases/download/0.5.1/stardoc-0.5.1.tar.gz",
+ "https://github.com/bazelbuild/stardoc/releases/download/0.5.1/stardoc-0.5.1.tar.gz",
],
)
diff --git a/WORKSPACE.bzlmod b/WORKSPACE.bzlmod
new file mode 100644
index 0000000..5a16370
--- /dev/null
+++ b/WORKSPACE.bzlmod
@@ -0,0 +1,2 @@
+# Workaround so that targets prefixed with @bazel_skylib still work
+workspace(name = "bazel_skylib")
diff --git a/distribution/BUILD b/distribution/BUILD
index 8a9b1e7..326cee7 100644
--- a/distribution/BUILD
+++ b/distribution/BUILD
@@ -6,10 +6,20 @@ package(
default_visibility = ["//visibility:private"],
)
+genrule(
+ name = "distro_module_bazel",
+ srcs = ["//:MODULE.bazel"],
+ outs = ["MODULE.bazel"],
+ cmd = "sed -e '/### INTERNAL ONLY/,$$d' $(location //:MODULE.bazel) >$@",
+)
+
# Build the artifact to put on the github release page.
pkg_tar(
name = "bazel-skylib-%s" % version,
- srcs = ["//:distribution"],
+ srcs = [
+ "distro_module_bazel",
+ "//:distribution",
+ ],
extension = "tar.gz",
mode = "0644",
# Make it owned by root so it does not have the uid of the CI robot.
diff --git a/docs/BUILD b/docs/BUILD
index 5a55308..ddff1b2 100644
--- a/docs/BUILD
+++ b/docs/BUILD
@@ -3,21 +3,25 @@ load("//docs/private:stardoc_with_diff_test.bzl", "stardoc_with_diff_test", "upd
licenses(["notice"])
stardoc_with_diff_test(
+ name = "analysis_test",
bzl_library_target = "//rules:analysis_test",
out_label = "//docs:analysis_test_doc.md",
)
stardoc_with_diff_test(
+ name = "build_test",
bzl_library_target = "//rules:build_test",
out_label = "//docs:build_test_doc.md",
)
stardoc_with_diff_test(
+ name = "collections",
bzl_library_target = "//lib:collections",
out_label = "//docs:collections_doc.md",
)
stardoc_with_diff_test(
+ name = "common_settings",
bzl_library_target = "//rules:common_settings",
out_label = "//docs:common_settings_doc.md",
)
@@ -28,91 +32,115 @@ stardoc_with_diff_test(
)
stardoc_with_diff_test(
+ name = "copy_directory",
bzl_library_target = "//rules:copy_directory",
out_label = "//docs:copy_directory_doc.md",
)
stardoc_with_diff_test(
+ name = "copy_file",
bzl_library_target = "//rules:copy_file",
out_label = "//docs:copy_file_doc.md",
)
stardoc_with_diff_test(
+ name = "dicts",
bzl_library_target = "//lib:dicts",
out_label = "//docs:dicts_doc.md",
)
stardoc_with_diff_test(
+ name = "diff_test",
bzl_library_target = "//rules:diff_test",
out_label = "//docs:diff_test_doc.md",
)
stardoc_with_diff_test(
+ name = "expand_template",
bzl_library_target = "//rules:expand_template",
out_label = "//docs:expand_template_doc.md",
)
stardoc_with_diff_test(
+ name = "native_binary",
bzl_library_target = "//rules:native_binary",
out_label = "//docs:native_binary_doc.md",
)
stardoc_with_diff_test(
+ name = "new_sets",
bzl_library_target = "//lib:new_sets",
out_label = "//docs:new_sets_doc.md",
)
stardoc_with_diff_test(
+ name = "partial",
bzl_library_target = "//lib:partial",
out_label = "//docs:partial_doc.md",
)
stardoc_with_diff_test(
+ name = "paths",
bzl_library_target = "//lib:paths",
out_label = "//docs:paths_doc.md",
)
stardoc_with_diff_test(
+ name = "run_binary",
bzl_library_target = "//rules:run_binary",
out_label = "//docs:run_binary_doc.md",
)
stardoc_with_diff_test(
+ name = "selects",
bzl_library_target = "//lib:selects",
out_label = "//docs:selects_doc.md",
)
stardoc_with_diff_test(
+ name = "select_file",
+ bzl_library_target = "//rules:select_file",
+ out_label = "//docs:select_file_doc.md",
+)
+
+stardoc_with_diff_test(
+ name = "shell",
bzl_library_target = "//lib:shell",
out_label = "//docs:shell_doc.md",
)
stardoc_with_diff_test(
+ name = "structs",
bzl_library_target = "//lib:structs",
out_label = "//docs:structs_doc.md",
)
stardoc_with_diff_test(
+ name = "subpackages",
bzl_library_target = "//lib:subpackages",
out_label = "//docs:subpackages_doc.md",
)
stardoc_with_diff_test(
+ name = "types",
bzl_library_target = "//lib:types",
out_label = "//docs:types_doc.md",
)
stardoc_with_diff_test(
+ name = "unittest",
bzl_library_target = "//lib:unittest",
out_label = "//docs:unittest_doc.md",
)
stardoc_with_diff_test(
+ name = "versions",
bzl_library_target = "//lib:versions",
out_label = "//docs:versions_doc.md",
)
stardoc_with_diff_test(
+ name = "write_file",
bzl_library_target = "//rules:write_file",
out_label = "//docs:write_file_doc.md",
)
diff --git a/docs/analysis_test_doc.md b/docs/analysis_test_doc.md
index 1a564ae..94f79bc 100755
--- a/docs/analysis_test_doc.md
+++ b/docs/analysis_test_doc.md
@@ -2,7 +2,7 @@
A test verifying other targets can be successfully analyzed as part of a `bazel test`
-
+
## analysis_test
diff --git a/docs/build_test_doc.md b/docs/build_test_doc.md
index 332dc58..d547406 100755
--- a/docs/build_test_doc.md
+++ b/docs/build_test_doc.md
@@ -2,7 +2,7 @@
A test verifying other targets build as part of a `bazel test`
-
+
## build_test
@@ -36,6 +36,6 @@ Typical usage:
| :------------- | :------------- | :------------- |
| name | The name of the test rule. | none |
| targets | A list of targets to ensure build. | none |
-| kwargs | The <a href="https://docs.bazel.build/versions/main/be/common-definitions.html#common-attributes-tests">common attributes for tests</a>. | none |
+| kwargs | The <a href="https://bazel.build/reference/be/common-definitions#common-attributes-tests">common attributes for tests</a>. | none |
diff --git a/docs/collections_doc.md b/docs/collections_doc.md
index 1138850..cd9db8b 100755
--- a/docs/collections_doc.md
+++ b/docs/collections_doc.md
@@ -2,7 +2,7 @@
Skylib module containing functions that operate on collections.
-
+
## collections.after_each
@@ -25,7 +25,7 @@ Inserts `separator` after each item in `iterable`.
A new list with `separator` after each item in `iterable`.
-
+
## collections.before_each
@@ -48,7 +48,7 @@ Inserts `separator` before each item in `iterable`.
A new list with `separator` before each item in `iterable`.
-
+
## collections.uniq
diff --git a/docs/common_settings_doc.md b/docs/common_settings_doc.md
index 736e48c..4dda47c 100755
--- a/docs/common_settings_doc.md
+++ b/docs/common_settings_doc.md
@@ -6,10 +6,10 @@ These rules return a BuildSettingInfo with the value of the build setting.
For label-typed settings, use the native label_flag and label_setting rules.
More documentation on how to use build settings at
-https://docs.bazel.build/versions/main/skylark/config.html#user-defined-build-settings
+https://bazel.build/extending/config#user-defined-build-settings
-
+
## bool_flag
@@ -27,7 +27,7 @@ A bool-typed build setting that can be set on the command line
| name | A unique name for this target. | Name | required | |
-
+
## bool_setting
@@ -45,7 +45,7 @@ A bool-typed build setting that cannot be set on the command line
| name | A unique name for this target. | Name | required | |
-
+
## int_flag
@@ -63,7 +63,7 @@ An int-typed build setting that can be set on the command line
| name | A unique name for this target. | Name | required | |
-
+
## int_setting
@@ -81,7 +81,7 @@ An int-typed build setting that cannot be set on the command line
| name | A unique name for this target. | Name | required | |
-
+
## string_flag
@@ -100,7 +100,7 @@ A string-typed build setting that can be set on the command line
| values | The list of allowed values for this setting. An error is raised if any other value is given. | List of strings | optional | [] |
-
+
## string_list_flag
@@ -118,7 +118,7 @@ A string list-typed build setting that can be set on the command line
| name | A unique name for this target. | Name | required | |
-
+
## string_list_setting
@@ -136,7 +136,7 @@ A string list-typed build setting that cannot be set on the command line
| name | A unique name for this target. | Name | required | |
-
+
## string_setting
@@ -155,7 +155,7 @@ A string-typed build setting that cannot be set on the command line
| values | The list of allowed values for this setting. An error is raised if any other value is given. | List of strings | optional | [] |
-
+
## BuildSettingInfo
diff --git a/docs/copy_directory_doc.md b/docs/copy_directory_doc.md
index a0fbc9d..1177d20 100755
--- a/docs/copy_directory_doc.md
+++ b/docs/copy_directory_doc.md
@@ -6,7 +6,7 @@ The rule uses a Bash command on Linux/macOS/non-Windows, and a cmd.exe command
on Windows (no Bash is required).
-
+
## copy_directory
@@ -36,7 +36,7 @@ for more context.
| kwargs | further keyword arguments, e.g. visibility
| none |
-
+
## copy_directory_action
diff --git a/docs/copy_file_doc.md b/docs/copy_file_doc.md
index 47a1244..ed297a6 100755
--- a/docs/copy_file_doc.md
+++ b/docs/copy_file_doc.md
@@ -9,7 +9,7 @@ The rule uses a Bash command on Linux/macOS/non-Windows, and a cmd.exe command
on Windows (no Bash is required).
-
+
## copy_file
diff --git a/docs/dicts_doc.md b/docs/dicts_doc.md
index 9010392..2360325 100755
--- a/docs/dicts_doc.md
+++ b/docs/dicts_doc.md
@@ -2,7 +2,7 @@
Skylib module containing functions that operate on dictionaries.
-
+
## dicts.add
@@ -34,7 +34,7 @@ dictionary, and the sum of a single dictionary is a copy of itself.
A new `dict` that has all the entries of the given dictionaries.
-
+
## dicts.omit
@@ -57,7 +57,7 @@ Returns a new `dict` that has all the entries of `dictionary` with keys not in `
A new `dict` that has all the entries of `dictionary` with keys not in `keys`.
-
+
## dicts.pick
diff --git a/docs/diff_test_doc.md b/docs/diff_test_doc.md
index 0271f4d..4fc2416 100755
--- a/docs/diff_test_doc.md
+++ b/docs/diff_test_doc.md
@@ -6,7 +6,7 @@ The rule uses a Bash command (diff) on Linux/macOS/non-Windows, and a cmd.exe
command (fc.exe) on Windows (no Bash is required).
-
+
## diff_test
@@ -28,6 +28,6 @@ The test succeeds if the files' contents match.
| file1 | Label of the file to compare to <code>file2</code>. | none |
| file2 | Label of the file to compare to <code>file1</code>. | none |
| failure_message | Additional message to log if the files' contents do not match. | None
|
-| kwargs | The <a href="https://docs.bazel.build/versions/main/be/common-definitions.html#common-attributes-tests">common attributes for tests</a>. | none |
+| kwargs | The <a href="https://bazel.build/reference/be/common-definitions#common-attributes-tests">common attributes for tests</a>. | none |
diff --git a/docs/expand_template_doc.md b/docs/expand_template_doc.md
index b370135..1132da6 100755
--- a/docs/expand_template_doc.md
+++ b/docs/expand_template_doc.md
@@ -3,7 +3,7 @@
A rule that performes template expansion.
-
+
## expand_template
diff --git a/docs/maintainers_guide.md b/docs/maintainers_guide.md
index 5f496f9..5339b6a 100644
--- a/docs/maintainers_guide.md
+++ b/docs/maintainers_guide.md
@@ -72,7 +72,8 @@ Name 1, Name 2, Name 3 (alphabetically from `git log`)
--------------------------------------------------------------------------------
-2. Bump `version` in version.bzl to the new version.
+2. Bump `version` in version.bzl *and* MODULE.bazel to the new version.
+ TODO(#386): add a test to make sure the two versions are in sync.
3. Ensure that the commits for steps 1 and 2 have been merged. All further
steps must be performed on a single, known-good git commit.
4. `bazel build //distribution:bazel-skylib-$VERSION.tar.gz`
@@ -81,7 +82,7 @@ Name 1, Name 2, Name 3 (alphabetically from `git log`)
can obtain them via `gcloud init`):
```
-gsutil cp bazel-bin/distro/bazel-skylib-$VERSION.tar.gz gs://bazel-mirror/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-$VERSION.tar.gz
+gsutil cp bazel-bin/distribution/bazel-skylib-$VERSION.tar.gz gs://bazel-mirror/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-$VERSION.tar.gz
gsutil setmeta -h "Cache-Control: public, max-age=31536000" "gs://bazel-mirror/github.com/bazelbuild/bazel-skylib/releases/download/$VERSION/bazel-skylib-$VERSION.tar.gz"
```
diff --git a/docs/native_binary_doc.md b/docs/native_binary_doc.md
index a9c476d..b512b25 100755
--- a/docs/native_binary_doc.md
+++ b/docs/native_binary_doc.md
@@ -8,7 +8,7 @@ do, but they run the wrapped binary directly, instead of through Bash, so they
don't depend on Bash and work with --shell_executable="".
-
+
## native_binary
@@ -29,12 +29,12 @@ in genrule.tools for example. You can also augment the binary with runfiles.
| Name | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name | A unique name for this target. | Name | required | |
-| data | data dependencies. See https://docs.bazel.build/versions/main/be/common-definitions.html#typical.data | List of labels | optional | [] |
+| data | data dependencies. See https://bazel.build/reference/be/common-definitions#typical.data | List of labels | optional | [] |
| out | An output name for the copy of the binary | String | required | |
| src | path of the pre-built executable | Label | required | |
-
+
## native_test
@@ -55,7 +55,7 @@ the binary with runfiles.
| Name | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name | A unique name for this target. | Name | required | |
-| data | data dependencies. See https://docs.bazel.build/versions/main/be/common-definitions.html#typical.data | List of labels | optional | [] |
+| data | data dependencies. See https://bazel.build/reference/be/common-definitions#typical.data | List of labels | optional | [] |
| out | An output name for the copy of the binary | String | required | |
| src | path of the pre-built executable | Label | required | |
diff --git a/docs/new_sets_doc.md b/docs/new_sets_doc.md
index e34107f..4f7fde2 100755
--- a/docs/new_sets_doc.md
+++ b/docs/new_sets_doc.md
@@ -11,7 +11,7 @@ Skylib module containing common hash-set algorithms.
`types.is_set()` method in types.bzl.
-
+
## sets.make
@@ -36,7 +36,7 @@ All elements must be hashable.
A set containing the passed in values.
-
+
## sets.copy
@@ -58,7 +58,7 @@ Creates a new set from another set.
A new set containing the same elements as `s`.
-
+
## sets.to_list
@@ -80,7 +80,7 @@ Creates a list from the values in the set.
A list of values inserted into the set.
-
+
## sets.insert
@@ -106,7 +106,7 @@ Element must be hashable. This mutates the original set.
The set `s` with `e` included.
-
+
## sets.contains
@@ -129,7 +129,7 @@ Checks for the existence of an element in a set.
True if the element exists in the set, False if the element does not.
-
+
## sets.is_equal
@@ -152,7 +152,7 @@ Returns whether two sets are equal.
True if `a` is equal to `b`, False otherwise.
-
+
## sets.is_subset
@@ -175,7 +175,7 @@ Returns whether `a` is a subset of `b`.
True if `a` is a subset of `b`, False otherwise.
-
+
## sets.disjoint
@@ -201,7 +201,7 @@ Two sets are disjoint if they have no elements in common.
True if `a` and `b` are disjoint, False otherwise.
-
+
## sets.intersection
@@ -224,7 +224,7 @@ Returns the intersection of two sets.
A set containing the elements that are in both `a` and `b`.
-
+
## sets.union
@@ -246,7 +246,7 @@ Returns the union of several sets.
The set union of all sets in `*args`.
-
+
## sets.difference
@@ -269,7 +269,7 @@ Returns the elements in `a` that are not in `b`.
A set containing the elements that are in `a` but not in `b`.
-
+
## sets.length
@@ -291,7 +291,7 @@ Returns the number of elements in a set.
An integer representing the number of elements in the set.
-
+
## sets.remove
@@ -317,7 +317,7 @@ Element must be hashable. This mutates the original set.
The set `s` with `e` removed.
-
+
## sets.repr
@@ -339,7 +339,7 @@ Returns a string value representing the set.
A string representing the set.
-
+
## sets.str
diff --git a/docs/partial_doc.md b/docs/partial_doc.md
index d772ec8..97d4094 100755
--- a/docs/partial_doc.md
+++ b/docs/partial_doc.md
@@ -7,7 +7,7 @@ Partial function objects allow some parameters are bound before the call.
Similar to https://docs.python.org/3/library/functools.html#functools.partial.
-
+
## partial.make
@@ -123,7 +123,7 @@ partial.call(func, x=2)
A new `partial` that can be called using `call`
-
+
## partial.call
@@ -147,7 +147,7 @@ Calls a partial created using `make`.
Whatever the function in the partial returns.
-
+
## partial.is_instance
diff --git a/docs/paths_doc.md b/docs/paths_doc.md
index e0d8116..e9d619d 100755
--- a/docs/paths_doc.md
+++ b/docs/paths_doc.md
@@ -7,7 +7,7 @@ path separators (forward slash, "/"); they do not handle Windows-style paths
with backslash separators or drive letters.
-
+
## paths.basename
@@ -35,7 +35,7 @@ the final slash).
The basename of the path, which includes the extension.
-
+
## paths.dirname
@@ -62,7 +62,7 @@ included, unless omitting them would make the dirname empty.
The dirname of the path.
-
+
## paths.is_absolute
@@ -84,7 +84,7 @@ Returns `True` if `path` is an absolute path.
`True` if `path` is an absolute path.
-
+
## paths.join
@@ -116,7 +116,7 @@ If any component is an absolute path, all previous components are discarded.
A string containing the joined paths.
-
+
## paths.normalize
@@ -153,7 +153,7 @@ POSIX platforms; specifically:
The normalized path.
-
+
## paths.relativize
@@ -185,7 +185,7 @@ the path both start with the same initial parent references.
The portion of `path` that is relative to `start`.
-
+
## paths.replace_extension
@@ -211,7 +211,7 @@ If the path has no extension, the new extension is added to it.
The path with the extension replaced (or added, if it did not have one).
-
+
## paths.split_extension
diff --git a/docs/private/stardoc_with_diff_test.bzl b/docs/private/stardoc_with_diff_test.bzl
index dc23deb..9fe425b 100644
--- a/docs/private/stardoc_with_diff_test.bzl
+++ b/docs/private/stardoc_with_diff_test.bzl
@@ -1,3 +1,17 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
"""Helpers for keeping stardoc documentation up-to-date.
These are currently a private API in bazel-skylib.
@@ -14,6 +28,7 @@ load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
def stardoc_with_diff_test(
+ name,
bzl_library_target,
out_label):
"""Creates a stardoc target coupled with a `diff_test` for a given `bzl_library`.
@@ -21,15 +36,15 @@ def stardoc_with_diff_test(
This is helpful for minimizing boilerplate in repos wih lots of stardoc targets.
Args:
+ name: the stardoc target name
bzl_library_target: the label of the `bzl_library` target to generate documentation for
out_label: the label of the output MD file
"""
-
out_file = out_label.replace("//", "").replace(":", "/")
# Generate MD from .bzl
stardoc(
- name = out_file.replace("/", "_").replace(".md", "-docgen"),
+ name = name,
out = out_file.replace(".md", "-docgen.md"),
input = bzl_library_target + ".bzl",
deps = [bzl_library_target],
diff --git a/docs/run_binary_doc.md b/docs/run_binary_doc.md
index 96bada5..8e4491d 100755
--- a/docs/run_binary_doc.md
+++ b/docs/run_binary_doc.md
@@ -6,7 +6,7 @@ run_binary() build rule implementation.
Runs a binary as a build action. This rule does not require Bash (unlike native.genrule()).
-
+
## run_binary
@@ -22,8 +22,8 @@ Runs a binary as a build action.
This rule does not require Bash (unlik
| Name | Description | Type | Mandatory | Default |
| :------------- | :------------- | :------------- | :------------- | :------------- |
| name | A unique name for this target. | Name | required | |
-| args | Command line arguments of the binary.<br/><br/>Subject to<code><a href="https://docs.bazel.build/versions/main/be/make-variables.html#location">$(location)</a></code> expansion. | List of strings | optional | [] |
-| env | Environment variables of the action.<br/><br/>Subject to <code><a href="https://docs.bazel.build/versions/main/be/make-variables.html#location">$(location)</a></code> expansion. | Dictionary: String -> String | optional | {} |
+| args | Command line arguments of the binary.<br/><br/>Subject to<code><a href="https://bazel.build/reference/be/make-variables#predefined_label_variables">$(location)</a></code> expansion. | List of strings | optional | [] |
+| env | Environment variables of the action.<br/><br/>Subject to <code><a href="https://bazel.build/reference/be/make-variables#predefined_label_variables">$(location)</a></code> expansion. | Dictionary: String -> String | optional | {} |
| outs | Output files generated by the action.<br/><br/>These labels are available for <code>$(location)</code> expansion in <code>args</code> and <code>env</code>. | List of labels | required | |
| srcs | Additional inputs of the action.<br/><br/>These labels are available for <code>$(location)</code> expansion in <code>args</code> and <code>env</code>. | List of labels | optional | [] |
| tool | The tool to run in the action.<br/><br/>Must be the label of a *_binary rule, of a rule that generates an executable file, or of a file that can be executed as a subprocess (e.g. an .exe or .bat file on Windows or a binary with executable permission on Linux). This label is available for <code>$(location)</code> expansion in <code>args</code> and <code>env</code>. | Label | required | |
diff --git a/docs/select_file_doc.md b/docs/select_file_doc.md
new file mode 100755
index 0000000..667f519
--- /dev/null
+++ b/docs/select_file_doc.md
@@ -0,0 +1,28 @@
+
+
+
+select_file() build rule implementation.
+
+Selects a single file from the outputs of a target by given relative path.
+
+
+
+
+## select_file
+
+
+select_file(name, srcs, subpath) ++ +Selects a single file from the outputs of a target by given relative path + +**ATTRIBUTES** + + +| Name | Description | Type | Mandatory | Default | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | A unique name for this target. | Name | required | | +| srcs | The target producing the file among other outputs | Label | required | | +| subpath | Relative path to the file | String | required | | + + diff --git a/docs/selects_doc.md b/docs/selects_doc.md index 8bfd964..8e2f31b 100755 --- a/docs/selects_doc.md +++ b/docs/selects_doc.md @@ -2,7 +2,7 @@ Skylib module containing convenience interfaces for select(). - + ## selects.with_or @@ -48,7 +48,7 @@ to ``` - + ## selects.with_or_dict @@ -74,7 +74,7 @@ macros. A dictionary usable by a native `select()`. - + ## selects.config_setting_group diff --git a/docs/shell_doc.md b/docs/shell_doc.md index 0759434..bd559b9 100755 --- a/docs/shell_doc.md +++ b/docs/shell_doc.md @@ -2,7 +2,7 @@ Skylib module containing shell utility functions. - + ## shell.array_literal @@ -33,7 +33,7 @@ A string that represents the sequence as a shell array; that is, parentheses containing the quoted elements. - + ## shell.quote diff --git a/docs/structs_doc.md b/docs/structs_doc.md index a409d86..667aa46 100755 --- a/docs/structs_doc.md +++ b/docs/structs_doc.md @@ -2,7 +2,7 @@ Skylib module containing functions that operate on structs. - + ## structs.to_dict diff --git a/docs/subpackages_doc.md b/docs/subpackages_doc.md index b2363cd..8a0956f 100755 --- a/docs/subpackages_doc.md +++ b/docs/subpackages_doc.md @@ -3,7 +3,7 @@ Skylib module containing common functions for working with native.subpackages() - + ## subpackages.all @@ -46,7 +46,7 @@ A mutable sorted list containing all sub-packages of the current Bazel package. - + ## subpackages.exists @@ -82,7 +82,7 @@ NOTE: fail()s if native.subpackages() is not supported in the current Bazel vers True if 'relative_path' is a subpackage of the current package. - + ## subpackages.supported diff --git a/docs/types_doc.md b/docs/types_doc.md index 7ab0a6c..bdc9cba 100755 --- a/docs/types_doc.md +++ b/docs/types_doc.md @@ -2,7 +2,7 @@ Skylib module containing functions checking types. - + ## types.is_list @@ -24,7 +24,7 @@ Returns True if v is an instance of a list. True if v is an instance of a list, False otherwise. - + ## types.is_string @@ -46,7 +46,7 @@ Returns True if v is an instance of a string. True if v is an instance of a string, False otherwise. - + ## types.is_bool @@ -68,7 +68,7 @@ Returns True if v is an instance of a bool. True if v is an instance of a bool, False otherwise. - + ## types.is_none @@ -90,7 +90,7 @@ Returns True if v has the type of None. True if v is None, False otherwise. - + ## types.is_int @@ -112,7 +112,7 @@ Returns True if v is an instance of a signed integer. True if v is an instance of a signed integer, False otherwise. - + ## types.is_tuple @@ -134,7 +134,7 @@ Returns True if v is an instance of a tuple. True if v is an instance of a tuple, False otherwise. - + ## types.is_dict @@ -156,7 +156,7 @@ Returns True if v is an instance of a dict. True if v is an instance of a dict, False otherwise. - + ## types.is_function @@ -178,7 +178,7 @@ Returns True if v is an instance of a function. True if v is an instance of a function, False otherwise. - + ## types.is_depset @@ -200,7 +200,7 @@ Returns True if v is an instance of a `depset`. True if v is an instance of a `depset`, False otherwise. - + ## types.is_set diff --git a/docs/unittest_doc.md b/docs/unittest_doc.md index a8e4a5a..a199a2e 100755 --- a/docs/unittest_doc.md +++ b/docs/unittest_doc.md @@ -16,7 +16,7 @@ See https://bazel.build/extending/concepts for background about macros, rules, and the different phases of a build. - + ## unittest_toolchain @@ -41,7 +41,7 @@ unittest_toolchain(name, success_templ | Test script generated when the test passes. Should exit with status 0. | String | required | | - + ## analysistest.make @@ -95,7 +95,7 @@ A rule definition that should be stored in a global whose name ends in `_test`. - + ## analysistest.begin @@ -125,7 +125,7 @@ A test environment struct that must be passed to assertions and finally to struct as it may change. - + ## analysistest.end @@ -151,7 +151,7 @@ that the results are reported. A list of providers needed to automatically register the analysis test result. - + ## analysistest.fail @@ -170,7 +170,7 @@ Unconditionally causes the current test to fail. | msg | The message to log describing the failure. | none | - + ## analysistest.target_actions @@ -192,7 +192,7 @@ Returns a list of actions registered by the target under test. A list of actions registered by the target under test - + ## analysistest.target_bin_dir_path @@ -214,7 +214,7 @@ Returns ctx.bin_dir.path for the target under test. Output bin dir path string. - + ## analysistest.target_under_test @@ -236,7 +236,7 @@ Returns the target under test. The target under test. - + ## asserts.expect_failure @@ -259,7 +259,7 @@ This requires that the analysis test is created with `analysistest.make()` and | expected_failure_msg | The error message to expect as a result of analysis failures. |
""
|
-
+
## asserts.equals
@@ -280,7 +280,7 @@ Asserts that the given `expected` and `actual` values are equal.
| msg | An optional message that will be printed that describes the failure. If omitted, a default will be used. | None
|
-
+
## asserts.false
@@ -300,7 +300,7 @@ Asserts that the given `condition` is false.
| msg | An optional message that will be printed that describes the failure. If omitted, a default will be used. | "Expected condition to be false, but was true."
|
-
+
## asserts.set_equals
@@ -321,7 +321,7 @@ Asserts that the given `expected` and `actual` sets are equal.
| msg | An optional message that will be printed that describes the failure. If omitted, a default will be used. | None
|
-
+
## asserts.new_set_equals
@@ -342,7 +342,7 @@ Asserts that the given `expected` and `actual` sets are equal.
| msg | An optional message that will be printed that describes the failure. If omitted, a default will be used. | None
|
-
+
## asserts.true
@@ -362,7 +362,7 @@ Asserts that the given `condition` is true.
| msg | An optional message that will be printed that describes the failure. If omitted, a default will be used. | "Expected condition to be true, but was false."
|
-
+
## loadingtest.make
@@ -384,7 +384,7 @@ Creates a loading phase test environment and test_suite.
loading phase environment passed to other loadingtest functions
-
+
## loadingtest.equals
@@ -409,7 +409,7 @@ Creates a test case for asserting state at LOADING phase.
None, creates test case
-
+
## register_unittest_toolchains
@@ -421,7 +421,7 @@ Registers the toolchains for unittest users.
-
+
## unittest.make
@@ -469,7 +469,7 @@ A rule definition that should be stored in a global whose name ends in
`_test`.
-
+
## unittest.suite
@@ -525,7 +525,7 @@ name each target.
| test_rules | A list of test rules defines by unittest.test
. | none |
-
+
## unittest.begin
@@ -555,7 +555,7 @@ A test environment struct that must be passed to assertions and finally to
struct as it may change.
-
+
## unittest.end
@@ -581,7 +581,7 @@ that the results are reported.
A list of providers needed to automatically register the test result.
-
+
## unittest.fail
diff --git a/docs/versions_doc.md b/docs/versions_doc.md
index 83ee7a7..ed968c7 100755
--- a/docs/versions_doc.md
+++ b/docs/versions_doc.md
@@ -2,7 +2,7 @@
Skylib module containing functions for checking Bazel versions.
-
+
## versions.get
@@ -14,7 +14,7 @@ Returns the current Bazel version
-
+
## versions.parse
@@ -39,7 +39,7 @@ int tuples can be compared directly using binary operators (<, >).
An int 3-tuple of a (major, minor, patch) version.
-
+
## versions.check
@@ -59,7 +59,7 @@ Check that the version of Bazel is valid within the specified range.
| bazel_version | the version of Bazel to check. Used for testing, defaults to native.bazel_version | None
|
-
+
## versions.is_at_most
@@ -82,7 +82,7 @@ Check that a version is lower or equals to a threshold.
True if version <= threshold.
-
+
## versions.is_at_least
diff --git a/docs/write_file_doc.md b/docs/write_file_doc.md
index 8f39376..456a067 100755
--- a/docs/write_file_doc.md
+++ b/docs/write_file_doc.md
@@ -10,7 +10,7 @@ file. Instead they use Starlark's built-in file writing action
(ctx.actions.write).
-
+
## write_file
diff --git a/rules/build_test.bzl b/rules/build_test.bzl
index 9ec8ab1..682901e 100644
--- a/rules/build_test.bzl
+++ b/rules/build_test.bzl
@@ -63,7 +63,7 @@ def build_test(name, targets, **kwargs):
Args:
name: The name of the test rule.
targets: A list of targets to ensure build.
- **kwargs: The common attributes for tests.
+ **kwargs: The common attributes for tests.
"""
if len(targets) == 0:
fail("targets must be non-empty", "targets")
diff --git a/rules/common_settings.bzl b/rules/common_settings.bzl
index 7f56a7f..eb057cc 100644
--- a/rules/common_settings.bzl
+++ b/rules/common_settings.bzl
@@ -18,7 +18,7 @@ These rules return a BuildSettingInfo with the value of the build setting.
For label-typed settings, use the native label_flag and label_setting rules.
More documentation on how to use build settings at
-https://docs.bazel.build/versions/main/skylark/config.html#user-defined-build-settings
+https://bazel.build/extending/config#user-defined-build-settings
"""
BuildSettingInfo = provider(
@@ -69,13 +69,22 @@ string_list_setting = rule(
doc = "A string list-typed build setting that cannot be set on the command line",
)
+def _no_at_str(label):
+ """Strips any leading '@'s for labels in the main repo, so that the error string is more friendly."""
+ s = str(label)
+ if s.startswith("@@//"):
+ return s[2:]
+ if s.startswith("@//"):
+ return s[1:]
+ return s
+
def _string_impl(ctx):
allowed_values = ctx.attr.values
value = ctx.build_setting_value
if len(allowed_values) == 0 or value in ctx.attr.values:
return BuildSettingInfo(value = value)
else:
- fail("Error setting " + str(ctx.label) + ": invalid value '" + value + "'. Allowed values are " + str(allowed_values))
+ fail("Error setting " + _no_at_str(ctx.label) + ": invalid value '" + value + "'. Allowed values are " + str(allowed_values))
string_flag = rule(
implementation = _string_impl,
diff --git a/rules/diff_test.bzl b/rules/diff_test.bzl
index 25213d6..ee2f589 100644
--- a/rules/diff_test.bzl
+++ b/rules/diff_test.bzl
@@ -164,7 +164,7 @@ def diff_test(name, file1, file2, failure_message = None, **kwargs):
file1: Label of the file to compare to file2
.
file2: Label of the file to compare to file1
.
failure_message: Additional message to log if the files' contents do not match.
- **kwargs: The common attributes for tests.
+ **kwargs: The common attributes for tests.
"""
_diff_test(
name = name,
diff --git a/rules/native_binary.bzl b/rules/native_binary.bzl
index a027fc9..b33347b 100644
--- a/rules/native_binary.bzl
+++ b/rules/native_binary.bzl
@@ -61,7 +61,7 @@ _ATTRS = {
"data": attr.label_list(
allow_files = True,
doc = "data dependencies. See" +
- " https://docs.bazel.build/versions/main/be/common-definitions.html#typical.data",
+ " https://bazel.build/reference/be/common-definitions#typical.data",
),
# "out" is attr.string instead of attr.output, so that it is select()'able.
"out": attr.string(mandatory = True, doc = "An output name for the copy of the binary"),
diff --git a/rules/private/copy_common.bzl b/rules/private/copy_common.bzl
index 5a0bb33..a8f7243 100644
--- a/rules/private/copy_common.bzl
+++ b/rules/private/copy_common.bzl
@@ -22,11 +22,7 @@ COPY_EXECUTION_REQUIREMENTS = {
# ----------------+-----------------------------------------------------------------------------
# no-cache | Results in the action or test never being cached (remotely or locally)
# ----------------+-----------------------------------------------------------------------------
- # local | Precludes the action or test from being remotely cached, remotely executed,
- # | or run inside the sandbox. For genrules and tests, marking the rule with the
- # | local = True attribute has the same effect.
- # ----------------+-----------------------------------------------------------------------------
- # See https://bazel.google.cn/reference/be/common-definitions?hl=en&authuser=0#common-attributes
+ # See https://bazel.build/reference/be/common-definitions#common-attributes
#
# Copying file & directories is entirely IO-bound and there is no point doing this work
# remotely.
@@ -44,11 +40,6 @@ COPY_EXECUTION_REQUIREMENTS = {
# disk cache stores the directory artifact as a single entry, but the slight performance bump
# comes at the cost of heavy disk cache usage, which is an unmanaged directory that grow beyond
# the bounds of the physical disk.
- #
- # Sandboxing for this action is wasteful as well since there is a 1:1 mapping of input
- # file/directory to output file/directory and no room for non-hermetic inputs to sneak in to the
- # input.
"no-remote": "1",
"no-cache": "1",
- "local": "1",
}
diff --git a/rules/run_binary.bzl b/rules/run_binary.bzl
index 47c8bc5..c40c0be 100644
--- a/rules/run_binary.bzl
+++ b/rules/run_binary.bzl
@@ -76,7 +76,7 @@ run_binary = rule(
),
"env": attr.string_dict(
doc = "Environment variables of the action.$(location)
" +
+ " $(location)
" +
" expansion.",
),
"srcs": attr.label_list(
@@ -91,7 +91,7 @@ run_binary = rule(
),
"args": attr.string_list(
doc = "Command line arguments of the binary.$(location)
" +
+ "$(location)
" +
" expansion.",
),
},
diff --git a/rules/select_file.bzl b/rules/select_file.bzl
index f359e43..1b73093 100644
--- a/rules/select_file.bzl
+++ b/rules/select_file.bzl
@@ -15,7 +15,7 @@
"""
select_file() build rule implementation.
-Selects a single file from the outputs of some target by given relative path.
+Selects a single file from the outputs of a target by given relative path.
"""
def _impl(ctx):
@@ -38,8 +38,7 @@ def _impl(ctx):
select_file = rule(
implementation = _impl,
- doc = "Selects a single file from the outputs of some target \
-by given relative path",
+ doc = "Selects a single file from the outputs of a target by given relative path",
attrs = {
"srcs": attr.label(
allow_files = True,
diff --git a/tests/copy_directory/BUILD.bazel b/tests/copy_directory/BUILD.bazel
index 2c72ab9..f766e99 100644
--- a/tests/copy_directory/BUILD.bazel
+++ b/tests/copy_directory/BUILD.bazel
@@ -1,6 +1,7 @@
# This package aids testing the 'copy_directory' rule.
load("//rules:copy_directory.bzl", "copy_directory")
+load(":empty_directory.bzl", "empty_directory")
licenses(["notice"])
@@ -13,10 +14,8 @@ copy_directory(
out = "dir_copy",
)
-genrule(
- name = "empty_directory",
- outs = ["empty_dir"],
- cmd = "mkdir $@",
+empty_directory(
+ name = "empty_dir",
)
copy_directory(
diff --git a/tests/copy_directory/empty_directory.bzl b/tests/copy_directory/empty_directory.bzl
new file mode 100644
index 0000000..92c5a5f
--- /dev/null
+++ b/tests/copy_directory/empty_directory.bzl
@@ -0,0 +1,34 @@
+# Copyright 2022 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Creates an empty directory."""
+
+def _empty_directory_impl(ctx):
+ out = ctx.actions.declare_directory(ctx.attr.name)
+ ctx.actions.run_shell(
+ outputs = [out],
+ command = "mkdir -p $@",
+ arguments = [out.path],
+ mnemonic = "EmptyDirectory",
+ progress_message = "Creating empty directory %s" % out.path,
+ use_default_shell_env = True,
+ execution_requirements = {"no-remote": "1"}, # see rules/private/copy_directory_private.bzl
+ )
+ return [DefaultInfo(files = depset(direct = [out]))]
+
+empty_directory = rule(
+ implementation = _empty_directory_impl,
+ provides = [DefaultInfo],
+ doc = "Creates an empty directory with the same name as the target",
+)
diff --git a/version.bzl b/version.bzl
index 324adb5..70a04d6 100644
--- a/version.bzl
+++ b/version.bzl
@@ -13,4 +13,4 @@
# limitations under the License.
"""The version of bazel-skylib."""
-version = "1.2.1"
+version = "1.3.0"