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.
For more information, follow issue 8857
rules_pkg
Rules
Overview
pkg_tar() is available for building a .tar file without depending
on anything besides Bazel. Since this feature is deprecated and will
eventually be removed from Bazel, you should migrate to @rules_pkg.
Basic Example
This example is a simplification of building Bazel and creating a distribution tarball.
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
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 = "bazel-all",
    extension = "tar.gz",
    deps = [
        ":bazel-bin",
        ":bazel-tools",
    ],
)
Here, a package is built from three pkg_tar targets:
bazel-bincreates a tarball with the main binary (mode0755) in/usr/bin,bazel-toolscreate a tarball with the base workspace (mode0644) to/usr/share/bazel/tools; themodesattribute let us specifies executable files,bazel-allcreates a gzip-compressed tarball that merge the two previous tarballs.
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   | 
    
strip_prefix | 
      
        String, optional
        Root path of the files. 
          The directory structure from the files is preserved inside the
          tarball but a prefix path determined by   | 
    
package_dir | 
      
        String, optional
        Target directory. The directory in which to expand the specified files, defaulting to '/'. Only makes sense accompanying files.  | 
    
srcs | 
      
        List of files, optional
        File to add to the layer. A list of files that should be included in the archive.  | 
    
mode | 
      
        String, default to 0555
        
          Set the mode of files added by the   | 
    
mtime | 
      
        int, seconds since Jan 1, 1970, default to -1 (ignored)
        
          Set the mod time of files added by the   | 
    
portable_mtime | 
      
        bool, default True
        
          Set the mod time of files added by the   | 
    
modes | 
      
        Dictionary, default to '{}'
        
          A string dictionary to change default mode of specific files from
           
            | 
    
owner | 
      
        String, default to '0.0'
        
            | 
    
owners | 
      
        Dictionary, default to '{}'
        
          A string dictionary to change default owner of specific files from
           
            | 
    
ownername | 
      
        String, optional
        
            | 
    
ownernames | 
      
        Dictionary, default to '{}'
        
          A string dictionary to change default owner of specific files from
           
            | 
    
deps | 
      
        List of labels, optional
        Tar files to extract and include in this tar package. A list of tarball labels to merge into the output tarball.  | 
    
symlinks | 
      
        Dictionary, optional
        Symlinks to create in the output tarball. 
            | 
    
remap_paths | 
      
        Dictionary, optional
        Source path prefixes to remap in the tarfile. 
            |