aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/build_defs/pkg/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build_defs/pkg/README.md')
-rw-r--r--tools/build_defs/pkg/README.md365
1 files changed, 365 insertions, 0 deletions
diff --git a/tools/build_defs/pkg/README.md b/tools/build_defs/pkg/README.md
new file mode 100644
index 0000000000..3bc016b476
--- /dev/null
+++ b/tools/build_defs/pkg/README.md
@@ -0,0 +1,365 @@
+# Packaging for Bazel
+
+## Overview
+
+These build rules are used for building various packaging such as tarball
+and debian package.
+
+* [Basic Example](#basic-example)
+* [Build Rule Reference](#reference)
+ * [`pkg_tar`](#pkg_tar)
+ * [`pkg_deb`](#pkg_deb)
+* [Future work](#future)
+
+<a name="basic-example"></a>
+## Basic Example
+
+This example is a simplification of the debian packaging of Bazel:
+
+```python
+
+load("/tools/build_defs/pkg/pkg", "pkg_tar", "pkg_deb")
+
+pkg_tar(
+ name = "bazel-bin",
+ data_path = "/src",
+ directory = "/usr/bin",
+ files = ["//src:bazel"],
+ mode = "0755",
+)
+
+pkg_tar(
+ name = "bazel-tools",
+ data_path = "/",
+ directory = "/usr/share/lib/bazel/tools",
+ files = ["//tools:package-srcs"],
+ mode = "0644",
+ modes = {"tools/build_defs/docker/build_test.sh": "0755"},
+)
+
+pkg_tar(
+ name = "debian-data",
+ extension = "tar.gz",
+ tars = [
+ ":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.io",
+ 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`.
+
+<a name="reference"></a>
+## Build Rule Reference [reference]
+
+<a name="pkg_tar"></a>
+### `pkg_tar`
+
+`pkg_tar(name, extension, data_path, directory, files, mode, modes, tars, debs, symlinks)`
+
+Creates a tar file from a list of inputs.
+
+<table>
+ <thead>
+ <tr>
+ <th>Attribute</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>name</code></td>
+ <td>
+ <code>Name, required</code>
+ <p>A unique name for this rule.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>extension</code></td>
+ <td>
+ <code>String, default to 'tar'</code>
+ <p>
+ The extension for the resulting tarball. The output
+ file will be '<i>name<i>.<i>extension<i>'. This extension
+ also decide on the compression: if set to <code>tar.gz</code>
+ or <code>tgz</code> then gzip compression will be used and
+ if set to <code>tar.bz2</code> or <code>tar.bzip2</code> then
+ bzip2 compression will be used.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>strip_prefix</code></td>
+ <td>
+ <code>String, optional</code>
+ <p>Root path of the files.</p>
+ <p>
+ The directory structure from the files is preserved inside the
+ tarball but a prefix path determined by <code>strip_prefix</code>
+ is removed from the directory structure. This path can
+ be absolute from the workspace root if starting with a <code>/</code> or
+ relative to the rule's directory. A relative path may starts with "./"
+ (or be ".") but cannot use go up with "..". By default, the
+ <code>data_path</code> attribute is unused and all files are supposed to have no
+ prefix.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>package_dir</code></td>
+ <td>
+ <code>String, optional</code>
+ <p>Target directory.</p>
+ <p>
+ The directory in which to expand the specified files, defaulting to '/'.
+ Only makes sense accompanying files.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>files</code></td>
+ <td>
+ <code>List of files, optional</code>
+ <p>File to add to the layer.</p>
+ <p>
+ A list of files that should be included in the docker image.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>mode</code></td>
+ <td>
+ <code>String, default to 0555</code>
+ <p>
+ Set the mode of files added by the <code>files</code> attribute.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>modes</code></td>
+ <td>
+ <code>Dictionary, default to '{}'</code>
+ <p>
+ A string dictionary to change default mode of specific files from
+ <code>files</code>. Each key should be a path to a file before
+ appending the prefix <code>directory</code> and the corresponding
+ value the octal permission of to apply to the file.
+ </p>
+ <p>
+ <code>
+ modes = {
+ "tools/py/2to3.sh": "0755
+ ...
+ },
+ </code>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>tars</code></td>
+ <td>
+ <code>List of files, optional</code>
+ <p>Tar file to extract in the layer.</p>
+ <p>
+ A list of tar files to merge into the output tarball.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>symlinks</code></td>
+ <td>
+ <code>Dictionary, optional</code>
+ <p>Symlinks to create in the output tarball.</p>
+ <p>
+ <code>
+ symlinks = {
+ "/path/to/link": "/path/to/target",
+ ...
+ },
+ </code>
+ </p>
+ </td>
+ </tr>
+ </tbody>
+ </tbody>
+</table>
+
+<a name="pkg_deb"></a>
+### `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, predepends, recommends)`
+
+Create a debian package. See <a
+href="http://www.debian.org/doc/debian-policy/ch-controlfields.html">http://www.debian.org/doc/debian-policy/ch-controlfields.html</a>
+for more details on this.
+
+<table>
+ <thead>
+ <tr>
+ <th>Attribute</th>
+ <th>Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>name</code></td>
+ <td>
+ <code>Name, required</code>
+ <p>A unique name for this rule.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>data</code></td>
+ <td>
+ <code>File, required</code>
+ <p>
+ A tar file that contains the data for the debian package (basically
+ the list of files that will be installed by this package).
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>package</code></td>
+ <td>
+ <code>String, required</code>
+ <p>The name of the package.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>architecture</code></td>
+ <td>
+ <code>String, default to 'all'</code>
+ <p>The architecture that this package target.</p>
+ <p>
+ See <a href="http://www.debian.org/ports/">http://www.debian.org/ports/</a>.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>maintainer</code></td>
+ <td>
+ <code>String, required</code>
+ <p>The maintainer of the package.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>preinst</code>, <code>postinst</code>, <code>prerm</code> and <code>postrm</code></td>
+ <td>
+ <code>Files, optional</code>
+ <p>
+ Respectively, the pre-install, post-install, pre-remove and
+ post-remove scripts for the package.
+ </p>
+ <p>
+ See <a href="http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html">http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html</a>.
+ </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, default to 'Bazel'</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>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>
+ </tbody>
+ </tbody>
+</table>
+
+<a name="future"></a>
+# Future work
+
+ - Support more format, especially `pkg_zip`.
+ - Maybe a bit more integration with the `docker_build` rule.