Lake v4.0.0 has mixture of programmatic improvements and new features. It also removes all previously deprecated settings. The biggest highlights are cloud build support and custom facets. It also completely revamps Lake's build API to make it more powerful (and hopefully easier to use in the long run).
Highlights
Cloud Build Support: Lake now supports uploading build artifacts to a GitHub release and automatically downloading said artifacts for a package. This way end users do not have build releases from the source themselves, which can save a lot of time. See the GitHub Release Builds section of the README for more details.
Custom Package, Module, and Library Facets: Custom package and module facets are now officially released and have been joined by the new addition of library facets. Once defined, the new facet (e.g., foo
) can be built on any current or future object of its type (e.g., through lake build pkg:foo
for a package facet). See the Defining New Facets section of the README for details on the syntax.
Build API Overhaul: The API for builds has undergone a complete revamp, eliminating the old notion of Target
/ActiveTarget
. Instead, builds are invoked directly (e.g., staticLibTarget
is replaced by buildStaticLib
). In addition, it is now much easier to invoke the build of one target / facet from another target / facet. As a result of this change, all previous extern_lib
functions are broken. Take a look at the updated ffi
example for pointers on how to migrate.
Better Logging: Thanks to Mario (#108), Lake now has -q
/--quiet
and -v
/-verbose
toggles to control how much information it logs. Its default now longer logs every command invocation but instead provides simple one-line progress reports (e.g., Building Foo
).
Improved Dependency Resolution: The dependency resolution procedure has been dramatically improved. Lake will now attempt to use the version of a package listed in a dependency manifest for deeply nested dependencies (#70) and if conflicts emerge try to pick a version that will satisfy everyone (e.g., the latest version for the shared input revision). Lake will also log the dependencies it encounters during resolution on a lake update
or when -v
is used. It will also issue a warning if the input revision in the root lakefile and manifest differ (#85).
--old
Option: Lake now supports the --old
option to avoid rebuilding intermediate imports / dependencies of modules unless their source files themselves have changed (#44).
Removals: All deprecated features have been removed. This means builtin package targets (i.e., targets that were part of the package
statement and set via e.g., libRoots
) have been removed. extraDepTarget
has also been replaced with the new extraDepTargets
, which is a list of target names the package should build before anything else.
Full Commit Log
- b899c0a release: 4.0.0
- e1d43a7 fix: improve targets/facets UX (e.g., errors when type incorrect)
- 26be594 doc: update README and some comments
- 1ed9913 chore: bump Lean version
- 4fe15f6 chore: bump Lake version
- 15a6401 feat: make manifest file configurable
- 35873c6 feat: replace
extraDepTarget
withextraDepTargets
- 0d4013a test: make test 44 more consistent
- 1bd8430 refactor: split CLI actions into separate file
- 63f575b feat:
ws.runBuild
- 967c01a feat: facet info param + unique names for facet syntax
- 7ee2f76 refactor: move fetching releases to extraDep build
- 884e166 refactor: renames + cleanup
- 40927d8 feat: recursive builds in
extern_lib
- d7b2dcf chore: test 44 shell script fixes
- de3daae ci: add diffutils to Windows MSYS2 setup
- db0f16c feat:
--old
to use outdated unchanged modules - 1c1daf2 refactor: remove remainder of Target code
- 5c2c513 doc: correct
require
syntax docs - 757ed04 refactor: cleanup (primarily resolve code)
- bd44264 fix: pass pkg linking args to extern lib linking
- 79321cd refactor: cleanup logging API (unify BuildIO with LogIO)
- ca87bef feat: platform bits in build archive name + related cleanup
- 6b6cc7f feat: inherit deep desp's revision from dep's manifest
- 9662b6c feat: store config rev in manifest and warn on change
- c6606ed chore: correctly mark version as prerelease
- e3e17ad feat: cloud build support
- ae629af feat: verbosity options for logging + neater build progress
- 8c623a3 refactor:
Lake.Build.Topological
tweaks + docs - 8322e8d refactor: pattern
TargetConfig
offFacetConfig
- 430ac1d refactor: replace
ActiveTarget
withJob
- 93693d7 chore: fix targets example
- bfa94d5 refactor: reduce use of targets +
IndexT
cleanup - f1d9921 refactor: remove many used Target methods
- f8b7eeb fix: apply
nameToSharedLib
tomodTargets
too - 8ed9bc6 refactor: move info into target task
- 34f7937 refactor: remove facet target helpers
- cae36dc chore: cleanup at
recBuildExternalDynlibs
- e134863 feat: library facets
- fa3c7e2 feat: build all CLI targets in the same build pass
- 21991dd refactor: remove module facet special casing
- 2bc1778 chore: remove package config builtin targets
- 8037b9a chore: start next Lake version