pantsbuild.pants 2.16.1
The ergonomic and hermetic software build system for Python, Java, Scala, Go, and Shell. Pants lets you fearlessly scale up your codebase.
License: Apache License, Version 2.0
Requires Python: >=3.7,<3.10

Pants is an Apache2 licensed build tool written in Python and Rust.

The latest documentation can be found at [pantsbuild.org](https://www.pantsbuild.org/).


# 2.16.x Release Series

## What's New

### BUILD files

The new `env` function in BUILD files allows access to environment variables in BUILD files.

Run `pants help symbols` for documentation of all builtin symbols and macros provided by prelude files
which are usable in BUILD files.

The visibility rules syntax now supports matching on target names. The rules glob syntax also now uses
the same syntax as target selectors.

### Backends

#### Docker

The [`{pants.hash}`](https://www.pantsbuild.org/docs/tagging-docker-images#string-interpolation-using-placeholder-values)
generation code was changed such that the generated hash for the same input will be different in pants 2.16.

#### Python

The Python backend added or improved support for various tools including:

- [`pydocstyle`](https://www.pydocstyle.org/) is now supported for linting Python doc strings. Enable the
`pants.backend.python.lint.pydocstyle` backend to add this support.

- [`ruff`](https://github.com/charliermarsh/ruff) is now supported for linting and formatting Python code. Enable the
`pants.backend.experimental.python.lint.ruff` backend to add this support.

- [`pyenv`](https://github.com/pyenv/pyenv) is now supported as a way for Pants to provide a hermetic version of Python
for each relevant Interpreter required to run user code. Enable the `pants.backend.python.providers.experimental.pyenv`
backend to add this support.

- Pants now understands how to parse dependencies of projects using the OpenStack/Stevedore ((https://github.com/openstack/stevedore)
project. Enable the `pants.backend.python.framework.stevedore` backend to add this support.

- More Python target types now have the `environment` field and thus can execute in non-local environments.

Deprecations:

- The default value of `CPython>=3.7,<4` for the `[python].interpreter_constraints` option is now
deprecated and will be removed in Pants v2.17.x.  This options sets Python interpreter
constraints for Python-related targets which did not otherwise specify their own interpreter
constraints. Instead of relying on this default, explicitly set the
`[python].interpreter_constraints` option appropriately. We recommend constraining to a single
interpreter minor version if you can, e.g., `interpreter_constraints = ['==3.11.*']`, or at least
a small number of interpreter minor versions, e.g., `interpreter_constraints = ['>=3.10,<3.12']`.

- The special Python "tool lockfile" functionality is deprecated. Repos can now use regular "user lockfiles" to provide custom versions of tools.

#### Shell command improvements and support for ad-hoc tools

The Shell backend along with the new `pants.backend.experimental.adhoc` backend have received a number of improvements so that
Pants is able to invoke workflows that include tools for which Pants does not yet have a
dedicated backend.

In recognition of these improvements, the `experimental_shell_command` and `experimental_run_shell_command` target
types have graduated to no longer have the `experimental_` prefix; use `shell_command` and `run_shell_command`
respectively instead.

The improvements include:

- The `shell_command` continues to provide a way to run a tool for its side effects and capture
outputs from the tool invocation for consumption as dependencies by other target types, but has had several improvements:

  - the `dependencies` field has been deprecated, and separated into three fields: `execution_dependencies` for
    dependencies required to execute the command, `output_dependencies` for dependencies required to
    use the output, and `runnable_dependencies` for targets that need to exist as directly
    executable on the sandbox's `PATH`
  - the `outputs` field has been separated into `output_files` and `output_directories`
  - the directory in which the command is invoked can be controlled via the new `workdir` field
  - the location of the output files when consumed as a dependency can be controlled via the new `root_output_directory` field

- Preserving symlinks as symlinks in process output, rather than resolving them to their target
file. This eliminates the need for work-arounds in `shell_command`s that happen to generate
semantically-relevant symlinks, such as the contents of `node_modules/.bin` if using `shell_command`
to invoke `npm ci` or `npm install`.

- The new `adhoc_tool` target type supplied by the `adhoc` backend allows executing most "runnable" target types (those supported for `pants run` goal) exported by another Pants backend in an execution sandbox goal, allowing you to capture their outputs to be captured. The outputs can then be consumed by another Pants target in a similar manner to the `shell_command` target type.
"Runnable" target types include:
  * Adhoc: `system_binary`
  * Docker: `docker_image`
  * Go: `go_binary`
  * JVM: `jvm_artifact`, and `deploy_jar`
  * Python: `pex_binary`, `python_requirement`, `python_source`, and `pyoxidizer_binary`

- The new `system_binary` target type supplied by the `adhoc` backend wraps any externally-managed tool so that the 
tool may be invoked as a "runnable" by the `adhoc_tool` target type, while also allowing tool versions to be pinned for reproducibility.

- Support for running in non-local environments as specified by the `environment` field on `shell_command`, `adhoc_tool`, and related target types.

- Defining arbitrary shell commands as tests which can be invoked using `pants test` via the
new `experimental_test_shell_command` target type.

- The `workdir` field to `run_shell_command` has been switched to match the documented behavior: it now runs from the same directory as the `BUILD` file by default. To preserve the old behavior, explicitly set `workdir="/"`. The stabilisation also fixes other bugs with relative paths passed to the `workdir` field and thus may require updates.

Ad-hoc tool support, with the `adhoc_tool` or `shell_command` targets, can be used to compile third party
libraries in unsupported languages, run tools from ecosystems Pants doesn't yet directly support, and other similar code-generation tasks. 
These targets can be used for first-party code generation, making use of existing backends that define
"runnable" targets if needed. For instance, exporting a OpenAPI schema from a Python API server, letting Pants
manage the interpreters and dependencies required.

Enable the `pants.backend.experimental.adhoc` backend to add the features supplied by the `adhoc` backend.
Enable the `pants.backend.shell` backend for the shell-related functionality including `shell_command` and
`run_shell_command` target types.

#### Go

The Go backend has received a large number of changes in order to be ready for Go v1.20
and to make continued progress on [stabilizing the Go backend](https://github.com/pantsbuild/pants/issues/17447).

The main change is that Pants will now compile Go SDK packages from scratch and no longer rely on
the prebuilt package archives distributed with the Go SDK. Go v1.20 will no longer ship with those
prebuilt package archives, and so this change was necessary for Pants to continue to work 
with Go v1.20 and later releases. (It is also a correctness issue since Pants will now be able to
apply compiler options consistently to both first-party Go code and Go SDK packages.)

The Pants team would appreciate if the community could try out 2.16.x with your Go code as an additional
check to ensure there are no regressions.

The Go backend also now supports:
- Environments are supported via the `environment` field available now on `go_binary` targets.
- Code coverage can now analyze coverage for packages beyond just the package under test via the new
`--go-test-cover-packages` option.
- Numerous bug fixes to the Cgo support.
- The [data race detector](https://go.dev/doc/articles/race_detector) is supported via the `race` field now available on `go_binary` targets.
- Compiler and other flags may be set via the `compiler_flags`, `linker_flags`, and `assembler_flags` fields
available on various target types.

#### Buf

Pants is now able to discover and supply configuration files for the `Buf` protobuf linter.

#### New: Preamble

The new "preamble" plugin allows formatting/linting files to ensure they start with specific text, such as a copyright header. Enable the
`pants.backend.tools.preamble` backend to add this support.

#### New: CUE

Pants now have basic support for the [CUE language](https://cuelang.org/) for defining, generating, and validating configuration data.
Enable the `pants.backend.experimental.cue` backend to use this support.

#### New: YamlLint

Pants now the supports the [yamllint](https://yamllint.readthedocs.io) linter for YAML files. Enable the `pants.backend.experimental.tools.yamllint` backend to add this support.

#### New: AWS S3 support for URLs

Pants now supports referencing S3 URLs via the scheme (E.g. `s3://`), or authority (E.g. `*.s3*amazonaws.com` or `s3.*amazonaws.com`)
anywhere a URL can be specified.
Credentials are loaded similar to the AWS CLI (most regularly `~/.aws/credentials`) and attached as headers in the request (which aren't cached or logged).

Enable the `pants.backend.url_handlers.s3` backend to add this support.

#### New

### Plugin API Changes

The `URLDownloadHandler` union has been added to allow plugins to modify native URL downloading, such as transforming the URL or attaching headers for auth.

The `frozen_after_init` decorator on dataclasses has been removed from many parts of the Pants codebase. Plugin authors should avoid use of this decorator because it will likely be removed in a future Pants version.

The deprecated `Platform.current` has been removed. Instead, have the affected rules take a `Platform` directly as a parameter and the engine will supply the relevant `Platform` instance.

The `ToolCustomLockfile` and `ToolDefaultLockfile` classes [have been removed](https://github.com/pantsbuild/pants/pull/17843).

----

## 2.16.1 (Nov 21, 2023)

Only internal changes since prior release.

## 2.16.1rc4 (Oct 17, 2023)

### Bug fixes

* Fix algorithm for gathering Go build requests with coverage. (Cherry-pick of #20030) ([#20032](https://github.com/pantsbuild/pants/pull/20032))

## 2.16.1rc3 (Oct 06, 2023)

### Bug fixes

* Support using `__defaults__` in same BUILD file as environment targets. (Cherry-pick of #19446) ([#19968](https://github.com/pantsbuild/pants/pull/19968))

* Add missing `__init__.py` file for the `yamllint` backend. (Cherry-pick of #19899) ([#19908](https://github.com/pantsbuild/pants/pull/19908))

* Add additional directories with register.py to pants bin deps (Cherry pick of #19848) ([#19857](https://github.com/pantsbuild/pants/pull/19857))

* Fix global report coverage for namespaced packages (Cherry-pick of #19821) ([#19839](https://github.com/pantsbuild/pants/pull/19839))

* Have Pants create the `immutable_inputs` base parent(s) (Cherry-pick of #19646) ([#19653](https://github.com/pantsbuild/pants/pull/19653))

* Use hardlinking when possible for mypy cache (Cherry-pick of #19633) ([#19649](https://github.com/pantsbuild/pants/pull/19649))

* Undo pyenv install marking files as RO (Cherry-pick of #19645) ([#19647](https://github.com/pantsbuild/pants/pull/19647))

* Use named cache for Docker-env PBS (Cherry-pick of #19611) ([#19617](https://github.com/pantsbuild/pants/pull/19617))

* Make mypy cache move truly atomic (Cherry-pick of #19610) ([#19614](https://github.com/pantsbuild/pants/pull/19614))

* Scala: support Enums in dependency inference (Cherry pick of #19588) ([#19594](https://github.com/pantsbuild/pants/pull/19594))

* Fix the new tool lockfile deprecation message. (cherrypick of #19565) ([#19571](https://github.com/pantsbuild/pants/pull/19571))

* Fix `golangci-lint` runner script (Cherry-pick of #19015) ([#19472](https://github.com/pantsbuild/pants/pull/19472))

* Use the `package_name` variable to fix an `UnboundLocalError`. (Cherry-pick of #19433) ([#19452](https://github.com/pantsbuild/pants/pull/19452))

### Documentation

* Update release docs with latest changes ([#19895](https://github.com/pantsbuild/pants/pull/19895))

* docs: fix code examples for `setting-up-ide` and `interpreter-compatibility` docs (Cherry-pick of #19624) ([#19638](https://github.com/pantsbuild/pants/pull/19638))

* docs: add 2.16 entry to changelog (Cherry-pick of #19589) ([#19598](https://github.com/pantsbuild/pants/pull/19598))

* Add ruff, adjust pyugprade, autoflake in docs (Cherry-pick of #19555) ([#19577](https://github.com/pantsbuild/pants/pull/19577))

* Catch google artifact registry gotcha (Cherry-pick of #19568) ([#19569](https://github.com/pantsbuild/pants/pull/19569))

* Stop referring to ~/.cache/pants/setup in CI docs (Cherry-pick of #19554) ([#19560](https://github.com/pantsbuild/pants/pull/19560))

* Visibility: documentation fixes and clarifications. (Cherry-pick of #19438) ([#19495](https://github.com/pantsbuild/pants/pull/19495))

## 2.16.1rc2 (Sep 23, 2023)

Never released due to build issues.

## 2.16.1rc1 (Sep 20, 2023)

Never released due to build issues.

## 2.16.1rc0 (Jul 14, 2023)

### Bug Fixes

* Visibility: fix issue with using target type in verbose rule selector. (Cherry-pick of #19437) ([#19457](https://github.com/pantsbuild/pants/pull/19457))

* Fix helm documentation example (Cherry-pick of #19271) ([#19310](https://github.com/pantsbuild/pants/pull/19310))

### Documentation

* Tweak getting-help docs (Cherry-pick of #19418) ([#19420](https://github.com/pantsbuild/pants/pull/19420))

* Refine `run_shell_command` docs (Cherry-pick of #19413) ([#19422](https://github.com/pantsbuild/pants/pull/19422))

* Add a sponsorships page to the docsite. (Cherry-pick of #19412) ([#19417](https://github.com/pantsbuild/pants/pull/19417))

* Get doc titles from the in-repo markdown files (Cherry-pick of #19311) ([#19320](https://github.com/pantsbuild/pants/pull/19320))

* docs: layout tweak of caching info, remove toolchain :( and additional info about bazel-remote-cache (Cherry-pick of #19299) ([#19331](https://github.com/pantsbuild/pants/pull/19331))

## 2.16.0 (Jun 14, 2023)

The first stable release of the series, with no changes since the previous `rc`!

## 2.16.0rc7 (Jun 11, 2023)

### Bug Fixes

* Fix S3 URL Handler for good (Cherry-pick of #19285) ([#19288](https://github.com/pantsbuild/pants/pull/19288))

## 2.16.0rc6 (Jun 08, 2023)

### Bug Fixes

* Improve handling of additional files in Helm unit tests (Cherry-pick of #19263) ([#19267](https://github.com/pantsbuild/pants/pull/19267))

* Workaround `botocore` bug in S3 URL Handler backend (Cherry-pick of #19056) ([#19110](https://github.com/pantsbuild/pants/pull/19110))


## 2.16.0rc5 (Jun 01, 2023)

### User API Changes

* Deprecate the `version`/`extra_requirements` options on python tools. (Cherry-pick of #19204) ([#19210](https://github.com/pantsbuild/pants/pull/19210))

### Bug Fixes

* Scrub the Pyenv install dir before attempting an install. (Cherry-pick of #19193) ([#19196](https://github.com/pantsbuild/pants/pull/19196))

* Use `{bin_name()} run` as `$0` in `run_shell_command` (Cherry-pick of #19020) ([#19036](https://github.com/pantsbuild/pants/pull/19036))

### Documentation

* Add `tobni` to Maintainers (Cherry-pick of #19195) ([#19206](https://github.com/pantsbuild/pants/pull/19206))

* Add `botocore-a-la-carte` reference to `s3` URL Handler (Cherry-pick of #19055) ([#19108](https://github.com/pantsbuild/pants/pull/19108))

* update scie-jump cache directory reference (Cherry-pick of #18485) ([#19154](https://github.com/pantsbuild/pants/pull/19154))

## 2.16.0rc4 (May 25, 2023)

### User API Changes

* Terraform: Hashes for MacOS binaries have changed (Cherry-pick of #19004) ([#19135](https://github.com/pantsbuild/pants/pull/19135))

* Deprecate `[mypy].extra_type_stubs` and its lockfile. (Cherry-pick of #19084) ([#19086](https://github.com/pantsbuild/pants/pull/19086))

* Bring the tool `--export` option deprecation forward. (Cherry-pick of #19079) ([#19081](https://github.com/pantsbuild/pants/pull/19081))

### Bug Fixes

* If a shebang already exists when adding a preamble, preserve it. (Cherry-pick of #19133) ([#19137](https://github.com/pantsbuild/pants/pull/19137))

### Documentation

* add bazel-remote to list of compatible remote caches (Cherry-pick of #19041) ([#19114](https://github.com/pantsbuild/pants/pull/19114))

* Fix docs link to `pants_from_sources` script. (Cherry-pick of #19088) ([#19090](https://github.com/pantsbuild/pants/pull/19090))

## 2.16.0rc3 (May 18, 2023)

### User API Changes

* Support Python requirement target addrs in tool requirements. (Cherry-pick of #19014) ([#19023](https://github.com/pantsbuild/pants/pull/19023))

### Documentation

* Clarify how to set $0 properly in `run_in_shell_command` (Cherry-pick of #19019) ([#19031](https://github.com/pantsbuild/pants/pull/19031))

* Docs tweaks for 2.16.x (Cherry-pick of #19009) ([#19012](https://github.com/pantsbuild/pants/pull/19012))

## 2.16.0rc2 (May 11, 2023)

### User API Changes

* Use the resolve's ICs for tools. (Cherry-pick of #18776) ([#18806](https://github.com/pantsbuild/pants/pull/18806))

* Default to using the entire tool lockfile. (Cherry-pick of #18793) ([#18807](https://github.com/pantsbuild/pants/pull/18807))

### Bug Fixes

* Require urllib3<2, to reduce installation issues (cherry-pick of #18959) ([#18971](https://github.com/pantsbuild/pants/pull/18971))

* Make `DigestSubset` symlink-aware (Cherry-pick of #18963) ([#18970](https://github.com/pantsbuild/pants/pull/18970))

* Do not choke on missing lockfiles. (Cherry-pick of #18940) ([#18948](https://github.com/pantsbuild/pants/pull/18948))

* Actually run deprecated targets fixer (Cherry-pick of #18860) ([#18893](https://github.com/pantsbuild/pants/pull/18893))

* Remove existing entry if any when materialising symlink (Cherry-pick of #18873) ([#18878](https://github.com/pantsbuild/pants/pull/18878))

* Ensure non-ambiguous args/env vars injection into PEXes (Cherry-pick of #18861) ([#18877](https://github.com/pantsbuild/pants/pull/18877))

* Patch `StreamingWorkunitContext.get_expanded_specs()`. (Cherry-pick of #18713) ([#18866](https://github.com/pantsbuild/pants/pull/18866))

* help backends: Only list enabled experimental backends unless advanced help. (Cherry-pick of #18821) ([#18867](https://github.com/pantsbuild/pants/pull/18867))

* Include `pants.backend.url_handlers.s3` in pants distribution. (Cherry-pick of #18826) ([#18870](https://github.com/pantsbuild/pants/pull/18870))

* Handle workdir="."/default properly in run_shell_command (Cherry-pick of #18840) ([#18850](https://github.com/pantsbuild/pants/pull/18850))

* Write adhoc_tool(stdout/stderr="...") relative to workdir, support absolute paths (Cherry-pick of #18814) ([#18839](https://github.com/pantsbuild/pants/pull/18839))

* Use build root as workdir for shell_command(workdir="") (Cherry-pick of #18813) ([#18832](https://github.com/pantsbuild/pants/pull/18832))

### Performance

* Optimize `Target` and `FieldSet` operations (cherry-pick #18917) ([#18944](https://github.com/pantsbuild/pants/pull/18944))

### Documentation

* update troubleshooting document about self-hosted action runner (Cherry-pick of #18900) ([#18943](https://github.com/pantsbuild/pants/pull/18943))

* doc: mention `use_local_alias` for the `[docker].registries` option. (Cherry-pick of #18946) ([#18950](https://github.com/pantsbuild/pants/pull/18950))

* Fix adhoc output_... example, document run_shell_command workdir changes (Cherry-pick of #18894) ([#18910](https://github.com/pantsbuild/pants/pull/18910))

* Include `symbols` as topic in usage help. (Cherry-pick of #18825) ([#18869](https://github.com/pantsbuild/pants/pull/18869))

* Update mypy and pytest documentation to refer to install_from_resolve (Cherry pick of #18791) ([#18858](https://github.com/pantsbuild/pants/pull/18858))

## 2.16.0rc1 (Apr 23, 2023)

### User API Changes

* Upgrade Pex to 2.1.134. (Cherry-pick of #18785) ([#18789](https://github.com/pantsbuild/pants/pull/18789))

### Bug Fixes

* The `OverridesField.compute_value()` must return a hashable value. (Cherry-pick of #18787) ([#18799](https://github.com/pantsbuild/pants/pull/18799))

* Makes `adhoc_tool` actually respect the `extra_env_vars` field; adds tests (Cherry-pick of #18692) ([#18694](https://github.com/pantsbuild/pants/pull/18694))

* Use address as stable key when batching field sets in `lint`/`test` (Cherry-pick of #18725) ([#18734](https://github.com/pantsbuild/pants/pull/18734))

* Add `ruff` lint rules (Cherry-pick of #18716) ([#18739](https://github.com/pantsbuild/pants/pull/18739))

* Fix `repr` for `Field`s that don't define `default`. (Cherry-pick of #18719) ([#18724](https://github.com/pantsbuild/pants/pull/18724))

* Adds a fully-qualified path to a Python interpreter for `pex_binary` `RunRequest`s (Cherry-pick of #18699) ([#18700](https://github.com/pantsbuild/pants/pull/18700))

* Add timeout to remote store calls, and adjust name of cache timeout. (Cherry-pick of #18695) ([#18697](https://github.com/pantsbuild/pants/pull/18697))

* Bump minimum supported version of Pex to v2.1.129. (Cherry-pick of #18678) ([#18687](https://github.com/pantsbuild/pants/pull/18687))

* Fix JVM resource JAR creation on older Mac OSes (Cherry-pick of #18673) ([#18676](https://github.com/pantsbuild/pants/pull/18676))

### Documentation

* Update linter documentation to refer to `install_from_resolve` (Cherry-pick of #18781) ([#18782](https://github.com/pantsbuild/pants/pull/18782))

* Add PEP 621 `pyproject.toml` file docs (Cherry-pick of #18672) ([#18677](https://github.com/pantsbuild/pants/pull/18677))

* Improve lockfile consumption error message. (Cherry-pick of #18638) ([#18653](https://github.com/pantsbuild/pants/pull/18653))

* Document AWS CDK issue that multiple users have encountered. (Cherry-pick of #18656) ([#18666](https://github.com/pantsbuild/pants/pull/18666))

* Remove a python-specific tip from the general prereqs page. (Cherry-pick of #18637) ([#18650](https://github.com/pantsbuild/pants/pull/18650))

## 2.16.0rc0 (Mar 31, 2023)

### Bug fixes

* Ensure that sandboxed processes exit before their sandboxes are clean… ([#18640](https://github.com/pantsbuild/pants/pull/18640))

* Plumb entire lockfile/internal only code through `create_pex_from_targets` (Cherry-pick of #18622) ([#18634](https://github.com/pantsbuild/pants/pull/18634))

* Fix PexPEX invocations (Cherry-pick of #18610) ([#18633](https://github.com/pantsbuild/pants/pull/18633))

* narrow pex_binary files warning (Cherry-pick of #18619) ([#18628](https://github.com/pantsbuild/pants/pull/18628))

* Improve debug information for docker auth, and expose an environment variable. (Cherry-pick of #18599) ([#18604](https://github.com/pantsbuild/pants/pull/18604))

### Documentation

* Fix a string that should have been an f-string (Cherry-pick of #18608) ([#18611](https://github.com/pantsbuild/pants/pull/18611))

* Fix `./pants` -> `pants` in some docs and help strings. (Cherry-pick of #18596) ([#18606](https://github.com/pantsbuild/pants/pull/18606))

## 2.16.0a1 (Mar 24, 2023)

### New Features

* Always provide Python-for-Pants-scripts (Cherry-pick of #18433) ([#18495](https://github.com/pantsbuild/pants/pull/18495))

* Expose environment information on process metadata (Cherry-pick of #18458) ([#18463](https://github.com/pantsbuild/pants/pull/18463))

### User API Changes

* Upgrade Pex to 2.1.130. (Cherry-pick of #18576) ([#18578](https://github.com/pantsbuild/pants/pull/18578))

* Deprecate old-style custom tool lockfiles. (#18494) ([#18498](https://github.com/pantsbuild/pants/pull/18498))

* Let a user resolve shadow a tool lockfile of the same name (Cherry-pick of #18481) ([#18493](https://github.com/pantsbuild/pants/pull/18493))

* Audit and update requirements for Python tools. (cherrypick #18431) ([#18460](https://github.com/pantsbuild/pants/pull/18460))

### Bug fixes

* Ensure that a symlinked exported venv exists and is valid. (Cherry-pick of #18575) ([#18585](https://github.com/pantsbuild/pants/pull/18585))

* Fail fast for attempts to use `test --debug` with a docker environment (Cherry-pick of #18560) ([#18568](https://github.com/pantsbuild/pants/pull/18568))

* Declare ruff outputs as files. (Cherry-pick of #18551) ([#18557](https://github.com/pantsbuild/pants/pull/18557))

* Add support for Docker registry auth (Cherry-pick of #18541) ([#18549](https://github.com/pantsbuild/pants/pull/18549))

* Fix Poetry req synthesis for URLs with markers. (Cherry-pick of #18535) ([#18536](https://github.com/pantsbuild/pants/pull/18536))

* Preserve environment variables in `pantsd` to allow Docker auth. (Cherry-pick of #18465) ([#18468](https://github.com/pantsbuild/pants/pull/18468))

* Only expose the equiv of `from typing import *` in prelude files (Cherry-pick of #18452) ([#18455](https://github.com/pantsbuild/pants/pull/18455))

* Support type hints in prelude files. (Cherry-pick of #18442) ([#18449](https://github.com/pantsbuild/pants/pull/18449))

* Synthesized lockfile targets should never err on missing lockfiles. (Cherry-pick of #18406) ([#18447](https://github.com/pantsbuild/pants/pull/18447))

### Documentation

* First pass at `adhoc_tool` documentation (Cherry-pick of #18531) ([#18581](https://github.com/pantsbuild/pants/pull/18581))

* Update docs on running pants from sources with scie-pants. (Cherry-pick of #18513) ([#18514](https://github.com/pantsbuild/pants/pull/18514))

* Remove the superfluous updated: front matter from readme docs. (cherrypick of #18475) ([#18476](https://github.com/pantsbuild/pants/pull/18476))

* Expand lockfile documentation to its own page. (cherrypick of #18471) ([#18474](https://github.com/pantsbuild/pants/pull/18474))

## 2.16.0a0 (Mar 06, 2023)

### New Features

* Allow python tools to be installed from a user resolve. ([#18418](https://github.com/pantsbuild/pants/pull/18418))

* golang: add support for passthrough args for gofmt ([#18409](https://github.com/pantsbuild/pants/pull/18409))

* Add the ability for Pants to provide Python via a union (with a pyenv impl) ([#18352](https://github.com/pantsbuild/pants/pull/18352))

* Add `sources_fingerprint` to `peek` on source-creating targets ([#18383](https://github.com/pantsbuild/pants/pull/18383))

* New `BUILD` file symbols help info ([#18378](https://github.com/pantsbuild/pants/pull/18378))

* Visibility: support matching on target names. ([#18369](https://github.com/pantsbuild/pants/pull/18369))

* Support for `peek`ing at dependency/dependents rules ([#18112](https://github.com/pantsbuild/pants/pull/18112))

* Adds support for supplying "runnable" dependencies to the `execution_dependencies` field ([#18347](https://github.com/pantsbuild/pants/pull/18347))

* javascript: Support esm modules and commonjs specific javascript file extensions ([#18208](https://github.com/pantsbuild/pants/pull/18208))

* Adds `system_binary` target, which can be used to reproducibly find a pre-installed binary for use with `adhoc_tool` ([#18332](https://github.com/pantsbuild/pants/pull/18332))

* Enable running third-party Go `main` packages ([#17449](https://github.com/pantsbuild/pants/pull/17449))

### User API Changes

* Add `python311` runtime to `python_google_cloud_function` target ([#18405](https://github.com/pantsbuild/pants/pull/18405))

* Delegate lockfile requirement validation to Pex when possible. ([#18415](https://github.com/pantsbuild/pants/pull/18415))

* Upgrade Pex to 2.1.126. ([#18408](https://github.com/pantsbuild/pants/pull/18408))

* Deprecate the default interpreter constraints. ([#18390](https://github.com/pantsbuild/pants/pull/18390))

* Give pantsd more RAM by default. ([#18389](https://github.com/pantsbuild/pants/pull/18389))

### Plugin API Changes

* Support specifying a named resolve as the superset in a `PexRequirements`. ([#18397](https://github.com/pantsbuild/pants/pull/18397))

* Deprecate the `@rule_helper` decorator. ([#18330](https://github.com/pantsbuild/pants/pull/18330))

* Get rid of the `LockfileContent` class ([#18305](https://github.com/pantsbuild/pants/pull/18305))

### Bug fixes

* python: collect files with '[tool.ruff' sections as candidates for Ruff config files ([#18413](https://github.com/pantsbuild/pants/pull/18413))

* Fix OSError when running pants in systemd-nspawn container ([#18398](https://github.com/pantsbuild/pants/pull/18398))

* Fix `paths` issue with transitive excludes. ([#18396](https://github.com/pantsbuild/pants/pull/18396))

* Fix export-codgen with multiple output types from same input type ([#18373](https://github.com/pantsbuild/pants/pull/18373))

* Errors in `--loop` wait for changes rather than re-running immediately ([#18367](https://github.com/pantsbuild/pants/pull/18367))

* Support using `env()` in prelude macro files ([#18273](https://github.com/pantsbuild/pants/pull/18273))

* Docker environment uses a volume for named caches ([#18327](https://github.com/pantsbuild/pants/pull/18327))

* Load `fromfile` files relative to build root ([#18311](https://github.com/pantsbuild/pants/pull/18311))

* Ensure that the pep-517 backend shim works on Python 2.7. ([#18295](https://github.com/pantsbuild/pants/pull/18295))

### Documentation

* Update documentation on how to install the pants binary ([#18372](https://github.com/pantsbuild/pants/pull/18372))

* Some doc fixes suggested by users. ([#18393](https://github.com/pantsbuild/pants/pull/18393))

* docs: tidy up writing plugins tutorial ([#18380](https://github.com/pantsbuild/pants/pull/18380))

* docs: upgrade plugin writing tutorial to 2.15.0 ([#18371](https://github.com/pantsbuild/pants/pull/18371))

* Use valid container/app names in helm examples ([#18358](https://github.com/pantsbuild/pants/pull/18358))

* Remove defunct newsletter ([#18355](https://github.com/pantsbuild/pants/pull/18355))

* docs: mention code generation when troubleshooting missing imports from first-party code ([#18073](https://github.com/pantsbuild/pants/pull/18073))

* Fix documentation example for `python_awslambda` targets ([#18302](https://github.com/pantsbuild/pants/pull/18302))

* Change bool values to lowercase in TOML snippets ([#18299](https://github.com/pantsbuild/pants/pull/18299))


## 2.16.0.dev7 (Feb 17, 2023)

### New Features

* Allow exporting codegenerated files/resources ([#18236](https://github.com/pantsbuild/pants/pull/18236))

* python: teach tailor goal to create resource targets for py.typed marker files ([#18174](https://github.com/pantsbuild/pants/pull/18174))

* The beginnings of a Django plugin. ([#18173](https://github.com/pantsbuild/pants/pull/18173))

* Add backend for projects that use openstack/stevedore ([#18132](https://github.com/pantsbuild/pants/pull/18132))

* [python-infer]: allow ignoring unowned imports ([#18094](https://github.com/pantsbuild/pants/pull/18094))

* Print diff report when generating Python lockfiles. ([#17347](https://github.com/pantsbuild/pants/pull/17347))

### User API Changes

* Deprecates `experimental_run_shell_command` in favour of `run_shell_command` ([#18266](https://github.com/pantsbuild/pants/pull/18266))

* Deprecates `experimental_shell_command`, replacing with `shell_command` ([#18255](https://github.com/pantsbuild/pants/pull/18255))

* Extracts `backend.adhoc` package and `backend.experimental.adhoc` backend for `adhoc_tool` ([#18237](https://github.com/pantsbuild/pants/pull/18237))

* Upgrade Pex to 2.1.122. ([#18230](https://github.com/pantsbuild/pants/pull/18230))

* Relativize the pants_bin_name if necessary. ([#18204](https://github.com/pantsbuild/pants/pull/18204))

* Adjust the default for `root_output_directory` ([#18192](https://github.com/pantsbuild/pants/pull/18192))

* Visibility backend: adjust rule set selector syntax making path values default rather than target types. ([#18154](https://github.com/pantsbuild/pants/pull/18154))

* Adds fields to capture stdout/stderr to `experimental_run_in_sandbox` ([#18165](https://github.com/pantsbuild/pants/pull/18165))

* `shell_command`/`run_in_sandbox` workdir/output dir adjustments ([#18157](https://github.com/pantsbuild/pants/pull/18157))

* Default to the new "Dependents" header in the py_constraints report. ([#18142](https://github.com/pantsbuild/pants/pull/18142))

### Plugin API Changes

* Improve type inference for `@rule`s ([#17947](https://github.com/pantsbuild/pants/pull/17947))

* deprecate `frozen_after_init` ([#18127](https://github.com/pantsbuild/pants/pull/18127))

### Bug fixes

* go: support embed configuration in stdlib packages ([#18271](https://github.com/pantsbuild/pants/pull/18271))

* Upgrade to Lambdex 0.1.9 ([#18257](https://github.com/pantsbuild/pants/pull/18257))

* Delete override of expected `exe` name for `shfmt`. ([#18258](https://github.com/pantsbuild/pants/pull/18258))

* Fix bootstrap issue with `__defaults__` and environments. ([#18251](https://github.com/pantsbuild/pants/pull/18251))

* Allow breakpoints to be hit when run_in_sandbox is False ([#18244](https://github.com/pantsbuild/pants/pull/18244))

* Avoid bind-mounts for docker environments on macOS ([#18225](https://github.com/pantsbuild/pants/pull/18225))

* Move ruff from fmt to fix ([#18228](https://github.com/pantsbuild/pants/pull/18228))

* Stream large remote cache downloads directly to disk ([#18054](https://github.com/pantsbuild/pants/pull/18054))

* BUILD file target field default should respect values from `__defaults__`. ([#18172](https://github.com/pantsbuild/pants/pull/18172))

* Fix published wheel RECORDs. ([#18219](https://github.com/pantsbuild/pants/pull/18219))

* Always explicitly shutdown executors ([#18216](https://github.com/pantsbuild/pants/pull/18216))

* go: upgrade golangci-lint to fix issue with Go v1.20 ([#18207](https://github.com/pantsbuild/pants/pull/18207))

* go: disable coverage redesign experiment on Go v1.20+ ([#18205](https://github.com/pantsbuild/pants/pull/18205))

* Use `EnvironmentAwarePackageRequest` in many more contexts. ([#18203](https://github.com/pantsbuild/pants/pull/18203))

* Have lambdex create a new output file. ([#18200](https://github.com/pantsbuild/pants/pull/18200))

* Shutdown all threads as part of Scheduler shutdown ([#18166](https://github.com/pantsbuild/pants/pull/18166))

* Fix the dep inference scripts source root bug. ([#18164](https://github.com/pantsbuild/pants/pull/18164))

* Add the `environment` field to most Python binary target types ([#18144](https://github.com/pantsbuild/pants/pull/18144))

* go: don't check for `Target` attribute on stdlib packages ([#18148](https://github.com/pantsbuild/pants/pull/18148))

* go: fix backend to work when run in non-local environments ([#18140](https://github.com/pantsbuild/pants/pull/18140))

* Run `pyupgrade` until convergance ([#18128](https://github.com/pantsbuild/pants/pull/18128))

### Documentation

* docs: use an example black version that does not explode ([#18270](https://github.com/pantsbuild/pants/pull/18270))

* docs: fix typo ([#18238](https://github.com/pantsbuild/pants/pull/18238))

* Update the stated release target to match our desired reality. ([#18234](https://github.com/pantsbuild/pants/pull/18234))

* docs: add What's New section for 2.15.x release notes (#18226) ([#18232](https://github.com/pantsbuild/pants/pull/18232))

* Add warning about dependency inference + `extra_type_stubs`. ([#17076](https://github.com/pantsbuild/pants/pull/17076))

* docs: further updates to 2.16.x What's New ([#18227](https://github.com/pantsbuild/pants/pull/18227))

* Jacob Floyd/Huon Wilson updates to team page ([#18221](https://github.com/pantsbuild/pants/pull/18221))

* docs: add "What's New" section to 2.16 release notes ([#18146](https://github.com/pantsbuild/pants/pull/18146))

* Document the new get-pants.sh name. ([#18137](https://github.com/pantsbuild/pants/pull/18137))

* Add Pylint post ([#18079](https://github.com/pantsbuild/pants/pull/18079))

* Change to Pantsbuild's custom YouTube url ([#18133](https://github.com/pantsbuild/pants/pull/18133))

* Recommend checking the pantsup.sh script in. ([#18120](https://github.com/pantsbuild/pants/pull/18120))

* Don't update old release notes. ([#18123](https://github.com/pantsbuild/pants/pull/18123))

* Change `./pants` to `pants` in the docs ([#18121](https://github.com/pantsbuild/pants/pull/18121))


## 2.16.0.dev6 (Jan 29, 2023)

### New Features

* go: add `environment` field to `go_binary` ([#18113](https://github.com/pantsbuild/pants/pull/18113))

* Add experimental backend for ruff with lint and fmt goals ([#17945](https://github.com/pantsbuild/pants/pull/17945))

* Add support for `fmt` cue files. ([#18106](https://github.com/pantsbuild/pants/pull/18106))

* Add new experimental backend for CUE with initial support for the `lint` goal. ([#17943](https://github.com/pantsbuild/pants/pull/17943))

* Add yamllint as a lint tool for YAML sources ([#17821](https://github.com/pantsbuild/pants/pull/17821))

* lint: add pydocstyle python backend ([#17596](https://github.com/pantsbuild/pants/pull/17596))

### User API Changes

* Upgrade Pex to 2.1.121. ([#18037](https://github.com/pantsbuild/pants/pull/18037))

### Plugin API Changes

* Make the python dep inference script extensible. ([#17997](https://github.com/pantsbuild/pants/pull/17997))

* Remove some dead code from `lockfile.py` ([#18041](https://github.com/pantsbuild/pants/pull/18041))

### Bug fixes

* Inject a path-safe target spec into `experimental_shell_command` etc processes ([#18092](https://github.com/pantsbuild/pants/pull/18092))

* docker: Allow overriding FROM args when determining upstream image dependencies ([#18009](https://github.com/pantsbuild/pants/pull/18009))

* Make mypy cache per-repo ([#18043](https://github.com/pantsbuild/pants/pull/18043))

* Fix caching of PATH lookups in remote execution ([#18026](https://github.com/pantsbuild/pants/pull/18026))

### Documentation

* docs: make tutorials to get started writing plugins visible on readme pages ([#18083](https://github.com/pantsbuild/pants/pull/18083))

* Document new pants launcher binary, aka scie-pants. ([#18056](https://github.com/pantsbuild/pants/pull/18056))

* Front matter for new tutorial pages. ([#18074](https://github.com/pantsbuild/pants/pull/18074))

* Cosmetic fix for current value information in help output for pass-through arguments. ([#18051](https://github.com/pantsbuild/pants/pull/18051))

* docs: add pydocstyle to the docs and help reference ([#18033](https://github.com/pantsbuild/pants/pull/18033))

* docs: add tutorial to get started writing plugins: No 3 ([#18018](https://github.com/pantsbuild/pants/pull/18018))


## 2.16.0.dev5 (Jan 16, 2023)

### New Features

* New `env()` BUILD file function. ([#17652](https://github.com/pantsbuild/pants/pull/17652))

* Support REPL command history. ([#17959](https://github.com/pantsbuild/pants/pull/17959))

* Resolve Python dep inference ambiguity via locality. ([#17931](https://github.com/pantsbuild/pants/pull/17931))

* Add targets to re-wrap source files in different `SourcesField` types. ([#17877](https://github.com/pantsbuild/pants/pull/17877))

* Allow plugins to add custom schema/authority URL handler rules ([#17898](https://github.com/pantsbuild/pants/pull/17898))

* Support freezing command line args and env vars into pex binaries. ([#17905](https://github.com/pantsbuild/pants/pull/17905))

* Support catching `@rule` errors ([#17911](https://github.com/pantsbuild/pants/pull/17911))

### User API Changes

* Ugrade Pex to 2.1.120 ([#17957](https://github.com/pantsbuild/pants/pull/17957))

* Adds `workdir` field for `experimental_shell_command` and friends ([#17928](https://github.com/pantsbuild/pants/pull/17928))

### Bug fixes

* Let pyright see dependencies in other source roots. ([#18014](https://github.com/pantsbuild/pants/pull/18014))

* go: gather and link transitive prebuilt object files for cgo mode ([#17971](https://github.com/pantsbuild/pants/pull/17971))

* add skip_pyright field to python test targets ([#17960](https://github.com/pantsbuild/pants/pull/17960))

* Allow `experimental_shell_command`/`experimental_run_in_sandbox` to specify `output_`s from anywhere under the buildroot ([#17938](https://github.com/pantsbuild/pants/pull/17938))

* Do not load the BUILD file prelude (macros) in the bootstrap scheduler. ([#17939](https://github.com/pantsbuild/pants/pull/17939))

### Documentation

* WSL disclaimer in Getting Started/Prerequisites ([#18000](https://github.com/pantsbuild/pants/pull/18000))

* Add Daniel Goldman and Darcy Shen to team page ([#17921](https://github.com/pantsbuild/pants/pull/17921))

* Clarify runtime vs. complete_platforms for serverless. ([#18001](https://github.com/pantsbuild/pants/pull/18001))

* docs: add tutorial to get started writing plugins: No 2 ([#17890](https://github.com/pantsbuild/pants/pull/17890))

* docs: generate a JSON schema file to be used in IDEs when editing pants.toml ([#17915](https://github.com/pantsbuild/pants/pull/17915))

* docs: fix markdown inline code typo in a docstring ([#18002](https://github.com/pantsbuild/pants/pull/18002))

* fix type in `check` help output ([#17969](https://github.com/pantsbuild/pants/pull/17969))

* Document how to update the pants script. ([#17976](https://github.com/pantsbuild/pants/pull/17976))

* Add Kaiko to "who uses Pants" page. ([#17949](https://github.com/pantsbuild/pants/pull/17949))

* docs: provide a link to Google Cloud Function in the backend docstring ([#17948](https://github.com/pantsbuild/pants/pull/17948))

* docs: add info about beta stage support of protobuf for Scala and Java ([#17935](https://github.com/pantsbuild/pants/pull/17935))

* docs: add the first tutorial on writing plugins to readme docs directory ([#17930](https://github.com/pantsbuild/pants/pull/17930))

* docs: reformat the kotlin docs to have better line breaks on readme.com ([#17929](https://github.com/pantsbuild/pants/pull/17929))

* Update and reorganize resource hub ([#17922](https://github.com/pantsbuild/pants/pull/17922))

* Add Payhere to user list. ([#17917](https://github.com/pantsbuild/pants/pull/17917))

* Nudge more technical support toward GH Discussions ([#17906](https://github.com/pantsbuild/pants/pull/17906))

* go: update docs to remove caveats about implemented features ([#17913](https://github.com/pantsbuild/pants/pull/17913))


## 2.16.0.dev4 (Dec 30, 2022)

### New Features

* Add [buf] config and config_discovery options ([#17885](https://github.com/pantsbuild/pants/pull/17885))

* New help topic: `backends`. ([#17600](https://github.com/pantsbuild/pants/pull/17600))

* Make pants work when the uid doesn't map to a user. ([#17881](https://github.com/pantsbuild/pants/pull/17881))

* Make JVM sources runnable ([#17847](https://github.com/pantsbuild/pants/pull/17847))

* Support `python_requirement` as a `run`/`experimental_run_in_sandbox` target ([#17864](https://github.com/pantsbuild/pants/pull/17864))

* Support `experimental_run_in_sandbox`/`./pants run` for `jvm_artifact` targets ([#17827](https://github.com/pantsbuild/pants/pull/17827))

* go: support the `go test` profiling options ([#17836](https://github.com/pantsbuild/pants/pull/17836))

* Add output_path field to python_distribution. ([#17841](https://github.com/pantsbuild/pants/pull/17841))

### User API Changes

* Upgrade default mypy-protobuf version to 3.4 ([#17887](https://github.com/pantsbuild/pants/pull/17887))

* allow each resolve to be exported for multiple python interpreters ([#17711](https://github.com/pantsbuild/pants/pull/17711))

* More default Python module mappings. ([#17879](https://github.com/pantsbuild/pants/pull/17879))

* Make export cleanup a subset of `dist/export`, not the whole thing ([#17849](https://github.com/pantsbuild/pants/pull/17849))

* Unify the messages for lockfile validation errors. ([#17842](https://github.com/pantsbuild/pants/pull/17842))

* Unify validation of tool and user lockfile metadata. ([#17834](https://github.com/pantsbuild/pants/pull/17834))

* Detect Pants-generated lockfiles before attempting to validate. ([#17833](https://github.com/pantsbuild/pants/pull/17833))

### Plugin API Changes

* Remove `immutable_input_digests` from shell code ([#17886](https://github.com/pantsbuild/pants/pull/17886))

* Default `use_pantsd` to `False` in `run_pants` ([#17874](https://github.com/pantsbuild/pants/pull/17874))

* Remove the ToolCustomLockfile/ToolDefaultLockfile classes. ([#17843](https://github.com/pantsbuild/pants/pull/17843))

### Bug fixes

* scala: support scala v3 which has different compiler/library artifacts ([#17855](https://github.com/pantsbuild/pants/pull/17855))

### Performance

* Bring back hardlinking big files ([#17878](https://github.com/pantsbuild/pants/pull/17878))

* Don't invalidate watched files if non-perms metadata changed ([#17875](https://github.com/pantsbuild/pants/pull/17875))

### Documentation

* docs: mention name clashing between custom goals and options when writing plugins ([#17899](https://github.com/pantsbuild/pants/pull/17899))

* docs: add tutorial to get started writing plugins: No 1 ([#17732](https://github.com/pantsbuild/pants/pull/17732))

* Document batched `pytest` execution. ([#17845](https://github.com/pantsbuild/pants/pull/17845))

* Tweak the docs about __defaults__. ([#17829](https://github.com/pantsbuild/pants/pull/17829))

* docs: extend python test goal with info on collecting tests with pytests ([#17894](https://github.com/pantsbuild/pants/pull/17894))


## 2.16.0.dev3 (Dec 16, 2022)

### New Features

* Allow targets that implement `RunFieldSet` to be executed in the sandbox for side-effects ([#17716](https://github.com/pantsbuild/pants/pull/17716))

* `python_requirements` target generator can parse PEP 621 pyproject.toml files ([#16932](https://github.com/pantsbuild/pants/pull/16932))

### User API Changes

* Bump default version of shfmt from 3.2.4 to 3.6.0 ([#17777](https://github.com/pantsbuild/pants/pull/17777))

* An enum of Python export formats. ([#17800](https://github.com/pantsbuild/pants/pull/17800))

* Add export-codegen goal to more backends ([#17773](https://github.com/pantsbuild/pants/pull/17773))

* Adds `execution_dependencies` for `experimental_shell_command` ([#17743](https://github.com/pantsbuild/pants/pull/17743))

### Plugin API Changes

* Remove boilerplate for run and test plugins ([#17774](https://github.com/pantsbuild/pants/pull/17774))

### Bug fixes

* go: detect when `go.sum` needs additional entries filled in ([#17811](https://github.com/pantsbuild/pants/pull/17811))

* go: pass module sources through to linker if `${SRCDIR}` is referenced ([#17780](https://github.com/pantsbuild/pants/pull/17780))

* go: improve options passed to assembler invocations ([#17796](https://github.com/pantsbuild/pants/pull/17796))

* Explicitly use "python" ijson backend ([#17787](https://github.com/pantsbuild/pants/pull/17787))

* Do not clear the `pantsd` log while restarting ([#17783](https://github.com/pantsbuild/pants/pull/17783))

* Restore support for :all: in `only_binary`/`no_binary`. ([#17779](https://github.com/pantsbuild/pants/pull/17779))

* go: remove notion of separate `__obj__` directory ([#17775](https://github.com/pantsbuild/pants/pull/17775))

* Visibility: empty selector should match no target. ([#17763](https://github.com/pantsbuild/pants/pull/17763))

* [Visibility] `**/..` globs can match root level files ([#17681](https://github.com/pantsbuild/pants/pull/17681))

* Visibility: fix rules path for generated targets. ([#17760](https://github.com/pantsbuild/pants/pull/17760))

### Documentation

* Documentation for the new visibility rules ([#17632](https://github.com/pantsbuild/pants/pull/17632))

* Add Doctrine's eng blog post and example repo to resource hub. ([#17810](https://github.com/pantsbuild/pants/pull/17810))

* Add Astranis to user list. ([#17812](https://github.com/pantsbuild/pants/pull/17812))

* Add Doctrine to user list ([#17793](https://github.com/pantsbuild/pants/pull/17793))

* Doc: update `Get` docstring for multiple inputs. ([#17730](https://github.com/pantsbuild/pants/pull/17730))


## 2.16.0.dev2 (Dec 08, 2022)

### New Features

* go: use target spec for coverage output directories plus support import path ([#17734](https://github.com/pantsbuild/pants/pull/17734))

* go: add `assembler_flags` field for adding arbitrary extra assembler flags ([#17731](https://github.com/pantsbuild/pants/pull/17731))

* Expose target field defaults in BUILD files. ([#17649](https://github.com/pantsbuild/pants/pull/17649))

* Add a new "preamble" plugin ([#17682](https://github.com/pantsbuild/pants/pull/17682))

* go: support code coverage over multiple packages during single test ([#17701](https://github.com/pantsbuild/pants/pull/17701))

* go: add `linker_flags` field to `go_mod` and `go_binary` target types ([#17697](https://github.com/pantsbuild/pants/pull/17697))

* go: add `compiler_flags` field for adding arbitrary extra compiler flags ([#17683](https://github.com/pantsbuild/pants/pull/17683))

### User API Changes

* Include transitive requirements missing for `python_distribution`. ([#17594](https://github.com/pantsbuild/pants/pull/17594))

* Extend default module mapping for Python 3rd-party dependency inference: pysocks and atlassian-python-api ([#17654](https://github.com/pantsbuild/pants/pull/17654))

### Bug fixes

* Test DebugAdapter requests, and fix issues ([#17678](https://github.com/pantsbuild/pants/pull/17678))

* chdir in `rule_runner.run_interactive_process` ([#17722](https://github.com/pantsbuild/pants/pull/17722))

* More precise running workunit for processes executing remotely ([#17719](https://github.com/pantsbuild/pants/pull/17719))

* Don't strip the input of a `DictOption` file config ([#17705](https://github.com/pantsbuild/pants/pull/17705))

* Visibility rules: error if more than one declaration per BUILD file. ([#17669](https://github.com/pantsbuild/pants/pull/17669))

* Allow JVM source to depend on relocated_files target ([#17005](https://github.com/pantsbuild/pants/pull/17005))

* Fix bug in Go test result exit code interpretation. ([#17661](https://github.com/pantsbuild/pants/pull/17661))

### Performance

* Immutably hardlink "large" files in a sandbox ([#17520](https://github.com/pantsbuild/pants/pull/17520))

* Run python sources with a VenvPex ([#17700](https://github.com/pantsbuild/pants/pull/17700))

### Documentation

* Doc fixes and updates: ([#17708](https://github.com/pantsbuild/pants/pull/17708))

* docs: tidy up Writing plugins : rules-api directory files ([#17710](https://github.com/pantsbuild/pants/pull/17710))

* Update docker docs to clarify dependency handling. ([#17655](https://github.com/pantsbuild/pants/pull/17655))


## 2.16.0.dev1 (Nov 27, 2022)

### New Features

* go: address sanitizer support ([#17651](https://github.com/pantsbuild/pants/pull/17651))

* go: add support for C/C++ memory sanitizer ([#17644](https://github.com/pantsbuild/pants/pull/17644))

* shell: add `experimental_test_shell_command` for arbitrary shell-driven tests ([#17640](https://github.com/pantsbuild/pants/pull/17640))

* support Go data race detector ([#17510](https://github.com/pantsbuild/pants/pull/17510))

* Add `Field.none_is_valid_value` bool class var option. ([#17577](https://github.com/pantsbuild/pants/pull/17577))

### User API Changes

* Remove deprecated `run --cleanup` option. ([#17647](https://github.com/pantsbuild/pants/pull/17647))

* Upgrade Pex to 2.1.116. ([#17637](https://github.com/pantsbuild/pants/pull/17637))

### Plugin API Changes

* Remove deprecated Platform.current. ([#17646](https://github.com/pantsbuild/pants/pull/17646))

### Bug fixes

* Fix twine env vars propagation for `publish` goal. ([#17650](https://github.com/pantsbuild/pants/pull/17650))

* Support `source=None` for `docker_image` targets. ([#17578](https://github.com/pantsbuild/pants/pull/17578))

* Specify local environment for python source analysis goal ([#17603](https://github.com/pantsbuild/pants/pull/17603))

* go: allow use of `go_asm.h` assembly header in assembly files ([#17611](https://github.com/pantsbuild/pants/pull/17611))

* Visibility rule glob tweaks for `*` and `**` ([#17588](https://github.com/pantsbuild/pants/pull/17588))

### Documentation

* Fix broken docs links to manual build instructions ([#17608](https://github.com/pantsbuild/pants/pull/17608))

* Docs: improve docs on handling option values in cli ([#17506](https://github.com/pantsbuild/pants/pull/17506))


## 2.16.0.dev0 (Nov 19, 2022)

### New Features

* Add `environment=` to `experimental_shell_command`. ([#17575](https://github.com/pantsbuild/pants/pull/17575))

* Add debug goals to python ([#17057](https://github.com/pantsbuild/pants/pull/17057))

* Target visibility rules ([#17401](https://github.com/pantsbuild/pants/pull/17401))

* Emit a `__run.sh` into InteractiveProcess sandboxes. ([#17532](https://github.com/pantsbuild/pants/pull/17532))

* Support newer pip versions. ([#17555](https://github.com/pantsbuild/pants/pull/17555))

* New dependency rules Plugin API ([#17550](https://github.com/pantsbuild/pants/pull/17550))

* Export metadata about a packaged docker image ([#17299](https://github.com/pantsbuild/pants/pull/17299))

* Don't require hardcoded name in `python_distribution.provides` ([#17522](https://github.com/pantsbuild/pants/pull/17522))

* Add `per_platform` object ([#17334](https://github.com/pantsbuild/pants/pull/17334))

* Process output capturing is symlink-aware ([#17496](https://github.com/pantsbuild/pants/pull/17496))

* go: introduce `GoBuildOptions` and `cgo_enabled` field ([#17475](https://github.com/pantsbuild/pants/pull/17475))

* Disambiguate Python module providers by level of ancestry. ([#17489](https://github.com/pantsbuild/pants/pull/17489))

* go: support ".syso" prebuilt object files ([#17479](https://github.com/pantsbuild/pants/pull/17479))

* Add Docker registries `use_local_alias` configuration option. ([#17265](https://github.com/pantsbuild/pants/pull/17265))

* Proposal for supporting Jar shading rules ([#17251](https://github.com/pantsbuild/pants/pull/17251))

* A --resolve flag, to specify the resolves to export. ([#17416](https://github.com/pantsbuild/pants/pull/17416))

* Handle duplicate JAR entries in `deploy_jar` ([#17419](https://github.com/pantsbuild/pants/pull/17419))

### User API Changes

* Upgrade default version of  golangci-lint to 1.50.1 ([#17574](https://github.com/pantsbuild/pants/pull/17574))

* Deprecate the old export semantics. ([#17465](https://github.com/pantsbuild/pants/pull/17465))

* Add `restartable` field to `python_sources` ([#17400](https://github.com/pantsbuild/pants/pull/17400))

* Deprecate the `# Dependees` column name in the py-constraints summary. ([#17399](https://github.com/pantsbuild/pants/pull/17399))

* Rename the dependees goal to dependents. ([#17397](https://github.com/pantsbuild/pants/pull/17397))

* Rename --changed-dependees to --changed-dependents ([#17395](https://github.com/pantsbuild/pants/pull/17395))

### Bug fixes

* Allow for `run --debug-adapter` to match breakpoints when source is running in a sandbox ([#17566](https://github.com/pantsbuild/pants/pull/17566))

* Created an `NpxToolBase` as an inheritable Subsystem for `nodejs` tools ([#17567](https://github.com/pantsbuild/pants/pull/17567))

* Fix loading of `SymlinkNodes` from the `Store`. ([#17549](https://github.com/pantsbuild/pants/pull/17549))

* Do not try to create `""` output directory in `CreateArchive` ([#17538](https://github.com/pantsbuild/pants/pull/17538))

* Persist digests before emitting them in `fs_util` ([#17525](https://github.com/pantsbuild/pants/pull/17525))

* Fix memoization of `CoarsenedTarget.closure` ([#17516](https://github.com/pantsbuild/pants/pull/17516))

* Support parsing targets from additional paths not containing BUILD files. ([#17451](https://github.com/pantsbuild/pants/pull/17451))

* Ensure lockfile target exists before injecting a dependency to it. ([#17365](https://github.com/pantsbuild/pants/pull/17365))

* Ensure correct eq/hash semantics for PythonArtifact. ([#17484](https://github.com/pantsbuild/pants/pull/17484))

* Isolate config seed values from the DEFAULT section. ([#17474](https://github.com/pantsbuild/pants/pull/17474))

* Fix poorly understood stdout redirection issue. ([#17471](https://github.com/pantsbuild/pants/pull/17471))

* Fix propagation of the remote-execution-append-only-caches path  ([#17469](https://github.com/pantsbuild/pants/pull/17469))

* Pyright should grab non-transitive dependencies and make them available in the sandbox ([#17235](https://github.com/pantsbuild/pants/pull/17235))

* Plumb symlink support through the Pants engine ([#16844](https://github.com/pantsbuild/pants/pull/16844))

* Flip the default for `pull` on `docker_image` to `False` ([#17459](https://github.com/pantsbuild/pants/pull/17459))

* Merge pytest addopts ([#16614](https://github.com/pantsbuild/pants/pull/16614))

* Fix dep inference from `shuint2_tests` targets. ([#17417](https://github.com/pantsbuild/pants/pull/17417))

* Fix `EnvironmentName` used in `test` runs ([#17412](https://github.com/pantsbuild/pants/pull/17412))

* Add the m1 homebrew bin dir to the system binary search path. ([#17411](https://github.com/pantsbuild/pants/pull/17411))

* Restore debug hints for `test` execution ([#17406](https://github.com/pantsbuild/pants/pull/17406))

### Performance

* Skip loading of local cache data when possible ([#17495](https://github.com/pantsbuild/pants/pull/17495))

* Symlink site-packages into `pylint` venvs when possible. ([#17488](https://github.com/pantsbuild/pants/pull/17488))

* Filter coarsened targets to only those that are relevant in `pylint` runner rule ([#17487](https://github.com/pantsbuild/pants/pull/17487))

### Documentation

* correct docs: direnv can't save ulimit ([#17561](https://github.com/pantsbuild/pants/pull/17561))

* Update team pages for SJ and Dan! ([#17534](https://github.com/pantsbuild/pants/pull/17534))

* Fix line breaks in a docs page. ([#17527](https://github.com/pantsbuild/pants/pull/17527))

* Clarify how `__defaults__` apply to target generators. ([#17493](https://github.com/pantsbuild/pants/pull/17493))

* Fix typo in docs: debug-adaptor should be debug-adapter ([#17452](https://github.com/pantsbuild/pants/pull/17452))

* Update `nuke_if_too_big` documentation ([#17429](https://github.com/pantsbuild/pants/pull/17429))

* Fix version templating in `vcs_version` docs ([#17423](https://github.com/pantsbuild/pants/pull/17423))