stack-all
CLI tool for building across Stackage major versions
https://github.com/juhp/stack-all
Version on this page: | 0.4.2 |
LTS Haskell 23.0: | 0.6.4 |
Stackage Nightly 2024-12-13: | 0.6.4 |
Latest on Hackage: | 0.6.4 |
stack-all-0.4.2@sha256:5562cd6a8712fbdd8827005ec458e13d0d3a3740831fe03545346b790fd796e6,2319
Module documentation for 0.4.2
There are no documented modules for this package.
stack-all
A CLI tool for building Haskell projects easily over Stackage major versions.
This is how I do my Haskell build CI for projects locally with stack.
Usage
stack-all
by default runs stack build
over Stackage Nightly and
LTS major versions
(current default is nightly & LTS 21, 20, 19, 18, 16, 14, 13, 12, 11)
corresponding to latest major ghc minor versions,
with appropriate stack --resolver
options.
Note that stack
only works if a stack.yaml
file exists.
If no stack.yaml
file is found, stack-all
will create one.
Of course it may still fail to build, but this allows for
quickly trying to build a package that does not include stack support.
Help output
$ stack-all --version
0.4.2
$ stack-all --help
Build over Stackage versions
Usage: stack-all [--version] [(-c|--create-config) | (-s|--make-lts)]
[-k|--keep-going] [-d|--debug] [--refresh-cache]
[-n|--newest MAJOR] [(-o|--oldest MAJOR) | (-a|--all-lts)]
[MAJORVER... [COMMAND...]]
stack-all builds projects easily across different Stackage versions
Available options:
-h,--help Show this help text
--version Show version
-c,--create-config Create a project .stack-all file
-s,--make-lts Create a stack-ltsXX.yaml file
-k,--keep-going Keep going even if an LTS fails
-d,--debug Verbose stack build output on error
--refresh-cache Force refresh of stackage snapshots.json cache
-n,--newest MAJOR Newest LTS release to build from
-o,--oldest MAJOR Oldest compatible LTS release
-a,--all-lts Try to build back to LTS 1 even
Overriding stack.yaml
stack-all
can use stack-ltsXX.yaml
files to override the default
stack.yaml
file for particular Stackage major versions.
Note that a stack-ltsXX.yaml
file will also be used for
older LTS major versions until another stack-ltsYY.yaml
file is found.
stack-nightly.yaml
is also supported, but used only for nightly.
For example if you have stack-lts19.yaml
and stack-lts16.yaml
files
in your project,
then stack.yaml
will be used as normal to build nightly, lts-21 and lts-20,
but stack-lts19.yaml
will be used for building lts-19 and lts-18,
and stack-lts16.yaml
will be used for lts-16, lts-14 (and older).
Since stack-all
overrides the exact resolver with the latest minor snapshot,
the exact minor Stackage version specified in the stack*.yaml
files
doesn’t actually matter: stack-all
always uses the latest published
minor releases of Stackage major versions.
stack-ltsXX.yaml
files can be easily created using
stack-all --make-lts ltsXX
(or -s ltsXX
for short).
(Other versioned stack.yaml filenames like stack-ghc-8.8.yaml are not currently supported.)
Specifying LTS versions
You can abbreviate lts-XX
args to ltsXX
on the commandline.
lts
is also accepted and resolved to the latest major LTS version.
There are --oldest
and --newest
options to specify the range of
lts versions to build over:
You can specify the oldest major LTS to build for with eg stack-all -o lts14
.
Otherwise if not configured the default oldest LTS is currently lts-11
.
Similarly you can specify the newest LTS version to build from with
eg stack-all -n lts19
. (The default is to build from nightly.)
Alternatively, one can give one or more explicit LTS major versions to build
for as arguments: eg stack-all lts18
if you only wish to build that version.
Configuring the oldest and/or newest LTS to build
You can configure the oldest working LTS major version for your project
by running for example stack-all -c -o lts-16
which generates a .stack-all
project config file like this:
[versions]
# lts-14 too old
oldest = lts-16
(the comment line can be used to document why the older LTS doesn’t work). This specifies that the oldest LTS version to build for is lts-16.
The newest LTS to build with stack-all can similarly be configured:
stack-all -c -n lts20
or setting newest = lts-20
.
Running other stack commands
By default stack-all
just runs the stack build
command over
Stackage major versions.
You can also specify a stack command to run with options on the commandline: eg
$ stack-all test --no-rerun-tests
will run stack test
over the LTS versions instead.
Happy stack building!
Install
The project is released on Hackage.
You can also build from git source with stack install
or cabal install
.
Collaboration
The project is hosted at https://github.com/juhp/stack-all under a BSD license.
Changes
Release history for stack-all
0.4.2 (2023-10-01)
- support unversioned “lts” argument
- add –refresh-cache option to force refresh of cached snapshots.json
0.4.1 (2023-02-20)
- ignore nightly as a base when creating a new lts file
0.4.0.1 (2022-03-27)
- fix build with simple-cmd-0.2.4
0.4 (2022-01-24)
- ‘lts’ alias can now be used as a commandline version argument
- stack-nightly.yaml is now only used for building nightly
- if creating stack.yaml use latest lts snapshot resolver from snapshot.json
- support aeson-2.0
0.3.1 (2021-09-06)
- newest LTS for a project can now be configured
- use cached-json-file for snapshots.json
- add –keep-going
- exclude lts17 now by default
0.3 (2021-06-26)
- use hackage.stackage.org/snapshots.json:
- to determine the latest LTS major version
- to resolve major LTS version to latest minor snapshot and also print it
- cache snapshots.json locally in ~/.cache/stack-all/ for a few hours
- new –make-lts command to generate a stack-ltsXX.yaml file from newer one
0.2.2 (2021-06-07)
- create a stack.yaml file if only an .cabal file is found
0.2.1 (2021-04-30)
- if stack fails, print the ~/.stack snapshot path for reference
0.2 (2021-04-03)
- better error messages when reading snapshot option/arg (TristanCacqueray)
- search parent dirs for stack project dir, like stack
- snapshot options/args can now be in compact ltsXY form as well as lts-XY
- support stack commands and options
0.1.2 (2021-02-05)
- –create-config comment line mentions older version
- show error for unversioned “stack-lts.yaml”
- add lts-17
0.1.1 (2020-12-04)
- fix ordering of stack-lts-*.yaml
- allow –newest to override oldest lts config
0.1.0 (2020-11-14)
- initial release with –create-config, –debug, –cmd, –newest
- VersionSpec: –all-lts, –oldest, and lts args