summoner

Tool for scaffolding fully configured batteries-included production-level Haskell projects.

https://github.com/kowainik/summoner

LTS Haskell 16.31:2.0.1.1
Stackage Nightly 2020-06-29:2.0.1.1
Latest on Hackage:2.0.1.1

See all snapshots summoner appears in

MPL-2.0 licensed by Veronika Romashkina, Dmitrii Kovanikov
Maintained by Kowainik
This version can be pinned in stack with:summoner-2.0.1.1@sha256:8ced26ff256e012447e2c6a49a20102511adbea605624f00a059e1e85c366719,6993

🔮 Summoner

wizard GitHub CI Build Windows build Hackage MPL-2.0 license

So many of our dreams at first seem impossible, then they seem improbable, and then, when we summon the will, they soon become inevitable.

Christopher Reeve

Summoner is a tool for scaffolding fully configured batteries-included production-level Haskell projects.

Do you want to create a library that is to be uploaded to Hackage/Stackage, that builds with both Cabal and Stack and supports the latest three major GHC versions? Or are you building a production application which uses a custom prelude and has CI with GitHub Actions or Travis Linux and AppVeyors Windows checks? Maybe do you want to play with your idea in a single module without introducing the whole complexity of the Haskell projects? Summoner can help you do all that with minimal effort from you - it can even upload the project to GitHub if you wish!

By the way, Summoner operates as either CLI or TUI application, so you can choose what you are more comfortable with and install only the required one.

Structure

Demo

[Back to the Table of Contents] ↑

TUI demo

[Back to the Table of Contents] ↑

TUI demo

CLI demo

[Back to the Table of Contents] ↑

CLI demo

Examples

[Back to the Table of Contents] ↑

You can also see complete examples in the following folder:

The directory contains the following examples:

  • cabal-minimal: Minimal Haskell project with the Cabal-only support, default settings and all of the integrations disabled.
  • cabal-full: Cabal-only project with all integrations enabled.
  • stack-full: Stack-only project with all integrations enabled.
  • full-batteries: All batteries-included project which supports both build tools and shows every Summoner feature.

Features

[Back to the Table of Contents] ↑

Summoner is a tool that combines predefined configurations, command-line arguments and a chosen interface.

To fully understand the power in your hands with the help of Summoner, please read this section.

Below you can see highlighted features in different categories.

Project

[Back to the Table of Contents] ↑

Features related to the structure and content of the generated projects.

  • Support for Cabal and Stack build tools.

  • Ability to pick stanzas (library, executable, test-suite, benchmark).

  • Usage of common stanza to reduce .cabal file’s boilerplate.

  • Option to include an alternative prelude, if desired. The project would then use the mixins technique.

  • Whole Hackage-upload checklist support (exhaustive .cabal file, PVP versioning, GHC options, conventional meta files).

  • Support for multiple GHC versions, with thoughtful reflection on project meta, base versions (e.g. base >= 4.9 && < 4.13), etc.

  • Ability to create runnable Haskell scripts.

  • Different license support: MIT, BSD-2-Clause, BSD-3-Clause, GPL-2.0, GPL-3.0, LGPL-2.1, LGPL-3.0, AGPL-3.0, Apache-2.0, MPL-2.0, ISC, None (without file).

  • Creation of the CHANGELOG.md file with PVP versioning policy.

  • Ability to include any custom files (including .stylish-haskell.yaml, CONTRIBUTING.md, CODEOWNERS, FUNDING.yml etc.).

  • Usage of the ghc-options field with sensible defaults.

    If ghc-options are not explicitly stated in the configuration file, then the following list of GHC flags is added to all stanzas:

    -Wall
    -Wcompat
    -Widentities
    -Wincomplete-uni-patterns
    -Wincomplete-record-updates
    -Wredundant-constraints       (GHC ⩾ 8.0)
    -fhide-source-paths           (GHC ⩾ 8.2)
    -Wmissing-export-lists        (GHC ⩾ 8.4)
    -Wpartial-fields              (GHC ⩾ 8.4)
    -Wmissing-deriving-strategies (GHC ⩾ 8.8)
    

    Besides, the following GHC options are added to the executable, tests and benchmark stanzas:

    -threaded
    -rtsopts
    -with-rtsopts=-N
    

GitHub

[Back to the Table of Contents] ↑

  • Initialisation of the git repository inside the project folder.
  • Initial commit creation.
  • Uploading the repository to GitHub.
  • Exhaustive .gitignore file.
  • Formation of the README file with Hackage, Stackage and CI badges.
  • Linking to the GitHub repository in the .cabal file.
  • Ability to include your custom GitHub meta files: CONTRIBUTING.md, CODEOWNERS, .github/pull_request_template.md, etc.
  • Guessing user credentials from the local .gitconfig file.

CI

[Back to the Table of Contents] ↑

  • Generation of the .travis.yml file that runs build and tests on CI under Linux using Dead simple Haskell Travis Settings for Cabal and Stack.
  • Generation of the appveyor.yaml file which runs build and tests on CI under Windows.
  • Generation of the .github/workflows/ci.yml file that runs build and tests on GitHub Actions CI under Linux using Cabal.
  • Configuration matrix on CI to build with multiple GHC versions and various build tools.
  • -Werror is enabled on CI not to miss any warnings.
  • Run HLint checks on CI.

Others

[Back to the Table of Contents] ↑

  • Carefully collected Haskell project best practices gathered in your projects’ scaffold.
  • Generate beginner-friendly default configuration using the summon config command.
  • Ability to create a project in the offline mode.
  • Ability to check GHC-specific versions of the corresponding base library and Stackage snapshot resolver via summon show ghc command.

Project structure example

[Back to the Table of Contents] ↑

This is an example of the project hierarchy you can get if you are running Summoner’s new command with all options enabled:

project-name/
├── app/
│   └── Main.hs
├── benchmark/
│   └── Main.hs
├── src/
│   ├── ProjectName.hs
│   └── Prelude.hs
├── test/
│   └── Spec.hs
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── project-name.cabal
├── README.md
├── Setup.hs
├── stack.yaml
├── stack-8.6.5.yaml
├── appveyor.yml
├── .git
├── .gitignore
├── .stylish-haskell.yaml
└── .travis.yml

Get started

[Back to the Table of Contents] ↑

Prerequisites

[Back to the Table of Contents] ↑

To start using Summoner make sure that you have the following tools installed on your machine:

  • git – to initialize the GitHub repo.
  • hub – to upload the project to GitHub.
  • curl – to download licenses.

We also have minimal version requirements for build tools:

However, it is always recommended to use the newest versions of build tools.

Installation

[Back to the Table of Contents] ↑

Summon contains two executables:

  • summon: scaffold projects using interactive CLI mode.
  • summon-tui: scaffold projects using TUI.

Below you can find the description of how to install each of them so you can choose the one you want.

Summon-TUI

[Back to the Table of Contents] ↑

NOTE: summon-tui is not supported on Windows. See this issue.

TUI: download binary

[Back to the Table of Contents] ↑

You can download binary directly from GitHub releases.

After downloading binary, make it executable and copy it under convenient location, for example:

chmod +x summon-cli-linux
mv summon-cli-linux ~/.local/bin/summon
TUI: Homebrew

[Back to the Table of Contents] ↑

If you are on MacOS, you can get Summoner using Homebrew Kowainik’s Tap.

You need to run the following command for that:

$ brew install kowainik/tap/summoner-tui
TUI: Ubuntu

[Back to the Table of Contents] ↑

If you are on Ubuntu, you can get Summoner from Kowainik’s PPA.

You need to run the following commands for that:

$ sudo add-apt-repository ppa:kowainik/summoner-tui
$ sudo apt update
$ sudo apt install summoner-tui
TUI: from Hackage/Stackage

[Back to the Table of Contents] ↑

Using cabal:

cabal v2-update
cabal v2-install summoner-tui

Using stack:

stack install summoner-tui
TUI: from source

[Back to the Table of Contents] ↑

Fetch the repo using cabal:

cabal get -s summoner

or clone the directory from GitHub:

git clone https://github.com/kowainik/summoner.git

Step into the directory:

cd summoner

Build and install using cabal:

cabal v2-install summoner-tui:exe:summon-tui

Build and install using stack:

stack install summoner-tui:exe:summon-tui

Summon-CLI

[Back to the Table of Contents] ↑

CLI: download binary

[Back to the Table of Contents] ↑

You can download binary directly from GitHub releases.

After downloading binary, make it executable and copy it under convenient location, for example:

chmod +x summon-cli-linux
mv summon-cli-linux ~/.local/bin/summon
CLI: Homebrew

[Back to the Table of Contents] ↑

If you are on MacOS, you can get Summoner using Homebrew Kowainik’s Tap.

You need to run the following command for that:

$ brew install kowainik/tap/summoner-cli
CLI: Ubuntu

[Back to the Table of Contents] ↑

If you are on Ubuntu, you can get Summoner from Kowainik’s PPA.

You need to run the following commands for that:

$ sudo add-apt-repository ppa:kowainik/summoner-cli
$ sudo apt update
$ sudo apt install summoner-cli
CLI: from Hackage/Stackage

[Back to the Table of Contents] ↑

Using cabal:

cabal v2-update
cabal v2-install summoner

Using stack:

stack install summoner
CLI: from source

[Back to the Table of Contents] ↑

Fetch the repo using cabal:

cabal get -s summoner

or clone the directory from GitHub:

git clone https://github.com/kowainik/summoner.git

Step into the directory:

cd summoner

Build and install using cabal:

cabal v2-install summoner-cli:exe:summon

Build and install using stack:

stack install summoner:exe:summon

Setup

[Back to the Table of Contents] ↑

You can turn on bash auto-completion by running the following command:

source <(summon --bash-completion-script `which summon`)

Usage

[Back to the Table of Contents] ↑

To start summoning projects nothing additional is required. However, to tweak your settings further, you can use additional configuration settings. There are several options you can use to set particular configurations for new projects (in increasing order of priority):

  1. Default configuration file (~/.summoner.toml).
  2. Fields user.login, user.name and user.email from ~/.gitconfig.
  3. Explicitly specified configuration file by --file FILENAME option (used instead of the default one if specified).
  4. Options that are stated by CLI arguments.
  5. User input. It could be
    • TUI – User data specified in the window of summon-tui.
    • CLI – Interactively inputted answers during execution of the summon command (for the options that were not specified on previous steps).

To cut a long story short, the configuration uses Partial Options Monoid Pattern.

File configuration

[Back to the Table of Contents] ↑

Here is the list of the options that can be configured to suit your needs. If options are not specified, they are asked interactively (or some sensible defaults are used).

Field Type Description
cabal Bool Add Cabal support?
stack Bool Add Stack support?
owner Text GitHub login.
fullName Text Full name.
email Text E-mail address.
license License One of: MIT, BSD2, BSD3, GPL-2, GPL-3, LGPL-2.1, LGPL-3, AGPL-3, Apache-2.0, MPL-2.0, None.
ghcVersions [GHC] summoner uses default GHC-8.8.3. However, additionally you can specify other versions. For each version x.y.z the stack-x.y.z.yaml will be created.
github Bool Turn on GitHub integration by default?
gitignore [Text] List of files you want added to the default .gitignore. (Ignored if github = false)
noUpload Bool Do not upload to GitHub, but create all GitHub related files if specified (Ignored if github = false)
private Bool Create private repository by default? (Ignored if github = false)
githubActions Bool Turn on GitHub Actions integration by default? (Currently working with Cabal only. Ignored if github = false)
travis Bool Turn on Travis integration by default? (Ignored if github = false)
appveyor Bool Turn on AppVeyor integration by default? (Ignored if github = false)
lib Bool Create src folder with simple ProjectName.hs file and library target?
exe Bool Create app folder with simple Main.hs file and executable target?
test Bool Create test folder with simple Spec.hs file and test target?
bench Bool Create benchmark folder with Main.hs file with gauge library usage example?
extensions [Text] List of the default extensions to add into default-extensions section in the .cabal.
ghc-options [Text] List of the default GHC options to add into ghc-options section in the .cabal.
files Map FilePath Source Custom mapping of files to their sources. Represented as a list of inline tables in TOML in a format like files = [ { path = "foo", url = "https://..." }, ... ]. Supported file types: url, local, raw.
[prelude]
package Text The package name of the custom prelude you’d like to use in the project (doesn’t work without module field).
module Text The module name of the custom prelude you’d like to use in the project (doesn’t work without package field).

You can create default configuration using the summon config command. See the default content here.

For a real-life example of the configuration, see the configuration for projects of the Kowainik organization.

Command line arguments

[Back to the Table of Contents] ↑

Available commands:

Usage:
  summon COMMAND
      Set up your own Haskell project

Available commands:
  new                      Create a new Haskell project
  script                   Create a new Haskell script
  show                     Show available licenses or ghc versions
  config                   Create default TOML configuration for summoner

Available global options:
  -h, --help               Show this help text
  -v, --version            Show summoner's version

summon new command:

[Back to the Table of Contents] ↑

Usage:
  summon new PROJECT_NAME [--ignore-config] [--no-upload] [--offline]
             [-f|--file FILENAME]
             [--cabal]
             [--stack]
             [--prelude-package PACKAGE_NAME]
             [--prelude-module MODULE_NAME]
             [with    [OPTIONS]]
             [without [OPTIONS]]

Available options:
  -h, --help               Show this help text
  --ignore-config          Ignore configuration file
  --no-upload              Do not upload to GitHub. Special case of the '--offline' flag.
  --offline                Offline mode: create project with 'All Rights Reserved' license
                           and without uploading to GitHub.
  --cabal                  Cabal support for the project
  --stack                  Stack support for the project
  -f, --file FILENAME      Path to the toml file with configurations. If not
                           specified '~/.summoner.toml' will be used by default
  --prelude-package PACKAGE_NAME
                           Name for the package of the custom prelude to use in
                           the project
  --prelude-module MODULE_NAME
                           Name for the module of the custom prelude to use in
                           the project

Available commands:
  with                     Specify options to enable
  without                  Specify options to disable

Available command options:
  -h, --help               Show this help text
  -g, --github             Github integration
  -p, --private            Create private GitHub repository
  -a, --actions            GitHub Actions CI integration
  -c, --travis             Travis CI integration
  -w, --app-veyor          AppVeyor CI integration
  -l, --library            Library target
  -e, --exec               Executable target
  -t, --test               Tests
  -b, --benchmark          Benchmarks

summon script command:

[Back to the Table of Contents] ↑

Usage:
  summon script BUILD_TOOL [-g|--ghc GHC_VERSION] [-n|--name FILE_NAME]
      Create a new Haskell script

Available options:
  -h,--help                Show this help text
  -g,--ghc GHC_VERSION     Version of the compiler to be used for script
  -n,--name FILE_NAME      Name of the script file

summon show command:

[Back to the Table of Contents] ↑

Usage:
  summon show COMMAND
      Show supported licenses or ghc versions

Available commands:
  ghc                      Show available ghc versions
  license                  Show available licenses
  license [LICENSE_NAME]   Show specific license text

Available options:
  -h, --help               Show this help text

For example, the following command preconfigures the project settings with the custom prelude relude, included library, executable, test stanzas (but without benchmarks), creates a private repository on GitHub with the GitHub Actions CI, Travis CI and AppVeyor CI integrated.

summon new my-project with -letgcpwa without -b --prelude-package relude --prelude-module Relude

summon config command:

[Back to the Table of Contents] ↑

Usage: summon config [-f|--file=FILENAME]
  Create a default TOML configuration file for summoner

Available options:
  -h,--help                Show this help text
  -f,--file=FILENAME       Path to the toml file with configurations. If not
                           specified '~/.summoner.toml' will be used by default

This command will generate a TOML configuration file with the default settings that can be used to scaffold future Haskell packages. It contains all options supported by Summoner with comments and examples. Though, all options would be turned off by default and to use them one will need to uncomment the correspoding lines. See the default content here.

Possible command usages:

summon config
summon config --file ~/.summoner-demo.toml

TUI

[Back to the Table of Contents] ↑

TUI new command

[Back to the Table of Contents] ↑

summon new TUI

Section 1 – The main section where user inputs data or changes the configurations.

Section 2 – The structure of the project that is going to be created with the current configurations. This tree changes on-the-fly.

Section 3 – Hints, project status, or current errors in the configurations.

Section 4 – Useful hotkeys.

The TUI window opens with the pre-filled information received from a config file and command-line arguments. However, it’s possible to change any field as per your needs.

In the screenshot you can see that you’ll be given a few text fields to fill in or some checkboxes that represent boolean values of the configurations. To help you fill in the correct input, there are some ⓘ info messages in the Status section, which give additional details about the current field.

To help you navigate between the form fields here are the available hotkeys:

Key Action
Esc Abort summoner
Enter If input is valid go to the Confirm window
Tab Change the focus to the next active field
Shift + Tab Change the focus to the previous active field
Space Enable/disable current checkbox or radio button
Ctrl + d Delete the input of the current text field
Ctrl + u Delete the input of the current text field from the cursor position to the beginning
Ctrl + k Delete the input of the current text field from the cursor position to the end
Ctrl + a Move the cursor to the beginning of the current input field
Ctrl + e Move the cursor to the end of the current input field
Up/Down Scroll license list when focused

Note that the form should be valid in order to be able to go to the Confirm window. If there are some errors in the input, you could see details about these errors in the Status section of the form.

TUI script command

[Back to the Table of Contents] ↑

See CLI description of the summon script command.

TUI show command

[Back to the Table of Contents] ↑

These commands display the list of supported GHC versions or Licenses. Also, when the license name is specified the window with the scrollable content of the License text is shown.

CLI

[Back to the Table of Contents] ↑

CLI new command

[Back to the Table of Contents] ↑

In CLI mode of operation Summoner asks about every project setting. Most of the questions contain a default value, so you can press Enter to choose the default value. If some option is specified via a configuration file or CLI arguments, then the question is skipped and the predefined value is used.

CLI script command

[Back to the Table of Contents] ↑

This command creates minimal cabal or stack script file which allows you to save some keystrokes and eliminates the need to remember magic words for scripts.

Cabal example: summon script cabal -n Main.hs generates executable file Main.hs with the following content:

#!/usr/bin/env cabal
{- cabal:
build-depends:
  , base ^>= 4.13.0.0
-}

main :: IO ()
main = putStrLn "Hello, World!"

Stack example: summon script stack -n Main.hs generates executable file Main.hs with the following content:

#!/usr/bin/env stack
{- stack
  --resolver lts-15.5
  script
  --package base
-}

main :: IO ()
main = putStrLn "Hello, World!"

CLI show command

[Back to the Table of Contents] ↑

These commands display the list of supported GHC versions, or Licenses. Also, when the license name is specified, the content of the License is outputted to the terminal.

FAQ

[Back to the Table of Contents] ↑

I want to use HTTPS remote for the created GitHub project, but it creates SSH one. How should I fix this?

We are using hub tool to create the projects at GitHub. It uses SSH so that you would get the remote links in the following format:

[email protected]:user/repo.git

We can not change or configure this behaviour, but there are several workarounds in case you need to use HTTPS link for the remote.

  1. Change the remote of the repository after its creation:
    git remote set-url origin https://github.com/user/repo.git
    
  2. Change hub configurations globally. Simply run the following command:
    git config --global hub.protocol https
    
  3. Alternatively, change hub configurations for a single session:
    export HUB_PROTOCOL="https"
    

Why some of the Stack checks on my TravisCI matrix are marked as “This job is allowed to fail”?

Due to the Stack problem of working with older versions of Cabal, the build can fail with Stack for some older GHCs. We are adding these checks into allow_failures section, as this is a known issue, and there is no need for the whole build to fail because of that.

For more information about the issue and some workarounds from Stack developers, see the following ticket:

For Developers

[Back to the Table of Contents] ↑

If you’d like to take part in the development processes, here are a few things to keep in mind:

  • Summoner is a multi-package project which has two packages inside: summoner-cli and summoner-tui. We are supporting the same functionality in both of them, so, if it’s possible, you should add/change the code in both of the packages.
  • Summoner uses the custom prelude relude.
  • We are using the Kowainik style guide.
  • To sum up, here is the Contributing guide we use across the repositories.
  • This project is contributor-friendly, so be kind to other people working on the project.

Dependencies

[Back to the Table of Contents] ↑

On Linux, to build the summoner-tui you’ll need to have libtinfo installed. The easiest way to get this is from your system’s package manager and is usually available as the package libtinfo-dev.

Build

[Back to the Table of Contents] ↑

To build the project you can use the following commands:

cabal v2-build all

for Cabal and

stack build

for Stack.

Test

[Back to the Table of Contents] ↑

Summoner uses the golden tests technique for assuring the correctness of the generated files. For this purpose, we have the golden folder with two sample projects to test against.

To actually run tests you need to run:

cabal v2-test all

or, if using Stack

stack test

Run

[Back to the Table of Contents] ↑

Building Summoner with the recommended method creates two executables: summon and summon-tui. To run the compiled executable you can use the following commands:

cabal v2-exec summon -- SOME_COMMAND
cabal v2-exec summon-tui -- SOME_COMMAND

or, if using Stack

stack exec summon -- SOME_COMMAND
stack exec summon-tui -- SOME_COMMAND

Acknowledgments

[Back to the Table of Contents] ↑

This project was inspired by Aelve/new-hs, which is the tool with the same goal but it’s only for creating cabal projects.

Icons made by Nikita Golubev from Flaticon is licensed by CC 3.0 BY.

Changes

Changelog

summoner uses PVP Versioning. The changelog is available on GitHub.

2.0.1.1 — May 29, 2020

  • #467: Allow aeson-1.5.0.0.
  • #469: #TUI Allow brick-0.54.

2.0.1.0 — May 21, 2020

  • #443: Support GHC-8.10.1 for Summoner project.
  • #459: Bump up tomland version to 1.3.0.0.
  • #460: Bump up relude version to 0.7.0.0. Remove Summoner.Template.Mempty as memptyIfFalse is imported from Relude.
  • #455: Allow validation-selective version 0.1.0.0.
  • #452: Bump up colourista version to 0.1.0.0. Remove the Summoner.Ansi module.
  • #TUI Bump up brick upper bound to allow 0.53.
  • #CLI Bump up time upper bound to allow 1.10.

2.0.0.0 – Mar 28, 2020

  • #246: Put common fields into the common-options common stanza. (by @vrom911)

  • #351, #395, #398: #CLI #TUI Add GitHub Actions CI check as an option for the generated project.

    • Add -a or --actions CLI option for GitHub actions.
    • Add GitHub Actions entry into interactive CLI mode.
    • Add GitHub Actions button into TUI.
    • Add githubActions to the TOML configs.

    (by @patrickt, @vrom911, @chshersh)

  • #401, #429: Support GHC-8.8.3 in the project. Make GHC-8.8.3 default for the generated projects. Upgrade Stack LTS to 15.5. (by @vrom911)

  • #418: Bump default cabal version to 2.4 in the generated project. (by @vrom911)

  • #114: #CLI #TUI Implement non-interactive mode with -n | --non-interacive command-line option. (by @vrom911)

  • #70: #CLI #TUI Implement summon config command. This command will generate the default TOML configuration file with helpful comments. (by @chshersh)

  • #361: Always put all default warnings in ghc-options inside common stanza under cabal conditionals on the GHC version. Now they look like this:

    if impl(ghc >= 8.4)
      ghc-options:       -Wmissing-export-lists
                         -Wpartial-fields
    if impl(ghc >= 8.8)
      ghc-options:       -Wmissing-deriving-strategies
    

    (by @chshersh)

  • #345: Apply mixins approach for using alternative preludes instead of the base-noprelude trick. Now it looks like this in the .cabal file:

    mixins:              base hiding (Prelude)
                       , relude (Relude as Prelude)
    

    (by @chshersh)

  • #251: Update LICENSE names for .cabal files in generated projects. Add ISC to the list of the accepted licenses. (by @vrom911)

  • #CLI #TUI Customise outputted LICENSE text for summon show license LICENSE_NAME command (by @vrom911)

  • #399: Add Haddock header to library module.

    {- |
    Copyright: (c) 2020 FULL_NAME
    SPDX-License-Identifier: LICENSE_NAME
    Maintainer: NAME <[email protected]>
    
    Project description
    -}
    

    (by @vrom911)

  • Improve maintainer field in the generated .cabal file. (by @vrom911)

  • #430: Instead of not including old GHCs for Stack check at Travis, those versions are added to the allow_failures section of matrix. (by @vrom911)

    Note: For the Stack failure reasons see this issue.

  • #394: Do not crush when hub is not installed. Instead, print descriptive warning message. (by @vrom911)

  • #34: Print helpful error message when hub fails (for example, if the password is incorrect). (by @chshersh)

  • #281: Add more example projects and golden tests for various scaffolding configurations. (by @chshersh)

  • #375: Remove deprecated stylish and contributing fields in the configurations. Use files instead. (by @vrom911)

  • Use --silent and --fail options with curl commands. (by @chshersh)

  • Upgrade GHC-8.6.5 LTS to 14.27. (by @vrom911)

  • #TUI Allow brick-0.52. (by @vrom911)

  • #363: Move from generic-deriving to generic-data. (by @chshersh)

  • #434: Move to validation-selective. (by @vrom911)

  • Use colourista for pretty terminal formatting. (by @chshersh)

1.4.0.0 – Dec 25, 2019 🎅

  • #339: Support GHC 8.8.1 in generated projects. Note: Stack projects will use nightly resolver as the stable one is not out at the moment of this issue is implemented. (by @vrom911)

  • Add -Wmissing-deriving-strategies option to GHC version 8.8.1 and upper in the generated projects. (by @vrom911)

  • #314: #CLI #TUI Improve summon(-tui) show ghc output. (by @gableh, @vrom911)

  • #316: Add logos to README bagdes in the generated projects. (by @vrom911)

  • Generate project of version 0.0.0.0 instead of 0.0.0. (by @vrom911)

  • #322: Run HLint check before project build in .travis.yml file for the generated projects. (by @vrom911)

  • #382: Improve error logging when fetching the license from GitHub while generating the project. (by @chshersh)

  • #255: #CLI #TUI Autofill prelude module name when package name is typed. (by @yigitozkavci)

  • #354: #CLI #TUI Validate prelude package name and module name in config file, CLI, TUI. (by @yigitozkavci, @vrom911)

  • #315: Remove -fhide-source-paths from generated stack.yaml file as it is implied by the newer version of Stack. (by @bangng, @chshersh)

  • Add stack.yaml.lock to .gitignore file in the generated project. (by @vrom911)

  • #318: Support GHC 8.6.5 in generated projects. (by @vrom911)

  • Remove support of GHC 8.6.4, 8.6.3, 8.4.3. Leave only the latest versions of each major release for generated projects. (by @vrom911)

  • #333: Introduce files option in the TOML configuration which allows to specify custom files. Deprecate stylish and contributing options. (by @chshersh)

    Migration guide: Instead of

    stylish.url = "some url"
    contributing.link = "some link"
    

    specify them like this:

    files =
        [ { path = ".stylish-haskell.yaml"
          , url  = "some url"
          }
        , { path = "CONTRIBUTING.md"
          , link = "some link"
          }
        ]
    
  • #374: Remove warnings field in the TOML configuration which was deprecated in the previous release. (by @chshersh)

    Migration guide: Rename warnings field to ghc-options instead.

  • #367: Add raw type of custom extra files in the TOML configuration. Remove link type of file. (by @chshersh)

    Migration guide: Replace link with raw and specify any custom text you want.

  • Rename file config field of source to local in the TOML configuration. (by @chshersh)

  • #327: Better AppVeyor CI configuration for both cabal and stack in the generated project. (by @chshersh)

  • #253: #TUI Fix new line in the Description field of the form. (by @yigitozkavci)

  • #385: Add golden tests for summon show ghc command’s output. (by @vrom911)

  • #384: Test golden project build’s success. (by @chshersh)

  • #318: Build Summoner multipackage project with GHC 8.6.5. (by @vrom911)

  • #338: Build Summoner multipackage project with GHC-8.8.1. (by @vrom911)

  • #360: Use mixins with base and relude in Summoner. Drop base-noprelude trick. (by @vrom911)

  • #329: Bump up to optparse-applicative-0.15, use custom ParserPrefs. (by @vrom911)

  • #328: Upgrade tomland bounds to allow 1.1.0.0. (by @vrom911)

  • #373: Bump up to tomland-1.2.1.0. (by @vrom911)

  • Bump up to relude-0.6.0.0. (by @vrom911)

  • #337: Allow generic-deriving-1.13. (by @chshersh)

  • #341: Allow ansi-terminal-0.10. (by @mpilgrem)

  • #323: Allow tree-diff-0.1. (by @vrom911)

  • #320: Allow hedgehog-1.0. (by @vrom911)

1.3.0.1 — Apr 10, 2019

  • Include golden test files into extra-source-files.

1.3.0 (TUI: 0.1.0) — Apr 9, 2019

  • #285: #CLI #TUI Implement summon script command.

  • #151, #295: Add support for GHC-8.6. Make GHC-8.6.4 default.

  • #269: Important: Introduce ghc-options configuration parameter. Deprecate warnings field in the TOML configuration.

    Migration guide: Please, rename warnings field if you use one, it will be removed in the very next release. Use ghc-options instead.

  • #303: Add option noUpload to the TOML configuration.

  • Important: Summoner doesn’t add old GHC versions into Travis matrix for Stack anymore. See this Stack issue for reasoning: https://github.com/commercialhaskell/stack/issues/4488

  • #280: Support build with cabal-install on the AppVeyor CI.

    #TUI AppVeyor CI checkbox is no longer disabled when only cabal build tool is selected.

  • #272: Simplify Travis config for Cabal in the generated project.

  • #275: Simplify Travis settings/installation process for Stack in the generated project.

  • #261: Guess author login, name and email from .gitconfig.

  • #268: #CLI Simplify process of adding custom prelude in the interactive mode.

  • #282: Allow users to extend the .gitignore file.

  • #286, #288, #304: Bump up to tomland-1.0.0, relude-0.5.0, shellmet-0.0.1.

  • Drop support for GHC-8.6.3 on CI. Support GHC-8.6.4 on CI.

  • #TUI Upgrade to summoner-1.3.0.

  • #297: #TUI Strip project description.

  • #304: #TUI Bump up to brick-0.47.

1.2.0 (TUI: 0.0.0) — Nov 30, 2018

  • #208: #TUI Implement initial TUI for summoner.
  • Make cabal-version: 2.0 default in generated projects.
  • #11: Support offline mode.
  • #199: Add None license with no LICENSE file generation. Add licenses short descriptions text during the interactive mode. Patch summon show license command to show short description about each license.
  • #197 Build with stack lts-12.20, and support GHC 8.4.4 in project generation. Make GHC-8.4.4 the default one for generated project.
  • #37: Add HLint check on Travis CI in generatd projects.
  • #142: Add version bounds to base in the generated .cabal file.
  • #239: Make categories not mandatory.
  • Use defaultDescription for project description if not specified.
  • #185: Add golden tests.
  • #184 Add --no-upload option.
  • #169: Make AppVeyor use the 64bits version of stack and build for 64 bits.
  • #154: Add Link constructor to Source data type.
  • #178: Remove unnecessary new lines and trailing spaces in most places.
  • #168: Upgrade stack intall-cabal option’s version to 2.2.0.1 in the generated Travis file.
  • #195: Update prompt questions for CLI.
  • Add more documentation to the functions.
  • #155: Bump up to tomland-0.5.0.
  • #202: Bump up to relude-0.4.0.
  • Remove tasty dependencies from tests.
  • Drop support for GHC-8.6.1 on CI. Support GHC-8.6.2 on CI.
  • Drop support for GHC-8.4.3 on CI. Build with GHC-8.4.4 on CI.
  • Use defaultDescription for project description if not specified.

1.1.0.1 – Sep 10, 2018

  • Bump up relude version to 0.3.0.
  • #146: Migrate to base-noprelude.
  • Add -Werror to build option in generated .travis.yml

1.1.0

  • #128: Important: Replace summon with summon new command. To create a project now the following command should be used:
    summon new my-project
    
  • #82: Add stackage badges.
  • #109: Fix travis cache directories.
  • #117: Step into created project properly
  • #110: Print executing command.
  • #91: Add warning fields for ghc.
  • #90: Add TOML test.
  • #120: Bump up dependencies.
  • #58: Make Licence type safer.
  • #124: Print directories bold.
  • #130: Show git revision version under --version command.
  • #63: Add show ghc, show license and show license <LICENSE_NAME> commands.
  • #122: Remove github link from CHANGELOG when github is not chosen.
  • #35: Add config option to add .stylish-haskell.yaml to your project (via URL or file path).
  • Bump up tomland version to 0.4.0.
  • #138: Remove traces of GitHub from .cabal file when GitHub integration is disabled.
  • #31: Add config option to add CONTRIBUTING.md to your project (via URL or file path).
  • #27: Remove b script.

1.0.6

  • Use relude instead of universum.
  • #105: Add --ignore-config option.

1.0.5

  • #100: Bump up to ghc-8.4.3. Add support for Ghc843 in code and make it default.
  • Make CI badges in README be shown depending on the chosen options.
  • #99: UseTravis-specific env variable TRAVIS_BUILD_DIR in created travis file.
  • #97: Add cabal to created travis file.
  • #96: Add option to choose cabal, stack or both.

1.0.4

  • Bump up tomland to version 0.3.

1.0.3

  • #92: Remove -fhide-source-paths from generated stack yaml files for GHC < 8.2

1.0.2

  • #87: Fix Travis matrix for not default ghc versions.

1.0.1

  • #85: Remove base-noprelude from dependencies.

1.0.0

  • Important: Rename hs-init to summoner. Transform the script into the package.
  • #54: Rename on and off commands to with and without.
  • #48:
    • Add ability to write configurations file. Remove Targets data type. Use Config instead for default, file and CLI configurations.
  • #60: Use custom prelude universum.
  • #39: Add option to use custom prelude in CLI and in .toml configuration.
  • #38: Add option to add default extensions to .toml config.
  • #62: Make some parts of output not only colorful, but also bold. This makes output prettier.
  • #67: Add Aswer data type to handle yes-no CLI questions.
  • #61: Add CLI --version option.
  • #73: Make custom prelude be table in toml.
  • #74: Print hierarchy tree for the created project.

hs-init

0.0.4

  • Now works on windows systems as well
  • Add powershell install script for Windows

0.0.3

  • #45: Support AppVeyor CI for created projects.

0.0.2

  • Use metavar for on-off commands.
  • Upgrade lts to 10.3, use ghc 8.2.2 as default value.

0.0.1

  • #36: Add option for creating private repositories — -p | --private.