Fury is the LIRA build tool: it reads a build file,
plans a static DAG of steps and runs them through tools, memoized in the content-addressed
store, on this machine or across a swarm of them. It is deliberately language-agnostic:
everything that knows what a .scala file is lives in
Fever, which Fury reaches only through the lira.tool
contract. Its design and roadmap are
design/fury.md in the lira
repository.
Fury runs as an Ethereal daemon and is a Pyrocosm tool, so the subcommands and configuration files every Pyrocosm tool shares are fury's too.
Fury is being built one step at a time. So far it can check a build file; it cannot yet build.
fury check # parse and validate build.tel, and report what this milestone cannot build
fury install # install tab-completions and the manpage
fury about # fury's version, and the daemon serving it
fury --version # the version alone
fury quit # stop the daemoncurl -fsSL https://propensive.dev/fury | shThe TEL schemas a build is written against are at the root of this repository, and ship inside
fury: build.schema.tel, tool.schema.tel, guarantees.schema.tel, local.schema.tel,
lock.schema.tel and registry.schema.tel, with scalac.tool.tel, the descriptor of the
built-in Scala tool. build.tel and local.tel are specimens: the tests validate and decode
them, and build.tel deliberately exercises more than fury can yet build.
The libraries fury builds against (Soundness, Pyrocosm and lira) are pinned in
etc/refs, and the tools it runs in etc/tools.
make sync-deps # install the pinned releases into ~/.ivy2/local
make tools # install fume and flair
make test # run the suite with fume (make test-plain uses plain java)
make fury # build the native executable for this machine
make install # copy it to ~/.local/bin
make check # check the sources with flairA release is cut by a signed tag, after bumping furyVersion in build.mill and merging it:
git tag -s X.Y.Z && git push --tags