The development of Fury has come a long way since starting in 2018, and still has a long journey ahead of it, but we are now closer to the release of version 1.0 than ever before. We plan three milestone releases, starting with Alecto in September 2020.
The first milestone build (Alecto) will be the first release of Fury with everything needed to build most Scala libraries and applications.
You can now publish builds to the Fury's online build directory service, vent.dev. This
allows users with GitHub accounts to publish builds on vent.dev in the style
<group>/<project>
, where <group>
is that user's account name, or any organization they are a member of.
Support for indicating breaking and non-breaking changes and expiration dates on published layers sets users' expectations for upgrading, and for the long-term maintenance of a build.
Builds are organized into layers, which may import projects from other layers. Imported layers may now be navigated and edited as easily as the main layer, making it possible to modify the definition of any project used in any build.
Fury now supports Scala.js, and allows the export of .js
files.
"Universal" updates enable the possibility to make changes to projects, layers and repositories universally with a single command. This includes unifying or renaming projects, updating layer imports and updating Git repository checkouts on the current layer, and all references elsewhere in the layer hierarchy, all at the same time. This makes it very easy to maintain changes across an entire ecosystem.
Alecto introduces a new concept of workspaces into which different types of build artifact, such as JAR files, may be included for use in an application module. The module may subsequently produce its own artifacts, which can be used as resources or sources.
Thanks to contributions from Justin Kaeser at JetBrains, Fury now runs as a BSP server.
Milestone 2 will introduce a variety of new features to expand Fury's capabilities.
Support for Bash and Fish as well as Zsh will be provided, as well as more informative tab-completions wherever possible, in particular, additional descriptive information may be provided on parameter values, which is currently lacking.
The facility to store publishing details in builds, generate publish artifacts, and publish them to Maven Central will be added.
A new module type, container
will run a specified Docker image, with a mounted
workspace, allowing arbitrary processes to operate on build artifacts within a Docker container, and to produce
new build artifacts.
To facilitate the coexistence of different versions of a dependency on the same classpath, Fury will provide the option to shade selected packages, rewriting bytecode as necessary.
Fury's internal task management will be improved, including cancellation of builds, termination of application modules, task isolation (e.g. for running benchmarks) and more reliable shutdowns.
General support for creating, publishing and depending upon variations of layers, supporting tweaks such as compiler version changes, additional dependencies, tweaks to source directories or compiler options, enabling more generalized support for cross-building.
Using IPFS's publish-subscribe support, a local running instance of Fury will be able to fetch pre-built artifacts from machines within a connected workgroup that has already built those artifacts.
Milestone 3 will focus on improved integration with external tools, and better distribution of the build workload within connected workgroups.
Viewing, editing and launching Fury builds within Visual Studio Code will provide an alternative to Fury's standard command-line interface. This will be provided through Fury's REST API.
Navigation of layers, projects and modules through a filesystem-like interface will provide another alternative way to interact with builds, and may make shell-scripting easier.
Building upon the publish/subscribe support in Magaera, support for fully-distributed builds within a connected workgroup will be provided, proactively initiating remote builds on connected machines.
Milestones 1, 2 and 3 will each introduce new features to Fury which progressively enhance its feature-set. However, no new features will be introduced between Milestone 3 and version 1.0. Instead, version 1.0 will focus on reliability, robustness, performance, and
Version 1.1 will primarily migrate Fury's code from Scala 2 to Scala 3, as well as providing bugfixes to version 1.0.