haskell-actions/setup

April 8, 2026 ยท View on GitHub

GitHub Actions status

This action sets up a Haskell environment for use in actions by:

  • if requested, installing a version of ghc and cabal and adding them to PATH,
  • if requested, installing a version of Stack and adding it to the PATH,
  • outputting of ghc-version/exe/path, cabal-version/exe/path, stack-version/exe/path, stack-root and cabal-store (for the requested components).

The GitHub runners come with pre-installed versions of GHC and Cabal. Those will be used whenever possible. For all other versions, this action utilizes ghcup, and chocolatey.

Usage

See action.yml and docs/examples.md.

Inputs

NameDescriptionTypeDefault
ghc-versionGHC version to use, e.g. 9.2 or 9.2.5.stringlatest
cabal-versionCabal version to use, e.g. 3.6.stringlatest
stack-versionStack version to use, e.g. latest. Stack will only be installed if enable-stack is set.stringlatest
enable-stackIf set, will setup Stack."boolean"false/unset
stack-no-globalIf set, enable-stack must be set. Prevents installing GHC and Cabal globally."boolean"false/unset
stack-setup-ghcIf set, enable-stack must be set. Runs stack setup to install the specified GHC. (Note: setting this does not imply stack-no-global.)"boolean"false/unset
disable-matcherIf set, disables match messages from GHC as GitHub CI annotations."boolean"false/unset
cabal-updateIf set to false, skip cabal update step.booleantrue
ghcup-release-channelIf set, add a release channel to ghcup.URLnone

Note: "boolean" types are set/unset, not true/false. That is, setting any "boolean" to a value other than the empty string ("") will be considered true/set. However, to avoid confusion and for forward compatibility, it is still recommended to only use value true to set a "boolean" flag.

In contrast, a proper boolean input like cabal-update only accepts values true and false.

Outputs

The action outputs parameters for the components it installed. E.g. if ghc-version: 8.10 is requested, the action will output ghc-version: 8.10.7 if installation succeeded, and ghc-exe and ghc-path will be set accordingly. (Details on version resolution see next section.)

NameDescriptionType
ghc-versionThe resolved version of ghcstring
cabal-versionThe resolved version of cabalstring
stack-versionThe resolved version of stackstring
ghc-exeThe path of the ghc executablestring
cabal-exeThe path of the cabal executablestring
stack-exeThe path of the stack executablestring
ghc-pathThe path of the ghc executable directorystring
cabal-pathThe path of the cabal executable directorystring
stack-pathThe path of the stack executable directorystring
cabal-storeThe path to the cabal storestring
stack-rootThe path to the stack root (equal to the STACK_ROOT environment variable if it is set; otherwise an OS-specific default)string

Version Support

This action is conscious about the tool versions specified in versions.json. This list is replicated (hopefully correctly) below.

Versions specified by the inputs, e.g. ghc-version, are resolved against this list, by taking the first entry from the list if latest is requested, or the first entry that matches exactly, or otherwise the first entry that is a (string-)extension of the requested version extended by a .. E.g., 8.10 will be resolved to 8.10.7, and so will 8.

GHC:

  • latest-nightly (requires the resp. ghcup-release-channel, e.g. https://ghc.gitlab.haskell.org/ghcup-metadata/ghcup-nightlies-0.0.7.yaml)
  • latest (default)
  • 9.14.1 9.14
  • 9.12.4 9.12
  • 9.12.2
  • 9.12.1
  • 9.10.3 9.10
  • 9.10.2
  • 9.10.1
  • 9.8.4 9.8
  • 9.8.2
  • 9.8.1
  • 9.6.7 9.6
  • 9.6.6
  • 9.6.5
  • 9.6.4
  • 9.6.3
  • 9.6.2
  • 9.6.1
  • 9.4.8 9.4
  • 9.4.7
  • 9.4.6
  • 9.4.5
  • 9.4.4
  • 9.4.3
  • 9.4.2
  • 9.4.1
  • 9.2.8 9.2
  • 9.2.7
  • 9.2.6
  • 9.2.5
  • 9.2.4
  • 9.2.3
  • 9.2.2
  • 9.2.1
  • 9.0.2 9.0
  • 9.0.1
  • 8.10.7 8.10
  • 8.10.6
  • 8.10.5
  • 8.10.4
  • 8.10.3
  • 8.10.2
  • 8.10.1
  • 8.8.4 8.8
  • 8.8.3
  • 8.8.2
  • 8.8.1
  • 8.6.5 8.6
  • 8.6.4
  • 8.6.3
  • 8.6.2
  • 8.6.1
  • 8.4.4 8.4
  • 8.4.3
  • 8.4.2
  • 8.4.1
  • 8.2.2 8.2
  • 8.0.2 8.0

Suggestion: Try to support at least the three latest major versions of GHC.

Cabal:

  • head (the cabal-head release of the most recent build of the master branch)
  • latest (default, recommended)
  • 3.16.1.0 3.16
  • 3.16.0.0
  • 3.14.2.0 3.14
  • 3.14.1.1
  • 3.14.1.0
  • 3.12.1.0 3.12
  • 3.10.3.0 3.10
  • 3.10.2.1
  • 3.10.2.0

Older versions of cabal are not supported due to vulnerability HSEC-2023-0015.

Recommendation: Use the latest available version if possible.

Stack: (with enable-stack: true)

  • latest (default, recommended)
  • 3.9.3 3.9
  • 3.9.1
  • 3.7.1 3.7
  • 3.5.1 3.5
  • 3.3.1 3.3
  • 3.1.1 3.1
  • 2.15.7 2.15
  • 2.15.5
  • 2.15.3
  • 2.15.1
  • 2.13.1 2.13
  • 2.11.1 2.11
  • 2.9.3 2.9
  • 2.9.1
  • 2.7.5 2.7
  • 2.7.3
  • 2.7.1
  • 2.5.1 2.5
  • 2.3.3 2.3
  • 2.3.1
  • 2.1.3 2.1
  • 2.1.1
  • 1.9.3.1 1.9
  • 1.9.1.1
  • 1.7.1 1.7
  • 1.6.5 1.6
  • 1.6.3.1
  • 1.6.1.1
  • 1.5.1 1.5
  • 1.5.0
  • 1.4.0 1.4
  • 1.3.2 1.3
  • 1.3.0
  • 1.2.0 1.2

Recommendation: Use the latest available version if possible.

Beyond the officially supported listed versions above, you can request any precise version of GHC, Cabal, and Stack. The action will forward the request to the install methods (apt, ghcup, choco), and installation might succeed.

Note however that Chocolatey's version numbers might differ from the official ones, please consult their pages for GHC and Cabal.

License

The scripts and documentation in this project are released under the MIT License.

Contributions

Contributions are welcome! See the Contributor's Guide.