The ergonomic and hermetic software build system for Python, Java, Scala, Go, and Shell. Pants lets you fearlessly scale up your codebase.
Project description
Pants is an Apache2 licensed build tool written in Python and Rust.
The latest documentation can be found at pantsbuild.org.
2.10.x Release Series
2.10.0rc2 (Feb 26, 2022)
New Features
-
New
--docker-build-verboseoption to print build output to the console. (Cherry pick of #14557) (#14597) -
Support include_requirements & complete_platforms for
python_awslambda. (Cherry-picks of #14532 & #14469) (#14533) -
Support complete_platforms for Python GCFs. (#14530) (#14531)
-
Plumb Pex's
--complete-platformfor pex_binary. (#14526) (#14528)
User API Changes
-
Add
output_pathfield topyoxidizer_binaryand change its default destination (Cherry-pick of #14607) (#14611) -
Upgrade Pex to 2.1.67. (Cherry-pick of #14544) (#14546)
Bug fixes
-
Fix
pyoxidizer_binaryto supportpython_distributiontargets that depend on others (cherry-pick of #14620) (#14626) -
Coursier caches are now determined by
-reposconfiguration (#14603) (#14606) -
Fix PyOxidizer to write to
~/.cache/pantsby using a named cache (Cherry-pick of #14582) (#14590) -
adds
--no-defaultto Coursier args so that we only use user-configured maven repos (#14581) (#14584) -
Fix PyOxidizer depending on
python_distributionwithsdist=True(Cherry-pick of #14394) (#14568) -
Avoid duplicated deprecation warnings by memoization. (Cherry-pick of #14511) (#14553)
-
Fix coverage base global report creation bug (cherypick of #14547) (#14549)
Performance
-
Add support for rendering a summary of objects held by the graph (cherrypick of #14638) (#14644)
-
Shortcircuit source subsetting if there are no distributions. (cherrypick of #14564) (#14566)
-
Calculate local distribution contents once per distribution (cherrypick of #14551) (#14555)
Documentation
-
Rewrite
helpfordependenciesfield to mention generated targets (Cherry-pick of #14621) (#14627) -
Don't leak local paths into generated docs. (cherrypick #14591) (#14592)
-
Add disclaimer about
[python].enable_resolvesand lockfile generation (Cherry-pick of #14475) (#14479)
2.10.0rc1 (Feb 14, 2022)
New Features
- Improve
exportgoal to handle multiple Python resolves (Cherry-pick of #14436) (#14454)
User API Changes
-
python_requirementusesresolve: strfield, notcompatible_resolves: list[str](Cherry-pick of #14420) (#14435) -
Migrate the Docker context tags version from
<stage>.tagtotags.<stage>. (Cherry-pick of #14376) (#14403)
Bug fixes
-
Fix handling of Go version for third-party packages (Cherry-pick of #14457) (#14459)
-
Fix issue picking up base image tag from Dockerfile with a digest present. (Cherry-pick of #14447) (#14456)
-
Make sure
[python].enable_resolves = falsedisables checking for valid resolves (Cherry-pick of #14418) (#14439) -
Fix
pants_requirementstarget generator to use resolves (Cherry-pick of #14417) (#14423) -
Fix
tailorwhen--use-deprecated-python-macros=false(Cherry-pick of #14404) (#14424)
2.10.0rc0 (Feb 07, 2022)
New Features
-
Add
--fmt-only,--check-only, and--lint-only(#14356) -
Add support for building PyOxidizer apps (#14183)
-
Adds
runsupport fordeploy_jartargets (#14352) -
New
[docker].executable_search_pathsoption. (#14360) -
Support Go 1.18 fuzz test targets (#14357)
-
Validate Python user lockfiles & improve tool lockfile error message (#14353)
-
Allow using Yapf with
update-build-filesrather than Black (#14378) -
Graduate Thrift Python support to be stable with
pants.backend.codegen.thrift.apache.python(#14389)
User API Changes
-
Graduate Docker backend from experimental status. (#14310)
-
Graduate the Dockerfile linter Hadolint from experimental status. (#14311)
-
Merge
validategoal withlintgoal (#14102) -
Rename Python resolve options and fields to not say "experimental" (#14326)
-
Add Thrift, Protobuf, Java, and Scala folders to default for
[source].root_patterns(#14363) -
Rename the
download-pex-binscope topex-cli. (#14344) -
Upgrade default Black version to 22.1.0 (#14324)
-
Upgrade default Pytest version to 7 (#14380)
Plugin API Changes
-
Rename
LintRequesttoLintTargetsRequest(#14312) -
New (optional) API for MyPy-friendly options registration (#14331)
-
Remove
PexFromTargetsRequest.additional_requirements(#14350) -
ReplImplementationnow passes root targets, not transitive closure (#14323) -
LintRequest,FmtRequest, andCheckRequestmust setname: ClassVar[str](#14304)
Bug fixes
-
Warn when
[python-protobuf].runtime_dependenciesneeds to use new target generator syntax (#14391) -
Fix native cycle detection error message. (#14381)
-
Fix import parsing regression (#14349)
-
Include link dest in symlink error. (#14384)
Performance
- Lazy load help info (#14305)
Documentation
-
Standardize how we reference formatters, linters, and checkers in goal summary (#14355)
-
Don't enumerate deprecated scopes in help. (#14345)
-
Don't render skipped tools in final summary with
fmt,lint,check, andtest(#14303)
2.10.0.dev3 (Jan 28, 2022)
New Features
-
Support multiple disjoint Python resolves via
[python].experimental_resolves(#14299) -
Optionally render the
--dynamic-uiwith Prodash (#14221) -
Add
context_rootfield todocker_imageanddefault_context_rootoption to[docker]scope. (#14165)
User API Changes
-
Deprecate
generate-user-lockfileand[python].experimental_lockfilein favor of[python].experimental_resolves(#14288) -
Bump versions & regenerate lockfiles for several Python tools, including Twine, PyUpgrade, and MyPy Protobuf (#14277)
-
Upgrade Pex to 2.1.65. (#14256)
Plugin API Changes
-
Remove
PexFromTargetsRequest(direct_deps_only: bool)(#14291) -
Rename
GenerateToolLockfileSentinel.options_scopetoresolve_name(#14231) -
Rename
PythonModuletoPythonModuleOwnersRequest(#14276)
Bug fixes
-
Fix plugin resolution running twice. (#14294)
-
Fix Pylint to consider transitive third-party dependencies (#14289)
-
Fix bad default module mapping for PyMongo (#14284)
-
go: filter out
vendordirectories in tailor (#14259) -
Fix packaged file names for
pex_binariestarget generator (#14269) -
Cap number of UI bars to terminal height (#14228)
-
Fix executability of materialized files for non-owners. (#14298)
Performance
- Dynamically choose per-process concurrency for supported processes (#14184)
Documentation
- Add some missing backends to generated docs (#14290)
2.10.0.dev2 (Jan 22, 2022)
New Features
-
JVM lockfile invalidation headers and verification (#14185)
-
Add new
api-typeshelp goal (#14081) -
Add line numbers to
--unowned-dependency-behaviorerrors (#14169) -
Add Flake8 first-party plugin support (#14027)
-
add runtime dependencies field for Apache Thrift for Python (#14158)
-
Add
#pants: no-infer-deppragma for ignoring imports (#14059 and #14225) -
Add local
.pants.rcsupport (#14142) -
thrift: add scrooge java backend (#14043)
-
add Avro codegen support for Java (#13990)
User API Changes
-
add timeout for remote cache lookups (#14224)
-
Replace
coursier-resolvegoal withgenerate-lockfiles(#14211) -
Replace
jvm-generate-lockfilesgoal withgenerate-lockfiles(#14176) -
Deprecate
sourcefile-validationin favor ofregex-lint(#14173) -
Deprecate
python_requirementsandpoetry_requirementsusing old macro in favor of target generation (#14075) -
Add try/except parsing to import_parser to avoid failing strict checks for optional imports (#14216)
-
Don't error on string imports with
[python-infer].unowned_dependency_behavior(#14179)
Plugin API Changes
- Remove per-language indirection for formatter plugins. (#14166)
Bug fixes
-
Fix complex
__import__statements failing to parse with Python 2.7 - 3.7 (#14232) -
LockfileMetadata- Replace flaky_header_dict()mechanism with more robustheader_attrsmechanism (#14229) -
More accurate reported runtime when
pantsdis in use. (#14177) -
Fix Pylint to run on transitive dependencies to avoid underreporting issues (#13918)
-
[Docker] Fix bug when a putative target address did not exist. (#14125)
-
Fix immutable inputs DCL bug. (#14016)
Performance
- Batching of
lintandfmtinvokes (#14186)
Documentation
- [Doc] Include backend source for goals, subsystems and targets in generated docsite. (#14126)
2.10.0.dev1 (Jan 07, 2022)
New Features
-
JVM Resources support (#13908)
-
Expose Docker build context hash for image tag interpolation. (#13959)
-
Add Thrift IDL codegen using Apache Thrift for Python and Java and Scrooge for Scala (#13987)
-
Add new
image_labelsfield todocker_image. (#13973)
User API Changes
-
Deprecate
[validate].detail_levelin favor of[sourcefile-validation].detail_level(#14103) -
Upgrade Hadolint (dockerfile linter) to from 2.6.0 to 2.8.0 (#14110)
-
Change third party module mapping to consider resolves (#14034)
Plugin API Changes
-
Fix
@ruleeffect validation fornot cacheabletypes. (#14069) -
Allow plugins to use range requirements by applying constraints to plugin resolution (#14058)
Bug fixes
-
Reduce output from
scalafmt, and lower reflective access option threshold for Google Java Format. (#14109) -
Hook up Scalafmt and Google Java Format to
./pants lint(#14108) -
Fix
validategoal crashing if not configured (#14104) -
Fix dropped output race during UI teardown (#14093)
-
Fix incorrectly setting
nameonpython_requirementsmacro (#14065) -
[jvm] Use appropriate coordinate serialization for Coursier CLI inputs. (#14038)
-
Fix
.pyitype stubs to show up inpython_distribution(#14033) -
Fix file sources codegen for the Docker build context. (#14024)
-
[jvm] Parse maven coordinates using regular expression (#14010)
-
[jvm] Fix use of multiple scalac plugins when one plugin has multiple classpath entries (#14012)
Documentation
-
Include provider info in help output for subsystems and target types. (#13993)
-
Fix help strings which were accidentally tuples, and add a validation. (#14057)
2.10.0.dev0 (Dec 27, 2021)
New Features
-
Add duration and cache source to test output. (#13889)
-
Add
pex_binariestarget generator (#13910) -
Support Docker build target stage (#13956)
-
Add
sshfield todocker_image. (#13957) -
Docker
FROMtarget dep inference (#13921) -
Docker context troubleshooter (#13896)
-
java: add protobuf code generation support using
protoc(#13989) -
Support
test --debugwith scalatest and junit. (#13966)
User API Changes
-
Update shellcheck default version to v0.8.0 (#13983)
-
Upgrade to Pex 2.1.61 and use
--venvcopies. (#13979) -
Remove deprecated
[python-setup]in favor of[python](#14004) -
Remove deprecated
typecheckgoal as alias forcheck(#13929) -
Remove deprecated
pants_requirementin favor ofpants_requirements(#13927) -
Remove deprecated
--process-execution-local-cleanupand--process-execution-local-cachein favor of--process-cleanupand--local-cache(#13928)
Plugin API Changes
-
Add
OptionalSingleSourceField(#13982) -
Remove deprecated RuleRunner methods
create_file(s)andadd_to_build_file. (#13954) -
Revert "Turn off validation for unset
SourcesFieldifrequired=False" (#13856) (#13944)