Skip to main content

Test support for writing Pants plugins.

Project description

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

The latest documentation can be found at 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.

Backends

Python

The Python backend has two new linters:

pydocstyle is now supported for linting Python doc strings. Enable the pants.backend.python.lint.pydocstyle backend to add this support.

ruff is now supported for linting and formatting Python code. Enable the pants.backend.experimental.python.lint.ruff backend to add this support.

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.

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 when building 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.
  • 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.

Shell

A new experimental_test_shell_command target type has been added to allow defining arbitrary shell commands as tests which can be invoked using the ./pants test goal.

experimental_shell_command and experimental_run_shell_command have graduated to no longer have their experimental_ prefixes.

shell_command now supports the environment field for running in non-local environments.

New: Preamble

The new "preamble" plugin allows linting files to ensure they start with specific text. Enable the pants.backend.tools.preamble backend to add this support.

New: CUE

Pants now supports the CUE language for defining, generating, and validating configuration data. Enable the pants.backend.experimental.cue backend to add this support.

2.16.0.dev7 (Feb 17, 2023)

New Features

  • Allow exporting codegenerated files/resources (#18236)

  • python: teach tailor goal to create resource targets for py.typed marker files (#18174)

  • The beginnings of a Django plugin. (#18173)

  • Add backend for projects that use openstack/stevedore (#18132)

  • [python-infer]: allow ignoring unowned imports (#18094)

  • Print diff report when generating Python lockfiles. (#17347)

User API Changes

  • Deprecates experimental_run_shell_command in favour of run_shell_command (#18266)

  • Deprecates experimental_shell_command, replacing with shell_command (#18255)

  • Extracts backend.adhoc package and backend.experimental.adhoc backend for adhoc_tool (#18237)

  • Upgrade Pex to 2.1.122. (#18230)

  • Relativize the pants_bin_name if necessary. (#18204)

  • Adjust the default for root_output_directory (#18192)

  • Visibility backend: adjust rule set selector syntax making path values default rather than target types. (#18154)

  • Adds fields to capture stdout/stderr to experimental_run_in_sandbox (#18165)

  • shell_command/run_in_sandbox workdir/output dir adjustments (#18157)

  • Default to the new "Dependents" header in the py_constraints report. (#18142)

Plugin API Changes

  • Improve type inference for @rules (#17947)

  • deprecate frozen_after_init (#18127)

Bug fixes

  • go: support embed configuration in stdlib packages (#18271)

  • Upgrade to Lambdex 0.1.9 (#18257)

  • Delete override of expected exe name for shfmt. (#18258)

  • Fix bootstrap issue with __defaults__ and environments. (#18251)

  • Allow breakpoints to be hit when run_in_sandbox is False (#18244)

  • Avoid bind-mounts for docker environments on macOS (#18225)

  • Move ruff from fmt to fix (#18228)

  • Stream large remote cache downloads directly to disk (#18054)

  • BUILD file target field default should respect values from __defaults__. (#18172)

  • Fix published wheel RECORDs. (#18219)

  • Always explicitly shutdown executors (#18216)

  • go: upgrade golangci-lint to fix issue with Go v1.20 (#18207)

  • go: disable coverage redesign experiment on Go v1.20+ (#18205)

  • Use EnvironmentAwarePackageRequest in many more contexts. (#18203)

  • Have lambdex create a new output file. (#18200)

  • Shutdown all threads as part of Scheduler shutdown (#18166)

  • Fix the dep inference scripts source root bug. (#18164)

  • Add the environment field to most Python binary target types (#18144)

  • go: don't check for Target attribute on stdlib packages (#18148)

  • go: fix backend to work when run in non-local environments (#18140)

  • Run pyupgrade until convergance (#18128)

Documentation

  • docs: use an example black version that does not explode (#18270)

  • docs: fix typo (#18238)

  • Update the stated release target to match our desired reality. (#18234)

  • docs: add What's New section for 2.15.x release notes (#18226) (#18232)

  • Add warning about dependency inference + extra_type_stubs. (#17076)

  • docs: further updates to 2.16.x What's New (#18227)

  • Jacob Floyd/Huon Wilson updates to team page (#18221)

  • docs: add "What's New" section to 2.16 release notes (#18146)

  • Document the new get-pants.sh name. (#18137)

  • Add Pylint post (#18079)

  • Change to Pantsbuild's custom YouTube url (#18133)

  • Recommend checking the pantsup.sh script in. (#18120)

  • Don't update old release notes. (#18123)

  • Change ./pants to pants in the docs (#18121)

2.16.0.dev6 (Jan 29, 2023)

New Features

  • go: add environment field to go_binary (#18113)

  • Add experimental backend for ruff with lint and fmt goals (#17945)

  • Add support for fmt cue files. (#18106)

  • Add new experimental backend for CUE with initial support for the lint goal. (#17943)

  • Add yamllint as a lint tool for YAML sources (#17821)

  • lint: add pydocstyle python backend (#17596)

User API Changes

  • Upgrade Pex to 2.1.121. (#18037)

Plugin API Changes

  • Make the python dep inference script extensible. (#17997)

  • Remove some dead code from lockfile.py (#18041)

Bug fixes

  • Inject a path-safe target spec into experimental_shell_command etc processes (#18092)

  • docker: Allow overriding FROM args when determining upstream image dependencies (#18009)

  • Make mypy cache per-repo (#18043)

  • Fix caching of PATH lookups in remote execution (#18026)

Documentation

  • docs: make tutorials to get started writing plugins visible on readme pages (#18083)

  • Document new pants launcher binary, aka scie-pants. (#18056)

  • Front matter for new tutorial pages. (#18074)

  • Cosmetic fix for current value information in help output for pass-through arguments. (#18051)

  • docs: add pydocstyle to the docs and help reference (#18033)

  • docs: add tutorial to get started writing plugins: No 3 (#18018)

2.16.0.dev5 (Jan 16, 2023)

New Features

  • New env() BUILD file function. (#17652)

  • Support REPL command history. (#17959)

  • Resolve Python dep inference ambiguity via locality. (#17931)

  • Add targets to re-wrap source files in different SourcesField types. (#17877)

  • Allow plugins to add custom schema/authority URL handler rules (#17898)

  • Support freezing command line args and env vars into pex binaries. (#17905)

  • Support catching @rule errors (#17911)

User API Changes

  • Ugrade Pex to 2.1.120 (#17957)

  • Adds workdir field for experimental_shell_command and friends (#17928)

Bug fixes

  • Let pyright see dependencies in other source roots. (#18014)

  • go: gather and link transitive prebuilt object files for cgo mode (#17971)

  • add skip_pyright field to python test targets (#17960)

  • Allow experimental_shell_command/experimental_run_in_sandbox to specify output_s from anywhere under the buildroot (#17938)

  • Do not load the BUILD file prelude (macros) in the bootstrap scheduler. (#17939)

Documentation

  • WSL disclaimer in Getting Started/Prerequisites (#18000)

  • Add Daniel Goldman and Darcy Shen to team page (#17921)

  • Clarify runtime vs. complete_platforms for serverless. (#18001)

  • docs: add tutorial to get started writing plugins: No 2 (#17890)

  • docs: generate a JSON schema file to be used in IDEs when editing pants.toml (#17915)

  • docs: fix markdown inline code typo in a docstring (#18002)

  • fix type in check help output (#17969)

  • Document how to update the pants script. (#17976)

  • Add Kaiko to "who uses Pants" page. (#17949)

  • docs: provide a link to Google Cloud Function in the backend docstring (#17948)

  • docs: add info about beta stage support of protobuf for Scala and Java (#17935)

  • docs: add the first tutorial on writing plugins to readme docs directory (#17930)

  • docs: reformat the kotlin docs to have better line breaks on readme.com (#17929)

  • Update and reorganize resource hub (#17922)

  • Add Payhere to user list. (#17917)

  • Nudge more technical support toward GH Discussions (#17906)

  • go: update docs to remove caveats about implemented features (#17913)

2.16.0.dev4 (Dec 30, 2022)

New Features

  • Add [buf] config and config_discovery options (#17885)

  • New help topic: backends. (#17600)

  • Make pants work when the uid doesn't map to a user. (#17881)

  • Make JVM sources runnable (#17847)

  • Support python_requirement as a run/experimental_run_in_sandbox target (#17864)

  • Support experimental_run_in_sandbox/./pants run for jvm_artifact targets (#17827)

  • go: support the go test profiling options (#17836)

  • Add output_path field to python_distribution. (#17841)

User API Changes

  • Upgrade default mypy-protobuf version to 3.4 (#17887)

  • allow each resolve to be exported for multiple python interpreters (#17711)

  • More default Python module mappings. (#17879)

  • Make export cleanup a subset of dist/export, not the whole thing (#17849)

  • Unify the messages for lockfile validation errors. (#17842)

  • Unify validation of tool and user lockfile metadata. (#17834)

  • Detect Pants-generated lockfiles before attempting to validate. (#17833)

Plugin API Changes

  • Remove immutable_input_digests from shell code (#17886)

  • Default use_pantsd to False in run_pants (#17874)

  • Remove the ToolCustomLockfile/ToolDefaultLockfile classes. (#17843)

Bug fixes

  • scala: support scala v3 which has different compiler/library artifacts (#17855)

Performance

  • Bring back hardlinking big files (#17878)

  • Don't invalidate watched files if non-perms metadata changed (#17875)

Documentation

  • docs: mention name clashing between custom goals and options when writing plugins (#17899)

  • docs: add tutorial to get started writing plugins: No 1 (#17732)

  • Document batched pytest execution. (#17845)

  • Tweak the docs about defaults. (#17829)

  • docs: extend python test goal with info on collecting tests with pytests (#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)

  • python_requirements target generator can parse PEP 621 pyproject.toml files (#16932)

User API Changes

  • Bump default version of shfmt from 3.2.4 to 3.6.0 (#17777)

  • An enum of Python export formats. (#17800)

  • Add export-codegen goal to more backends (#17773)

  • Adds execution_dependencies for experimental_shell_command (#17743)

Plugin API Changes

  • Remove boilerplate for run and test plugins (#17774)

Bug fixes

  • go: detect when go.sum needs additional entries filled in (#17811)

  • go: pass module sources through to linker if ${SRCDIR} is referenced (#17780)

  • go: improve options passed to assembler invocations (#17796)

  • Explicitly use "python" ijson backend (#17787)

  • Do not clear the pantsd log while restarting (#17783)

  • Restore support for :all: in only_binary/no_binary. (#17779)

  • go: remove notion of separate __obj__ directory (#17775)

  • Visibility: empty selector should match no target. (#17763)

  • [Visibility] **/.. globs can match root level files (#17681)

  • Visibility: fix rules path for generated targets. (#17760)

Documentation

  • Documentation for the new visibility rules (#17632)

  • Add Doctrine's eng blog post and example repo to resource hub. (#17810)

  • Add Astranis to user list. (#17812)

  • Add Doctrine to user list (#17793)

  • Doc: update Get docstring for multiple inputs. (#17730)

2.16.0.dev2 (Dec 08, 2022)

New Features

  • go: use target spec for coverage output directories plus support import path (#17734)

  • go: add assembler_flags field for adding arbitrary extra assembler flags (#17731)

  • Expose target field defaults in BUILD files. (#17649)

  • Add a new "preamble" plugin (#17682)

  • go: support code coverage over multiple packages during single test (#17701)

  • go: add linker_flags field to go_mod and go_binary target types (#17697)

  • go: add compiler_flags field for adding arbitrary extra compiler flags (#17683)

User API Changes

  • Include transitive requirements missing for python_distribution. (#17594)

  • Extend default module mapping for Python 3rd-party dependency inference: pysocks and atlassian-python-api (#17654)

Bug fixes

  • Test DebugAdapter requests, and fix issues (#17678)

  • chdir in rule_runner.run_interactive_process (#17722)

  • More precise running workunit for processes executing remotely (#17719)

  • Don't strip the input of a DictOption file config (#17705)

  • Visibility rules: error if more than one declaration per BUILD file. (#17669)

  • Allow JVM source to depend on relocated_files target (#17005)

  • Fix bug in Go test result exit code interpretation. (#17661)

Performance

  • Immutably hardlink "large" files in a sandbox (#17520)

  • Run python sources with a VenvPex (#17700)

Documentation

  • Doc fixes and updates: (#17708)

  • docs: tidy up Writing plugins : rules-api directory files (#17710)

  • Update docker docs to clarify dependency handling. (#17655)

2.16.0.dev1 (Nov 27, 2022)

New Features

  • go: address sanitizer support (#17651)

  • go: add support for C/C++ memory sanitizer (#17644)

  • shell: add experimental_test_shell_command for arbitrary shell-driven tests (#17640)

  • support Go data race detector (#17510)

  • Add Field.none_is_valid_value bool class var option. (#17577)

User API Changes

  • Remove deprecated run --cleanup option. (#17647)

  • Upgrade Pex to 2.1.116. (#17637)

Plugin API Changes

  • Remove deprecated Platform.current. (#17646)

Bug fixes

  • Fix twine env vars propagation for publish goal. (#17650)

  • Support source=None for docker_image targets. (#17578)

  • Specify local environment for python source analysis goal (#17603)

  • go: allow use of go_asm.h assembly header in assembly files (#17611)

  • Visibility rule glob tweaks for * and ** (#17588)

Documentation

  • Fix broken docs links to manual build instructions (#17608)

  • Docs: improve docs on handling option values in cli (#17506)

2.16.0.dev0 (Nov 19, 2022)

New Features

  • Add environment= to experimental_shell_command. (#17575)

  • Add debug goals to python (#17057)

  • Target visibility rules (#17401)

  • Emit a __run.sh into InteractiveProcess sandboxes. (#17532)

  • Support newer pip versions. (#17555)

  • New dependency rules Plugin API (#17550)

  • Export metadata about a packaged docker image (#17299)

  • Don't require hardcoded name in python_distribution.provides (#17522)

  • Add per_platform object (#17334)

  • Process output capturing is symlink-aware (#17496)

  • go: introduce GoBuildOptions and cgo_enabled field (#17475)

  • Disambiguate Python module providers by level of ancestry. (#17489)

  • go: support ".syso" prebuilt object files (#17479)

  • Add Docker registries use_local_alias configuration option. (#17265)

  • Proposal for supporting Jar shading rules (#17251)

  • A --resolve flag, to specify the resolves to export. (#17416)

  • Handle duplicate JAR entries in deploy_jar (#17419)

User API Changes

  • Upgrade default version of golangci-lint to 1.50.1 (#17574)

  • Deprecate the old export semantics. (#17465)

  • Add restartable field to python_sources (#17400)

  • Deprecate the # Dependees column name in the py-constraints summary. (#17399)

  • Rename the dependees goal to dependents. (#17397)

  • Rename --changed-dependees to --changed-dependents (#17395)

Bug fixes

  • Allow for run --debug-adapter to match breakpoints when source is running in a sandbox (#17566)

  • Created an NpxToolBase as an inheritable Subsystem for nodejs tools (#17567)

  • Fix loading of SymlinkNodes from the Store. (#17549)

  • Do not try to create "" output directory in CreateArchive (#17538)

  • Persist digests before emitting them in fs_util (#17525)

  • Fix memoization of CoarsenedTarget.closure (#17516)

  • Support parsing targets from additional paths not containing BUILD files. (#17451)

  • Ensure lockfile target exists before injecting a dependency to it. (#17365)

  • Ensure correct eq/hash semantics for PythonArtifact. (#17484)

  • Isolate config seed values from the DEFAULT section. (#17474)

  • Fix poorly understood stdout redirection issue. (#17471)

  • Fix propagation of the remote-execution-append-only-caches path (#17469)

  • Pyright should grab non-transitive dependencies and make them available in the sandbox (#17235)

  • Plumb symlink support through the Pants engine (#16844)

  • Flip the default for pull on docker_image to False (#17459)

  • Merge pytest addopts (#16614)

  • Fix dep inference from shuint2_tests targets. (#17417)

  • Fix EnvironmentName used in test runs (#17412)

  • Add the m1 homebrew bin dir to the system binary search path. (#17411)

  • Restore debug hints for test execution (#17406)

Performance

  • Skip loading of local cache data when possible (#17495)

  • Symlink site-packages into pylint venvs when possible. (#17488)

  • Filter coarsened targets to only those that are relevant in pylint runner rule (#17487)

Documentation

  • correct docs: direnv can't save ulimit (#17561)

  • Update team pages for SJ and Dan! (#17534)

  • Fix line breaks in a docs page. (#17527)

  • Clarify how __defaults__ apply to target generators. (#17493)

  • Fix typo in docs: debug-adaptor should be debug-adapter (#17452)

  • Update nuke_if_too_big documentation (#17429)

  • Fix version templating in vcs_version docs (#17423)

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page