nfpm_content_files
Multiple files that should be copied into an nFPM package.
Pass the list of ('src', 'dst') file tuples in the 'files' field. The 'src' files must be provided by or generated by the targets in 'dependencies'.
Backend: pants.backend.experimental.nfpm
files
Iterable[Iterable[str]]
A list of 2-tuples ('src', 'dst').
The second part, `dst', must be unique across all entries.
content_type
'' | 'config' | 'config|noreplace' | 'doc' | 'license' | 'readme' | None
''
The nFPM content type for the packaged file.
The content type can be either
- '': a normal file (the default), or
- 'config': a config file.
For RPM packaged files, the content type can also be one of:
- 'config|noreplace',
- 'doc',
- 'license', and
- 'readme'.
The 'config|noreplace' type is used for RPM's %config(noreplace)
option. For packagers other than RPM, using 'config|noreplace' is the same as 'config' and the remaining RPM-specific types are the same as '', a normal file.
This field only supports file-specific nFPM content types. Please use these targets for non-file content:
- For 'dir' content, use targets
nfpm_content_dir
andnfpm_content_dirs
. - For 'symlink' content, use targets
nfpm_content_symlink
andnfpm_content_symlinks
. - For RPM 'ghost' content, use field 'ghost_contents' on target
nfpm_rpm_package
.
The nFPM 'tree' content type is not supported. Before passing the list of package contents to nFPM, pants expands target generators and any globs, so the 'tree' content type does not make sense.
dependencies
Iterable[str] | None
None
Addresses to other targets that this target depends on, e.g. ['helloworld/subdir:lib', 'helloworld/main.py:lib', '3rdparty:reqs#django']
.
This augments any dependencies inferred by Pants, such as by analyzing your imports. Use pants dependencies
or pants peek
on this target to get the final result.
See https://www.pantsbuild.org/2.24/docs/using-pants/key-concepts/targets-and-build-files for more about how addresses are formed, including for generated targets. You can also run pants list ::
to find all addresses in your project, or pants list dir
to find all addresses defined in that directory.
If the target is in the same BUILD file, you can leave off the BUILD file path, e.g. :tgt
instead of helloworld/subdir:tgt
. For generated first-party addresses, use ./
for the file path, e.g. ./main.py:tgt
; for all other generated targets, use :tgt#generated_name
.
You may exclude dependencies by prefixing with !
, e.g. ['!helloworld/subdir:lib', '!./sibling.txt']
. Ignores are intended for false positives with dependency inference; otherwise, simply leave off the dependency from the BUILD file.
description
str | None
None
A human-readable description of the target.
Use pants list --documented ::
to see all targets with descriptions.
file_group
str | None
'root'
Name of the group that should own this packaged file or directory.
This is like the GROUP arg in chown: https://www.mankier.com/1/chown
file_mode
int | str | None
None
A file mode as a numeric octal, an string octal, or a symbolic representation.
NB: In most cases, you should set this field and not rely on the default value. Pants only tracks the executable bit for workspace files. So, this field defaults to 0o755 for executable files and 0o644 for files that are not executable.
You may specify the file mode as: an octal, an octal string, or a symbolic string. If you specify a numeric octal (not as a string), make sure to include python's octal prefix: 0o
like in 0o644
. If you specify the octal as a string, the Oo
prefix is optional (like 644
). If you specify a symbolic file mode string, you must provide 9 characters with "-" in place of any absent permissions (like 'rw-r--r--'
).
For example to specify world readable/executable and user writable, these are equivalent:
0o755
-'755'
-'rwxr-xr-x'
Another example for a file with read/write permissions for only the user:
0o600
-'600'
-'rw-------'
Another example for a file with the group sticky bit set:
0o2660
-'2660'
-'rw-rwS---'
WARNING: If you forget to include the 0o
prefix on a numeric octal, then it will be interpreted as an integer which is probably not what you want. For example, 755
(no quotes) will be processed as 0o1363
(symbolically that would be '-wxrw--wt') which is probably not what you intended. Pants cannot detect errors like this, so be careful to either use a string or include the 0o
octal prefix.
file_mtime
str | None
'1980-01-01T00:00:00Z'
The file modification time as an RFC 3339 formatted string.
For example: 2008-01-02T15:04:05Z
The format is defined in RFC 3339: https://rfc-editor.org/rfc/rfc3339.html
Though nFPM supports pulling mtime from the src file or directory in most cases, the pants nfpm backend does not support this. Reading the mtime from the filesystem is problematic because Pants does not track the mtime of files and does not propagate any file mtime into the sandboxes. Reasons for this include: git does not track mtime, timestamps like mtime cause many issues for reproducible packaging builds, and reproducible builds are required for pants to provide its fine-grained caches.
The default value is '1980-01-01T00:00:00Z'. You may also override the default value by setting [nfpm].default_mtime
in pants.toml
, or by setting the SOURCE_DATE_EPOCH
environment variable.
file_owner
str | None
'root'
Username that should own this packaged file or directory.
This is like the OWNER arg in chown: https://www.mankier.com/1/chown
overrides
dict | None
None
Override the field values for generated nfpm_content_file
targets.
This expects a dictionary of 'dst' files to a dictionary for the overrides.
tags
Iterable[str] | None
None
Arbitrary strings to describe a target.
For example, you may tag some test targets with 'integration_test' so that you could run pants --tag='integration_test' test ::
to only run on targets with that tag.