Packaging for Bazel
Overview
These build rules are used for building various packaging such as tarball and debian package.
Basic Example
This example is a simplification of the debian packaging of Bazel:
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar", "pkg_deb")
pkg_tar(
name = "bazel-bin",
strip_prefix = "/src",
package_dir = "/usr/bin",
srcs = ["//src:bazel"],
mode = "0755",
)
pkg_tar(
name = "bazel-tools",
strip_prefix = "/",
package_dir = "/usr/share/lib/bazel/tools",
srcs = ["//tools:package-srcs"],
mode = "0644",
modes = {"tools/build_defs/docker/build_test.sh": "0755"},
)
pkg_tar(
name = "debian-data",
extension = "tar.gz",
deps = [
":bazel-bin",
":bazel-tools",
],
)
pkg_deb(
name = "bazel-debian",
architecture = "amd64",
built_using = "bazel (0.1.1)",
data = ":debian-data",
depends = [
"zlib1g-dev",
"unzip",
],
description_file = "debian/description",
homepage = "http://bazel.build",
maintainer = "The Bazel Authors <bazel-dev@googlegroups.com>",
package = "bazel",
version = "0.1.1",
)
Here, the Debian package is built from three pkg_tar
targets:
bazel-bin
creates a tarball with the main binary (mode0755
) in/usr/bin
,bazel-tools
create a tarball with the base workspace (mode0644
) to/usr/share/bazel/tools
; themodes
attribute let us specifies executable files,debian-data
creates a gzip-compressed tarball that merge the three previous tarballs.
debian-data
is then used for the data content of the debian archive created by
pkg_deb
.
Future work
- Support more format, especially
pkg_zip
. - Maybe a bit more integration with the
docker_build
rule.
pkg_tar
pkg_tar(name, extension, strip_prefix, package_dir, srcs,
mode, modes, deps, symlinks)
Creates a tar file from a list of inputs.
Attributes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
name |
Name, required
A unique name for this rule. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
extension |
String, default to 'tar'
The extension for the resulting tarball. The output
file will be 'name.extension'. This extension
also decide on the compression: if set to Root path of the files.
The directory structure from the files is preserved inside the
tarball but a prefix path determined by Target directory.
The directory in which to expand the specified files, defaulting to '/'.
Only makes sense accompanying files.
File to add to the layer.
A list of files that should be included in the archive.
Set the mode of files added by the
A string dictionary to change default mode of specific files from
A string dictionary to change default owner of specific files from
A string dictionary to change default owner of specific files from
Tar files to extract and include in this tar package.
A list of tarball labels to merge into the output tarball.
Symlinks to create in the output tarball.
A unique name for this rule.
A tar file that contains the data for the debian package (basically
the list of files that will be installed by this package).
The name of the package. The architecture that this package target. The maintainer of the package.
Respectively, the pre-install, post-install, pre-remove and
post-remove scripts for the package.
See http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html.
The list of conffiles or a file containing one conffile per
line. Each item is an absolute path on the target system
where the deb is installed.
See https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html#s-conffile.
The package version provided either inline (with
The package description provided either inline (with
The tool that were used to build this package provided either inline
(with The priority of the package.
See http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities.
The section of the package.
See http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections.
The homepage of the project. The list of dependencies in the project.
See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps.
A unique name for this rule. Used to name the output package. The RPM specification file used to generate the package.
See http://ftp.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html.
The architecture that this package target.
The package version provided either inline (with
Files to include in the generated package.
|