Skip to content

Commit

Permalink
feat: port os_release rule (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
thesayyn authored Nov 15, 2023
1 parent 9716fef commit aaa7174
Show file tree
Hide file tree
Showing 8 changed files with 143 additions and 3 deletions.
6 changes: 3 additions & 3 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ module(
compatibility_level = 1,
)

bazel_dep(name = "bazel_skylib", version = "1.4.1")
bazel_dep(name = "aspect_bazel_lib", version = "2.0.0-rc0")
bazel_dep(name = "bazel_skylib", version = "1.5.0")
bazel_dep(name = "aspect_bazel_lib", version = "2.0.0-rc1")

bazel_lib_toolchains = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains")

# bazel_lib_toolchains.tar()
use_repo(bazel_lib_toolchains, "bsd_tar_toolchains")

bazel_dep(name = "gazelle", version = "0.34.0", dev_dependency = True, repo_name = "bazel_gazelle")
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.4.1", dev_dependency = True)
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.5.0", dev_dependency = True)
bazel_dep(name = "buildifier_prebuilt", version = "6.1.2", dev_dependency = True)
1 change: 1 addition & 0 deletions distroless/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ bzl_library(
deps = [
"//distroless/private:cacerts",
"//distroless/private:locale",
"//distroless/private:os_release",
],
)

Expand Down
2 changes: 2 additions & 0 deletions distroless/defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

load("//distroless/private:cacerts.bzl", _cacerts = "cacerts")
load("//distroless/private:locale.bzl", _locale = "locale")
load("//distroless/private:os_release.bzl", _os_release = "os_release")

cacerts = _cacerts
locale = _locale
os_release = _os_release
12 changes: 12 additions & 0 deletions distroless/private/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ bzl_library(
deps = [":tar"],
)

bzl_library(
name = "os_release",
srcs = ["os_release.bzl"],
visibility = ["//distroless:__subpackages__"],
deps = [
"@aspect_bazel_lib//lib:expand_template",
"@aspect_bazel_lib//lib:tar",
"@aspect_bazel_lib//lib:utils",
"@bazel_skylib//rules:write_file",
],
)

bzl_library(
name = "tar",
srcs = ["tar.bzl"],
Expand Down
54 changes: 54 additions & 0 deletions distroless/private/os_release.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"osrelease"

load("@aspect_bazel_lib//lib:expand_template.bzl", "expand_template")
load("@aspect_bazel_lib//lib:tar.bzl", "tar")
load("@aspect_bazel_lib//lib:utils.bzl", "propagate_common_rule_attributes")
load("@bazel_skylib//rules:write_file.bzl", "write_file")

def os_release(name, content, path = "/usr/lib/os-release", **kwargs):
"""
Create an Operating System Identification file from a key, value dictionary.
https://www.freedesktop.org/software/systemd/man/latest/os-release.html
Args:
name: name of the target
content: a key, value dictionary that will be serialized into `=` seperated lines.
See https://www.freedesktop.org/software/systemd/man/latest/os-release.html#Options for well known keys.
path: where to put the file in the result archive. default: `/usr/lib/os-release`
**kwargs: other named arguments to expanded targets. see [common rule attributes](https://bazel.build/reference/be/common-definitions#common-attributes).
"""
common_kwargs = propagate_common_rule_attributes(kwargs)
write_file(
name = "%s_content" % name,
content = [
"{}={}".format(key, value)
for (key, value) in content.items()
],
out = "%s.content" % name,
**common_kwargs
)

# TODO: remove this expansion target once https://github.com/aspect-build/bazel-lib/issues/653 is fixed.
expand_template(
name = "%s_mtree" % name,
out = "%s.mtree" % name,
data = [":%s_content" % name],
stamp = 0,
template = [
"#mtree",
"%s uid=0 gid=0 mode=0755 time=0 type=file content={content}" % path.lstrip("/"),
"",
],
substitutions = {
"{content}": "$(BINDIR)/$(rootpath :%s_content)" % name,
},
**common_kwargs
)
tar(
name = name,
srcs = [":%s_content" % name],
mtree = ":%s_mtree" % name,
**common_kwargs
)
24 changes: 24 additions & 0 deletions docs/rules.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 45 additions & 0 deletions examples/os_release/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
load("@aspect_bazel_lib//lib:diff_test.bzl", "diff_test")
load("//distroless:defs.bzl", "os_release")
load("//distroless/tests:asserts.bzl", "assert_tar_listing")

os_release(
name = "os_release",
content = {
"PRETTY_NAME": "Distroless",
"VERSION": "Debian GNU/Linux",
},
)

diff_test(
name = "test_os_release_content",
file1 = "os_release_content",
file2 = "content.expected.txt",
)

assert_tar_listing(
name = "test_os_release",
actual = "os_release",
expected = """\
#mtree
./usr/lib/os-release nlink=0 time=0.0 mode=755 gid=0 uid=0 type=file size=47 cksum=1353493935 sha1digest=ae180d07c7e29e34e1e74ee7c49f371c8cf006d5
""",
)

os_release(
name = "os_release_alternative_path",
content = {
"PRETTY_NAME": "Distroless",
"VERSION": "Debian GNU/Linux",
"ARCHITECTURE": "arm64",
},
path = "/etc/os-release",
)

assert_tar_listing(
name = "test_os_release_alternative_path",
actual = "os_release_alternative_path",
expected = """\
#mtree
./etc/os-release nlink=0 time=0.0 mode=755 gid=0 uid=0 type=file size=66 cksum=187595121 sha1digest=7db059bd2ee4a8606f310fa84fb29f56f151b218
""",
)
2 changes: 2 additions & 0 deletions examples/os_release/content.expected.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
PRETTY_NAME=Distroless
VERSION=Debian GNU/Linux

0 comments on commit aaa7174

Please sign in to comment.