Skip to content

Latest commit

 

History

History
626 lines (489 loc) · 27.8 KB

CHANGES.md

File metadata and controls

626 lines (489 loc) · 27.8 KB

Changes

Unreleased

  • Fix jar creation to always write the MANIFEST.MF file as the first entry (for ecosystem compatibility) #716

2.8.3

Improved

  • Updated REPL-y to 0.4.3.
  • Updated nREPL to 0.6.0.

2.8.2

Fixed

  • Fix printHexBinary for Java 11 support #702
  • Fixes the regression introduced while handling sequential optargs #713

Breaking

  • Updated reply to 0.4.1 #711,#703
  • Updated nREPL to 0.4.5. The new nREPL has a new artefact coordinates (nrepl/nrepl) and a new namespace prefix (clojure.tools.nrepl. -> nrepl.). While the nREPL protocol is 100% compatible with that of the 0.2.x series you'll have to make sure that any middleware you're using has been updated to target 0.4.x. You can find more details here and here. #703

2.8.1

Improved

  • SLF4J warnings from the worker pod have been suppressed #676

Misc

  • The change to sift made with #680 has been reverted because it had unexpected drawbacks. We will discuss how to proceed on #704.

2.8.0

Breaking

If you happen to receive "Tried to use insecure HTTP repository without TLS", it means your project was configured to download dependencies from a repository that does not use TLS encryption. This is NOT suppored anymore because it exposes you to trivially-executed man-in-the-middle attacks. In the rare event that you don't care about the security of the machines running your project, you can enable support for unprotected repositories by explicitely set a custom wagon-factory:

;; never do this
(require 'cemerick.pomegranate.aether)
(cemerick.pomegranate.aether/register-wagon-factory!
 "http "#(org.apache.maven.wagon.providers.http.HttpWagon.))

It's also possible you have a dependency which includes a reference to an insecure repository for retrieving its own dependencies. If this happens it is strongly recommended to add an :exclusion and report a bug with the dependency which does this.

Kudos to the folks working on the related pomegranate PR and technomancy for the above explanation.

Improved

  • Boot is officially Maven Central compatible. Make sure the sources and javadoc artifacts are on the fileset and :classifier is correctly set.
  • Environment variables BOOT_AS_ROOT, BOOT_WATCHERS_DISABLE und BOOT_COLOR accept true as a truthy value beside 1 and yes #631
  • Bump pomegranate and dynapath to 1.0.0. #612
  • Digest java.io.File instead String path of jar at sift-action :add-jar method #678
  • Add warning about improper use of repl :eval option #666
  • Parse complex optargs with sequential types, see wiki section #682
  • Handle pom tag #579

Fixed

  • When directories or files cannot be opened by boot, don't fail but log something in debug level #598 & #629
  • fileset-diff correctly handles nested data structures #566
  • Boot does not sign jars with classifiers #625
  • Allow clojure source jar onto the classpath #654
  • Fix boot.tmpdir/cp #502
  • Split an argument in three #578
  • Use bootignore patterns in watcher workers #663
  • Make (sift :move) create resources. #680

Misc

  • The Cheshire dependency in boot/worker has been updated to fix compatibility with s3-wagon-private #679

2.7.2

Improved

  • set-env! works even if the user has set *print-level* or *print-length* to non-nil in their $BOOT_HOME/profile.boot. #587 #586
  • tmpfile "Commit: adding..." messages now only appear with -vv which eases debugging tasks with -v #557
  • Pod tests pass and can be run with make #567
  • Improved error message when a user tries to use a multi-arity format for tasks. #574
  • Sift now outputs meaningful things on debug #581
  • file-filter (called by all by-* functions) throws an error if no criteria are specified. #555

Fixed

  • When printing exception message from exception using :boot.util/omit-stacktrace?, escape % in message to prevent errors about bad string formatting, and ensure that message ends in a newline.
  • Artifact upload slow because of an expensive evaluation of a debugging arguments for all calls to transfer-listener #565 #558
  • With-cp does not consider source/resource paths
  • Evaluation of boot script is now done via string concatenation and load-string, rather than read-string #547
  • Improve robustness of built-in notify task #551

Tasks

  • Added the socket-server task for starting a Clojure 1.8.0+ socket server. #549
  • Added the call task to execute arbitrary code as part of the pipeline, either via an existing function symbol or by providing a form. Similar to lein run, call can be used, for example, to start a component system.
  • Added the bare-repl task for starting a simple interactive REPL session (a la clojure.main/repl) without launching a nREPL server. #582

API Functions

  • Added boot.util/dosh-timed. It works like boot.util/dosh except it takes timeout-ms as the first argument, and throws an exception when the shell command takes more than timeout-ms milliseconds to execute. #561

2.7.1

Fixed

  • Fixed a Windows regression in the user script generation code introduced by f339a8d. #541

Tasks

  • Added -m, --mode option to the target task — specifies the file mode for written files — should only be used when default rw------- is not enough. #537

2.7.0

Improved

  • Follow symlinks when building fileset from project dirs #483.
  • Documented boot.core/add-cached-{asset,source,resource} fns.
  • Documented boot.core/patch! fn #497.
  • Warn when asked to load a version of Clojure into the core pod (via :dependencies) that is different from the implicitly loaded version specified by BOOT_CLOJURE_VERSION #230, #469.
  • Corrected docstring for boot.pod/canonical-coord.
  • Throw helpful exception when deftask argument vector isn't a vector #487.
  • Now uses io.aviso/pretty 0.1.33: this affects the order of reported stack frames #355. The old behavior can be restored with user configuration.
  • Exceptions are now always reported using pretty, regardless of the setting of BOOT_COLOR (or the -C flag), but when colorization is disabled, pretty exception reporting will not use an ANSI color codes in its output. This is often preferable when output from Boot is being logged to a file.
  • Support managed dependencies by upgrading pomegranate to 0.3.1. #526
  • Use the Fastly CDN version of Clojars by default. #540
  • Allow tasks to hide exception stacktrace with :boot.util/omit-stracktrace? ex-data property #486, #532.

Fixed

  • Print stack trace when core pod fails to load #480.
  • Fix issue where boot.util/map-as-dep would flatten collections like :exclusions in the dependency vector #479.
  • Use default voice when calling say on OSX #476.
  • Fix typo in the notify task that prevented OSX from finding the terminal-notifier program #478.
  • Fix typo in the notify task that caused exceptions on OSX #491.
  • Don't throw exceptions when source files are missing during filesystem patch operations #471, #477.
  • Preserve fileset metadata when TmpFiles are overwritten with add-resource, add-source, etc.
  • Format paths in boot.class.path and fake.class.path system properties with correct, platform-specific paths #488.
  • Eliminate runtime reflection in boot.core/deftask macro #490. d- Create bootscript tmpfile with mode 0600 instead of 0664.
  • Previously, setting BOOT_COLOR to false was ignored, and the isWindows check overruled the BOOT_COLOR selection. Now, the default for colorization from isWindows is set only if BOOT_COLOR is blank #536

Tasks

  • Added the with-cp task — use java -cp style classpath strings instead of Maven dependencies.
  • The pom task now adds :project metadata to the created pom.xml and pom.properties TmpFiles in the fileset. This metadata is used by eg. the jar task to select the "real" pom from multiple poms that might be in the fileset from the uber task, etc. #451
  • The watch task now accepts --include and --exclude options to restrict the set of paths that will trigger a rebuild #312.
  • The watch task now accepts --debounce option to adjust how long it will wait for all filesystem events to have fired before a rebuild is triggered.
  • On systems without audio output ,the notify task now prints an error message instead of throwing an exception #523
API Functions
  • Added boot.pod/make-pod-cp — creates a new pod from a given classpath.
  • Added boot.pod/canonical-id — returns the canonical form of a maven dependency id symbol.
  • Added boot.pod/full-id — returns the fully-qualified form of a maven dependency id symbol.
  • Added :meta option to boot.core/add-{asset,source,resource} fns (and their add-cached-{asset,source,resource} variants — merges a map of metadata into all TmpFiles added to the fileset.
Boot CLI Parsing
  • The [ and ] characters can now be used to group tasks with their options and, more importantly, positional parameters. In the task body the positional parameters are bound to *args* #374.
Boot Options
  • Added -E, --exclusions — adds symbol to env :exclusions #472.
  • Added -f, --file — evaluates the contents of a file just like with the shebang script, but easier to use on platforms like Windows that don't have great shebang support #465.
  • Added -i, --init — evaluates a form after evaluating the profile.boot forms but before the main script or build.boot forms #465.
  • Added -x, --exclude-clojure — adds org.clojure/clojure as a global exclusion (useful in combination with --dependencies when you don't have a build.boot file, as most dependencies will depend on some random version of clojure and you'll get a warning about it) #230, #469.
  • Removed -t, --target-path and -T, --no-target #475.
Task Options
  • Added -p, --project option to the jar task — specifies the project id when there are multiple pom.xml files — should only be needed in the case where the jar will contain multiple poms and either the desired pom was not created via the pom task or there are multiple poms created by the pom task in the fileset #451.
  • Added -C, --no-color option to the repl task — disables ANSI color codes in REPL client output.
Pods
  • Upgraded dynapath to 0.2.5 in order to support Java 9. #528, #539
Boot Environment
  • Removed :target-path #475.

Deprecated

  • The speak task, replaced by notify.

Java 9

Java 9 is slated for release sometime next year. It introduces breaking changes, and Boot might need to be continually updated to ensure that we're compatible with Java 9 once it's released.

  • Improvements to work with Java 9 (boot repl works on Java 9-ea+148) that upgrade dynapath to 0.2.5. These changes require a newer boot-bin to function, but are backward compatible on Java 7 and 8. #539

2.6.0

Improved

  • More efficient syncing of project directories with Boot's internal ones.
  • Easier to read tree representation for the show --fileset output.

Fixed

  • Don't set :update :always in aether when resolving Boot's own dependencies unless Boot is being updated.
  • Correctly handle case when :source-paths or :resource-paths are set to the empty set (#{}).
  • Correctly set last modified time when copying classpath resource.

Development

  • Boot test suite (!!!) to test Boot itself, with parallel test runner capability and continuous integration.
API Functions
  • boot.pod/this-pod — a WeakReference to the current pod
  • boot.pod/with-invoke-in — low-level invocation, no serialization
  • boot.pod/with-invoke-worker — as above but invokes in the worker pod
  • boot.pod/pod-name — get/set the name of a pod
  • boot.pod/coord->map — dependency vector to map helper function
  • boot.pod/map->coord — map to dependency vector helper function
  • boot.pod/resource-last-modified — returns last modified time of a classpath resource
  • boot.core/get-checkouts — returns a map of info about loaded checkout dependencies
  • boot.util/dbug* — like boot.util/dbug but a macro (doesn't eval its arguments unless the verbosity level is DEBUG or above)
Boot Options
  • -c, --checkouts boot option / :checkouts env key — deeper integration for checkout dependencies
  • -o, --offline boot option — disable downloading Maven dependencies from remote repositories (doesn't apply to Boot's own dependencies)
  • -U, --update-snapshot boot option — updates boot to latest snapshot version
  • optional argument to -u, --update — sets global default boot version
Task Options
  • -v, --verify-deps option to show task — verify jar signatures and show deps tree [#375][375]
Boot Environment
  • wagon dependencies now accept a :schemes key — specify the handler classes for the wagon when the wagon jar has no leiningen/wagons.clj entry.
  • BOOT_CERTIFICATES — specify file paths for SSL certificates.
  • BOOT_CLOJARS_REPO — specify Maven repo url for clojars.
  • BOOT_CLOJARS_MIRROR — specify Maven mirror url for clojars.
  • BOOT_MAVEN_CENTRAL_REPO — specify Maven repo url for maven-central.
  • BOOT_MAVEN_CENTRAL_MIRROR — specify Maven mirror url for maven-central.

Deprecated

  • The checkout task, replaced by the --checkouts boot option

2.5.5

Fixed

  • Issue with 2.5.4 where it was possible for boot to exit before all files were written to target dir.

2.5.4

Fixed

  • The target task falls back to copying when hardlinks aren't possible #373.
  • Use a ByteArrayInputStream instead of a StringBufferInputStream when parsing pom.xml strings.

2.5.3

Improved

  • Added docstrings to all previously undocumented vars in API namespaces.

2.5.2

Fixed

  • Warn and remove conflicting files from the fileset #361, #364.
  • Restore --as-jars option to uber task that was accidentally removed.
  • Don't try to read pom.xml if there are none in the fileset.
  • Correctly handle extra arguments to clifn and throw on unknown options #346.

Improved

  • Pretty-print boot script when --verbose boot option is specified #315.
  • Copy jars into cache when using the --as-jars option to uber #290.
  • Ignore source files matching regexes specified in .bootignore file #348.

2.5.1

Fixed

  • Misleading warning about BOOT_EMIT_TARGET #356.
  • Cross-device link errors when moving files from temp dirs #362.
  • Issue with --repo-map option for push task #358.
  • Jar task not creating MANIFEST.MF in uberjar #360.
  • Jar task not using "friendly name" when there is exactly one pom.xml.
  • Issue where target task would do nothing when no --dir option given.
  • Add --no-clean option to disable cleaning of destination in target task.
  • Don't throw exception when deftask argument specs are invalid; warn instead.

2.5.0

Breaking

  • The gpg binary is now used instead of bouncycastle for signing jars and reading encrypted credentials files. There may be different behavior when resolving default keys, etc.

Added

  • Added target task and BOOT_EMIT_TARGET env var #305.
  • Added --developers and --dependencies options to pom task #233.
  • Added (ALPHA) send! function to work around issues passing large collections to pods via with-eval-in #339.
  • Added add-cached-{asset,source,resource} core functions.
  • Added launch-nrepl core function for starting repl servers in pods from the repl.
  • Added gpg-decrypt core function to decrypt gpg encrypted files.
  • Added configure-repositories! core function to configure maven repos dynamically (as a callback to add credentials, etc) #274, #311.
  • The push task can now be provided with --repo-map option to set the deployment repository. This is useful for example in case a repository needs different settings for downloading dependencies and deploying, like additional credentials #274, #311.
  • The install and push tasks now accept a --pom option which can be used to specify which pom.xml file to use #112, #278.
  • The repl task now accepts a --pod option which can be used to start a repl in a specific pod.
  • The show task now accepts a --list-pods option to show the names of all active pods.

Improved

  • Better uber task performance #94.
  • Better sift task performance.
  • Better fileset performance.
  • Better pod-pool performance #271.
  • Better cli option error messages #285 & #322.
  • Throw exception when source, resource, or asset paths overlap #235.

Fixed

  • Added last modified time to immutable fileset data #72.
  • Resetting fileset merges initial fileset over user source files #330.
  • Throw exception when fileset mv source doesn't exist #325.
  • Prevent duplicate tagging of commits in push task #328.
  • Bind *compile-path* in nREPL server environment #294.
  • Updated tools.nrepl version to support evaluating forms with reader conditionals in the repl #343.
  • Default jar exclusions no longer exclude pom.{xml,properties} #278.
  • Jars built without the --file option that contain multiple pom.xml files are now named project.jar instead of named for coordinates derived from an arbitrarily selected pom #278.
  • Installing or pushing a jar without the --pom option that contains more than one pom.xml now results in an exception instead of installing to coordinates derived from an arbitrarily selected pom #278.
  • Stream Closed exceptions when multiple pod pools are used #270

Deprecated

  • The push task option --gpg-keyring.
  • Implicit writing of artifacts to target directory.

2.4.2

  • Fix issue where the wrong classloader was being used to load the boot application (270ec3d)
  • Make sure exceptions during boot startup are flushed stdout before the process exits (4a20c74)

2.4.1

Fix issues with 2.4.0 release 61c948f

  • Need to delete files in the fileset dirs before writing to them because the underlying blob files are immutable.

  • Remove BOOT_CLOJURE_NAME dependency before adding jars to the classpath--this is a workaround for a really weird issue:

    clojure.lang.ExceptionInfo: loader constraint violation:
    loader (instance of java/net/URLClassLoader) previously initiated
    loading for a different type with name "clojure/lang/Compiler$Expr"
    

2.4.0

  • Self-downloading binaries--no longer need to manually download this when a new version is released. Also the provided binary works with all versions of boot since 2.0.0 inclusive (fixes #300).
  • All boot env vars can now be set in properties files (fixes #229).
  • Fix pod memory leaks (fixes #314 & #268).
  • Fix issue with Cider and boot's auto-flush PrintWriter (fixes #298).
  • Avoid calling javac on a fileset with no Java source files (fixes #309).

2.3.0

  • Stop 'boot show -u' from displaying "LATEST" dependencies as out of date.
  • Add boot.core/rebuild! function and add -M,--manual option to watch task to manually trigger rebuild from REPL instead of when source files change.
  • Fix issue where uber task was trying to explode dependencies that have only a pom file and no jar (fixes #292).
  • Improve uber task docstring/help text.

2.2.0

  • Add -A/--add-asset, -R/--add-resource, -S/--add-source options to sift task (fixes #212).
  • Add new merge strategy for uber task that concatenates duplicates and use it for merging files in META-INF/services/.*.
  • Support merging duplicate files in uber task, defaulting to standard set of mergers. (fixes #217).
  • Preserve last modified time of files when unpacking JARs (fixes #211).
  • Improvements to pom task (fixes #220, see d8782413).
  • Fix file handle leaks when unpacking JAR files. (fixes issues relating to invalid uberjars being generated).
  • Add support for .cljc files (see reader conditionals introduced in Clojure 1.7.0).
  • Support passing arguments to javac in javac task.
  • Update default Clojure version to 1.7.0.
  • Fix BOOT_LOCAL_REPO environment variable on Windows (fixes #243).
  • Make Clojure artifact name customizable via BOOT_CLOJURE_NAME environment variable, which defaults to org.clojure/clojure.