Skip to content

Releases: aspect-build/rules_py

v0.8.1

01 Oct 23:26
7a9e4b2
Compare
Choose a tag to compare

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.8.1")

And also register a Python toolchain, see rules_python. For example:

# Minimum version needs:
# feat: add interpreter_version_info to py_runtime by @mattem in #1671
bazel_dep(name = "rules_python", dev_dependency = True, version = "0.29.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "5cc40d71b87c0868b5703056cb37db91c27c177b2516490e61bd93f88ad252d3",
    strip_prefix = "rules_py-0.8.1",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.8.1/rules_py-v0.8.1.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")

rules_py_dependencies()

load("@aspect_rules_py//py:toolchains.bzl", "rules_py_toolchains")

rules_py_toolchains()

# "Installation" for rules_python
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

python_register_toolchains(
    name = "python_toolchain",
    python_version = "3.9",
)

py_repositories()

What's Changed

  • chore(deps): update dependency urllib3 to v1.26.19 [security] by @renovate in #352
  • chore(deps): update softprops/action-gh-release action to v2 by @renovate in #322
  • chore(deps): update dependency bazel_gazelle to v0.36.0 by @renovate in #326
  • chore(deps): update dependency aspect_bazel_lib to v1.42.2 by @renovate in #321
  • chore(deps): update dependency typing-extensions to v4.12.2 by @renovate in #327
  • chore(deps): update dependency sqlparse to v0.5.1 [security] by @renovate in #330
  • chore: add smoke test to e2e/use_release by @mattem in #370
  • chore(deps): update dependency certifi to v2024.7.4 [security] by @renovate in #364
  • chore(deps): update dependency django to v4.2.14 [security] by @renovate in #366
  • chore(deps): update dependency django to v4.2.15 [security] by @renovate in #378
  • fix: mark a 'testing only' python toolchain as dev_dep by @alexeagle in #385
  • chore(deps): update dependency aspect_bazel_lib to v1.42.3 by @renovate in #379
  • feat: implement --build_python_zip pex by @thesayyn in #324

Full Changelog: v0.7.4...v0.8.1

v0.8.0

05 Sep 15:51
7a9e4b2
Compare
Choose a tag to compare

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.8.0")

And also register a Python toolchain, see rules_python. For example:

# Minimum version needs:
# feat: add interpreter_version_info to py_runtime by @mattem in #1671
bazel_dep(name = "rules_python", dev_dependency = True, version = "0.29.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "971e48f44e3a71430ddae340c262a71bccc604e4c43c5be827b8bb925ed43d19",
    strip_prefix = "rules_py-0.8.0",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.8.0/rules_py-v0.8.0.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")

rules_py_dependencies()

load("@aspect_rules_py//py:toolchains.bzl", "rules_py_toolchains")

rules_py_toolchains()

# "Installation" for rules_python
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

python_register_toolchains(
    name = "python_toolchain",
    python_version = "3.9",
)

py_repositories()

What's Changed

  • chore(deps): update dependency urllib3 to v1.26.19 [security] by @renovate in #352
  • chore(deps): update softprops/action-gh-release action to v2 by @renovate in #322
  • chore(deps): update dependency bazel_gazelle to v0.36.0 by @renovate in #326
  • chore(deps): update dependency aspect_bazel_lib to v1.42.2 by @renovate in #321
  • chore(deps): update dependency typing-extensions to v4.12.2 by @renovate in #327
  • chore(deps): update dependency sqlparse to v0.5.1 [security] by @renovate in #330
  • chore: add smoke test to e2e/use_release by @mattem in #370
  • chore(deps): update dependency certifi to v2024.7.4 [security] by @renovate in #364
  • chore(deps): update dependency django to v4.2.14 [security] by @renovate in #366
  • chore(deps): update dependency django to v4.2.15 [security] by @renovate in #378
  • fix: mark a 'testing only' python toolchain as dev_dep by @alexeagle in #385
  • chore(deps): update dependency aspect_bazel_lib to v1.42.3 by @renovate in #379
  • feat: implement --build_python_zip pex by @thesayyn in #324

Full Changelog: v0.7.4...v0.8.0

v0.7.4

22 Jul 15:12
90c6e09
Compare
Choose a tag to compare
v0.7.4 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.7.4")

And also register a Python toolchain, see rules_python. For example:

# Minimum version needs:
# feat: add interpreter_version_info to py_runtime by @mattem in #1671
bazel_dep(name = "rules_python", dev_dependency = True, version = "0.29.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "04278ce23cc5c91a24b62ea00ac04c553fe40ca390943acf6684d367a681a871",
    strip_prefix = "rules_py-0.7.4",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.7.4/rules_py-v0.7.4.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")

rules_py_dependencies()

load("@aspect_rules_py//py:toolchains.bzl", "rules_py_toolchains")

rules_py_toolchains()

# "Installation" for rules_python
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

python_register_toolchains(
    name = "python_toolchain",
    python_version = "3.9",
)

py_repositories()

What's Changed

Full Changelog: v0.7.3...v0.7.4

v0.7.3

01 May 00:56
d45e542
Compare
Choose a tag to compare
v0.7.3 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.7.3")

And also register a Python toolchain, see rules_python. For example:

# Minimum version needs:
# feat: add interpreter_version_info to py_runtime by @mattem in #1671
bazel_dep(name = "rules_python", dev_dependency = True, version = "0.29.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "59446563a724b1cb449a604c8fbcd85e18a7001e9bb230ef59d78154886ad8cc",
    strip_prefix = "rules_py-0.7.3",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.7.3/rules_py-v0.7.3.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")

rules_py_dependencies()

load("@aspect_rules_py//py:toolchains.bzl", "rules_py_toolchains")

rules_py_toolchains()

# "Installation" for rules_python
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

python_register_toolchains(
    name = "python_toolchain",
    python_version = "3.9",
)

py_repositories()

What's Changed

  • chore: bump rust to 1.77.2 by @mattem in #337
  • fix: ignore conflicting symlinks at site-packages root on venv creation by @mattem in #336

Full Changelog: v0.7.2...v0.7.3

v0.7.2

26 Apr 04:13
6c9aaca
Compare
Choose a tag to compare
v0.7.2 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.7.2")

And also register a Python toolchain, see rules_python. For example:

# Minimum version needs:
# feat: add interpreter_version_info to py_runtime by @mattem in #1671
bazel_dep(name = "rules_python", dev_dependency = True, version = "0.29.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "959b433fa19238d3d3644be2960c606cea27b83a9ea8a0f1f7bd6d3be4fc53e9",
    strip_prefix = "rules_py-0.7.2",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.7.2/rules_py-v0.7.2.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")

rules_py_dependencies()

load("@aspect_rules_py//py:toolchains.bzl", "rules_py_toolchains")

rules_py_toolchains()

# "Installation" for rules_python
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

python_register_toolchains(
    name = "python_toolchain",
    python_version = "3.9",
)

py_repositories()

What's Changed

  • chore(deps): update dependency rules_python_gazelle_plugin to v0.31.0 by @renovate in #271
  • Remove BASH_BIN in favor of referencing bash via /usr/bin/env by @shinypb in #229
  • chore: flip no legacy external runfiles by @thesayyn in #193
  • renovate: don't update minimum bounds in MODULE.bazel by @alexeagle in #294
  • chore(deps): update actions/github-script action to v7 by @renovate in #296
  • fix: use correct runfiles path for venv import paths by @wade-arista in #299
  • chore: update presubmit.yml by @alexeagle in #293
  • chore: improve error message for py_runtime missing version info by @wade-arista in #301
  • chore(deps): update dependency aspect_bazel_lib to v1.40.3 by @renovate in #304
  • Fix for external deps that use repo root relative imports by @scasagrande in #310
  • fix: use PyInfo from rules_python by @mattem in #311
  • fix: don't allow files in deps attr by @mattem in #318
  • fix: handle a system interpreter path on the toolchain by @mattem in #313
  • site-packages symlink forest in venv by @siddharthab in #275
  • chore(deps): update dependency asgiref to v3.8.1 by @renovate in #319
  • refactor: split toolchains and repositories by @thesayyn in #323

New Contributors

Full Changelog: v0.7.1...v0.7.2

v0.7.1

03 Mar 00:01
9ee2b08
Compare
Choose a tag to compare
v0.7.1 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.7.1")

And also register a Python toolchain, see rules_python. For example:

# Minimum version needs:
# feat: add interpreter_version_info to py_runtime by @mattem in #1671
bazel_dep(name = "rules_python", dev_dependency = True, version = "0.29.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "6b47e3e20afef68c33fb0e103462d6ca35a33423c637429566c412ade555a778",
    strip_prefix = "rules_py-0.7.1",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.7.1/rules_py-v0.7.1.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")

rules_py_dependencies()

# "Installation" for rules_python
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

python_register_toolchains(
    name = "python_toolchain",
    python_version = "3.9",
)

py_repositories()

What's Changed

Full Changelog: v0.7.0...v0.7.1

v0.7.0

02 Mar 17:06
334dd44
Compare
Choose a tag to compare
v0.7.0 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.7.0")

And also register a Python toolchain, see rules_python. For example:

# Minimum version needs:
# feat: add interpreter_version_info to py_runtime by @mattem in #1671
bazel_dep(name = "rules_python", dev_dependency = True, version = "0.29.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "75179b67f8c187916476c7861ff3453b437614b35cd20c763738b643f49e59f7",
    strip_prefix = "rules_py-0.7.0",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.7.0/rules_py-v0.7.0.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")

rules_py_dependencies()

# "Installation" for rules_python
load("@rules_python//python:repositories.bzl", "py_repositories", "python_register_toolchains")

python_register_toolchains(
    name = "python_toolchain",
    python_version = "3.9",
)

py_repositories()

What's Changed

New Contributors

Full Changelog: v0.6.0...v0.7.0

v0.6.0

28 Feb 01:04
9b46190
Compare
Choose a tag to compare
v0.6.0 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.6.0")

And also register a Python toolchain, see rules_python. For example:

bazel_dep(name = "rules_python", dev_dependency = True, version = "0.27.1")

# NB: users need this as well, until a new version of rules_python is released
archive_override(
    module_name = "rules_python",
    urls = "https://github.com/bazelbuild/rules_python/archive/52381415be9d3618130f02a821aef50de1e3af09.tar.gz",
    integrity = "sha256-pYfEFNWqygSEElDYgJsuIeDYn9oll/rZB0GcR+6rirA=",
    strip_prefix = "rules_python-52381415be9d3618130f02a821aef50de1e3af09",
)

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    configure_coverage_tool = True,
    python_version = "3.11",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "d60bb474069d77314532c3dd36ef162ab91ef3fe6e04d60836bd922a08e9fb4b",
    strip_prefix = "rules_py-0.6.0",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.6.0/rules_py-v0.6.0.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")
rules_py_dependencies()

What's Changed

  • fix: install transitive wheels reachable through resolutions by @alexeagle in #230
  • fix: use original interpreter path as 'home' value in pyvenv.cfg by @mattem in #232
  • chore(deps): update dependency bazel to v6.4.0 by @renovate in #224
  • chore(deps): update dependency rules_python to v0.27.1 by @renovate in #211
  • chore: minimal changes required to upgrade to Bazel 7 and bzlmod by @alexeagle in #234
  • fix: handle py_binary#main like rules_python does by @alexeagle in #241
  • fix: py_library add srcs to its runfiles by @alexeagle in #242
  • chore: upgrade rules_python near HEAD by @alexeagle in #245
  • chore(deps): update dependency bazel_skylib_gazelle_plugin to v1.5.0 by @renovate in #243
  • chore(deps): update dependency bazel_gazelle to v0.35.0 by @renovate in #240
  • chore(deps): update dependency aspect_bazel_lib to v1.40.0 by @renovate in #239
  • chore: cancel previous GHA from the same PR by @gregmagolan in #254
  • chore: upgrade to Bazel 7.0.2 by @gregmagolan in #249

Full Changelog: v0.5.0...v0.6.0

v0.5.0

27 Nov 21:16
e5c2112
Compare
Choose a tag to compare
v0.5.0 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.5.0")

And also register a Python toolchain, see rules_python. For example:

bazel_dep(name = "rules_python", dev_dependency = True, version = "0.22.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    name = "python3",
    configure_coverage_tool = True,
    python_version = "3.11",
)
use_repo(python, "python3_toolchains")

register_toolchains(
    "@python3_toolchains//:all",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "e1d1023bc9ba8545dc87c6df10508d9d7c20f489f5e5c5c1e16380b33c013485",
    strip_prefix = "rules_py-0.5.0",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.5.0/rules_py-v0.5.0.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")
rules_py_dependencies()

What's Changed

  • refactor: put 'git archive' config in .gitattributes by @alexeagle in #215
  • feat: support 'virtual' dependencies by @mattem in #201
  • chore(deps): update dependency bazel_gazelle to v0.34.0 by @renovate in #188
  • chore(deps): update dependency rules_python_gazelle_plugin to v0.26.0 by @renovate in #192
  • chore(deps): update dependency aspect_bazel_lib to v1.38.1 by @renovate in #187
  • fix(py_library): don't return transitive srcs as defaultinfo by @alexeagle in #221
  • chore(deps): update dependency io_bazel_rules_go to v0.42.0 by @renovate in #195
  • build(deps): bump django from 4.2.0 to 4.2.7 in /py/tests/virtual/django by @dependabot in #220
  • build(deps): bump django from 4.2.5 to 4.2.7 by @dependabot in #216
  • fix: use original interpreter path as 'home' value in pyvenv.cfg by @mattem in #226

New Contributors

Full Changelog: v0.4.0...v0.5.0

v0.4.0

19 Oct 18:57
9dc9650
Compare
Choose a tag to compare
v0.4.0 Pre-release
Pre-release

Using Bzlmod with Bazel 6:

Add to your MODULE.bazel file:

bazel_dep(name = "aspect_rules_py", version = "0.4.0")

And also register a Python toolchain, see rules_python. For example:

bazel_dep(name = "rules_python", dev_dependency = True, version = "0.22.0")

python = use_extension("@rules_python//python/extensions:python.bzl", "python")
python.toolchain(
    name = "python3_9",
    configure_coverage_tool = True,
    python_version = "3.9",
)
use_repo(python, "python3_9_toolchains")

register_toolchains(
    "@python3_9_toolchains//:all",
)

Using WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
    name = "aspect_rules_py",
    sha256 = "50b4b43491cdfc13238c29cb159b7ccacf0a1e54bd27b65ff2d5fac69af4d46f",
    strip_prefix = "rules_py-0.4.0",
    url = "https://github.com/aspect-build/rules_py/releases/download/v0.4.0/rules_py-v0.4.0.tar.gz",
)
# Fetches the rules_py dependencies.
# If you want to have a different version of some dependency,
# you should fetch it *before* calling this.
# Alternatively, you can skip calling this function, so long as you've
# already fetched all the dependencies.
load("@aspect_rules_py//py:repositories.bzl", "rules_py_dependencies")
rules_py_dependencies()

What's Changed

  • chore(deps): update io_bazel_rules_docker digest to 8e70c6b by @renovate in #148
  • chore(deps): update dependency bazel_gazelle to v0.32.0 by @renovate in #156
  • chore(deps): update dependency aspect_bazel_lib to v1.33.0 by @renovate in #144
  • chore: update .gitignore by @mattem in #166
  • chore(deps): update aspect_gcc_toolchain digest to 4bd1f94 by @renovate in #145
  • chore: bump Python dependencies by @mattem in #167
  • Allow passing deps in py_pytest_main by @linzhp in #163
  • fix: ensure coverage providers are output from both py_library and py_binary rules by @mattem in #168
  • chore: update sqlparse by @mattem in #169
  • chore: bump bazel version to 6.3.1 by @mattem in #170
  • chore(deps): update aspect_gcc_toolchain digest to 70a8c93 by @renovate in #171
  • chore(deps): update dependency bazel to v6.3.2 by @renovate in #177
  • fix: use rlocation for interpreter location by @mattem in #182
  • chore(deps): update dependency rules_python to v0.18.0 by @renovate in #134
  • chore: update Python dependencies by @mattem in #183
  • chore(deps): update dependency bazel_skylib to v1.4.2 by @renovate in #135
  • chore(deps): update dependency io_bazel_rules_go to v0.41.0 by @renovate in #178
  • feat: expose py_venv rule, allowing creation of virtual envs from multiple targets by @mattem in #181
  • chore: skip examples in release artifact by @alexeagle in #185
  • Update readme by @alexeagle in #186
  • Add testonly and data parameters to py_pytest_main rule by @kpark-hrp in #190
  • chore: run pre-commit on all files by @alexeagle in #199
  • docs: update README by @alexeagle in #197
  • chore: update rules_python by @mattem in #200
  • chore: dogfood our rules rather than rules_python by @alexeagle in #204
  • docs: improve generated documentation by @alexeagle in #203
  • chore: use modern helper from bazel-lib by @alexeagle in #207

New Contributors

Full Changelog: v0.3.0...v0.4.0