tree: bf4c68647c92191862356fe51993192ae0400d41 [path history] [tgz]
  1. testdata/
  2. archive.py
  3. archive_test.py
  4. BUILD
  5. build_tar.py
  6. build_test.sh
  7. make_deb.py
  8. make_rpm.py
  9. make_rpm_test.py
  10. path.bzl
  11. path_test.py
  12. pkg.bzl
  13. README.md
  14. rpm.bzl
  15. testenv.py
  16. testenv.sh
tools/build_defs/pkg/README.md

Packaging for Bazel

Deprecated

These rules have been extracted from the Bazel sources and are now available at bazelbuild/rules_pkg (docs).

Issues and PRs against the built-in versions of these rules will no longer be addressed. This page will exist for reference until the code is removed from Bazel. You can test the removal of these rules with Bazel at version >= 0.28.0.

bazel build --//tools/build_defs/pkg:incompatible_no_build_defs_pkg  target...

For more information, follow issue 8857

rules_pkg

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",
)

pkg_tar(
    name = "debian-data",
    extension = "tar.gz",
    deps = [
        ":bazel-bin",
        ":bazel-tools",
    ],
)

pkg_deb(
    name = "bazel-debian",
    architecture = "amd64",
    built_using = "unzip (6.0.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 (mode 0755) in /usr/bin,
  • bazel-tools create a tarball with the base workspace (mode 0644) to /usr/share/bazel/tools ; the modes 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.

pkg_deb

pkg_deb(name, data, package, architecture, maintainer, preinst, postinst, prerm, postrm, version, version_file, description, description_file, built_using, built_using_file, priority, section, homepage, depends, suggests, enhances, conflicts, predepends, recommends)

Create a debian package. See http://www.debian.org/doc/debian-policy/ch-controlfields.html for more details on this.

<tr>
  <td><code>conffiles</code>, <code>conffiles_file</code></td>
  <td>
    <code>String list or File, optional</code>
    <p>
      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.
    </p>
    <p>
      See <a href="https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html#s-conffile">https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html#s-conffile</a>.
    </p>
  </td>
</tr>
<tr>
  <td><code>version</code>, <code>version_file</code></td>
  <td>
    <code>String or File, required</code>
    <p>
      The package version provided either inline (with <code>version</code>)
      or from a file (with <code>version_file</code>).
    </p>
  </td>
</tr>
<tr>
  <td><code>description</code>, <code>description_file</code></td>
  <td>
    <code>String or File, required</code>
    <p>
      The package description provided either inline (with <code>description</code>)
      or from a file (with <code>description_file</code>).
    </p>
  </td>
</tr>
<tr>
  <td><code>built_using</code>, <code>built_using_file</code></td>
  <td>
    <code>String or File</code>
    <p>
      The tool that were used to build this package provided either inline
      (with <code>built_using</code>) or from a file (with <code>built_using_file</code>).
    </p>
  </td>
</tr>
<tr>
  <td><code>priority</code></td>
  <td>
    <code>String, default to 'optional'</code>
    <p>The priority of the package.</p>
    <p>
      See <a href="http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities">http://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities</a>.
    </p>
  </td>
</tr>
<tr>
  <td><code>section</code></td>
  <td>
    <code>String, default to 'contrib/devel'</code>
    <p>The section of the package.</p>
    <p>
      See <a href="http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections">http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections</a>.
    </p>
  </td>
</tr>
<tr>
  <td><code>homepage</code></td>
  <td>
    <code>String, optional</code>
    <p>The homepage of the project.</p>
  </td>
</tr>
<tr>
  <td>
    <code>depends</code>, <code>suggests</code>, <code>enhances</code>,
    <code>conflicts</code>, <code>predepends</code> and <code>recommends</code>.
  </td>
  <td>
    <code>String list, optional</code>
    <p>The list of dependencies in the project.</p>
    <p>
      See <a href="http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps">http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps</a>.
    </p>
  </td>
</tr>

pkg_rpm

pkg_rpm(name, spec_file, architecture, version, version_file, changelog, data)

Create an RPM package. See http://rpm.org/documentation.html for more details on this.