stack-all: CLI tool for building over Stackage major versions

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:

Stack-all is a tool for stack building of a Haskell project across multiple Stackage major LTS versions.


[Skip to Readme]

Properties

Versions 0.1, 0.1.1, 0.1.2, 0.2, 0.2.1, 0.2.2, 0.3, 0.3.1, 0.4, 0.4.0.1, 0.4.1, 0.4.2, 0.5, 0.5.1, 0.5.2, 0.6, 0.6.1, 0.6.2, 0.6.3, 0.6.3, 0.6.4
Change log ChangeLog.md
Dependencies aeson, base (<5), cached-json-file, config-ini, directory (>=1.2.5), extra (>=1.6.15), filepath, http-query, process, simple-cmd (>=0.1.4), simple-cmd-args (>=0.1.8), text, unordered-containers, yaml [details]
License BSD-3-Clause
Copyright 2020-2024 Jens Petersen <juhpetersen@gmail.com>
Author Jens Petersen <juhpetersen@gmail.com>
Maintainer Jens Petersen <juhpetersen@gmail.com>
Category Distribution
Home page https://github.com/juhp/stack-all
Bug tracker https://github.com/juhp/stack-all/issues
Source repo head: git clone https://github.com/juhp/stack-all.git
Uploaded by JensPetersen at 2024-06-10T16:03:07Z

Flags

Automatic Flags
NameDescriptionDefault
aeson1

aeson-1 needs unordered-containers

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for stack-all-0.6.3

[back to package description]

stack-all

A CLI tool for building Haskell projects easily over several Stackage major versions.

I use this to do Haskell build CI for projects locally with stack.

Usage

stack-all by default runs stack build over Stackage Nightly and LTS major versions (the current default range is nightly & major LTS versions back to lts-18) corresponding to latest major ghc minor versions, using appropriate stack --resolver options.

Note that stack only works in a project if a stack.yaml file exists. If no stack.yaml file is found in a .cabal project, stack-all will create one if there is a .cabal or "package.yaml" file. Of course it may still fail to build, but this allows for quick attempts to build a package that does not include a stack.yaml file.

Since 0.6, stack-all also works outside projects, like stack itself does.

Help output

$ stack-all --version

0.6.3

$ stack-all --help

Build project over Stackage major versions

Usage: stack-all [--version] [-k|--keep-going] [-D|--debug] [--refresh-cache] 
                 [-n|--newest MAJOR] [(-o|--oldest MAJOR) | (-a|--all-lts)] 
                 [(-c|--create-config) | (-d|--default-resolver MAJOR) | 
                   (-u|--update-resolver) | (-s|--make-lts MAJOR) | 
                   [MAJORVER... COMMAND...]]

  https://github.com/juhp/stack-all#readme

Available options:
  -h,--help                Show this help text
  --version                Show version
  -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
  -c,--create-config       Create a project .stack-all file
  -d,--default-resolver MAJOR
                           Set stack.yaml resolver
  -u,--update-resolver     Update stack.yaml resolver
  -s,--make-lts MAJOR      Create a stack-ltsXX.yaml file

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-lts20.yaml and stack-lts18.yaml files in your project, then stack.yaml will be used as normal to build nightly, lts-22 and lts-21, but stack-lts20.yaml will be used for building lts-20 and lts-19, and stack-lts18.yaml will be used for lts-18, lts-16 (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 resolves to the latest major LTS version.

You can also use ghc major version aliases: eg ghc9.6 corresponds to lts22 or ghc-9.2 to lts-20.

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 lts16. Otherwise if not configured the default oldest LTS is currently lts-18.

Similarly you can specify the newest LTS version to build from with eg stack-all -n lts20. (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 lts19 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-19 which generates a .stack-all project config file like this:

[versions]
# lts-18 too old
oldest = lts-19

(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-19.

The newest LTS to build with stack-all can similarly be configured: stack-all -c -n lts21 or setting newest = lts-21.

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.

Any stack command can be used, possibly outside a project, eg: stack-all list aeson

Happy stack building!

Install

The project is released on Hackage.

You can also build from a git clone with stack install or cabal install.

Collaboration

The project is hosted at https://github.com/juhp/stack-all under a BSD license.