haskell-ci

インストール

λ git clone https://github.com/haskell-CI/haskell-ci.git
λ cd haskell-ci
λ cabal install

λ haskell-ci --version
0.8

travis.yml の生成

まずは .cabal ファイルの Tested-With にテスト対象の GHC バージョンを指定する

λ cat your-project.cabal
...
tested-with: GHC ==8.6.5 || ==8.4.4 || ==8.2.2
...

その後、haskell-ci コマンドで .travis.yml を生成する

λ haskell-ci your-project.cabal --output .travis.yml

λ haskell-ci your-project.cabal --output .travis.yml \
  --cabal-install-version 3.0 \
  --hlint \
  --hlint-version "==2.2.*"

# cabal.project の場合  
λ haskell-ci cabal.project --output .travis.yml \
  --cabal-install-version 3.0 \
  --hlint \
  --hlint-version "==2.2.*"

よく使いそうなオプション

オプション

意味

--cabal-install-version

インストールするcabalのバージョンを指定 (デフォルトでは 2.4)

--config

指定された haskell-ci の設定ファイルを読み込む

--copy-fields

cabal.project のフィールドをコピーするかどうか (Default: some)

--hlint

HLint を有効にする

--hlint-version

HLint のバージョンを指定する (Default: ==2.1.*)

--no-cabal-check

cabal check の無効化

--travis-patches

生成された travis ファイルに指定したパッチを当てる

config ファイル

cabal.haskell-ci
cabal-install-version: 3.0
hlint: False
hlint-version: ==2.2.*
unconstrained: False
local-ghc-options: -Werror
installed: +all -haskeline
travis-patches: haskell-ci.tasty-discover.patch
  • 上記のようなファイルに設定を保存しておくことも可能

    • λ haskell-ci --config cabal.haskell-ci cabal.project

  • 設定ファイルの内容については haskell-ci/cabal.haskell-ci を見ると良い

  • haskell-ci dump-config > cabal.haskell-ci とすることでデフォルト値の設定ファイルを作成できる

  • 参考になりそうな設定ファイル

トラブルシューティング

  • バージョンが解決できない場合

    • installed: +all -haskeline のようにして、グローバルデータベースのパッケージを利用しないようにすれば良い

  • tasty-discover のインストールは、以下のような patch を用意すれば良い

    • # Building with tests and benchmarks... の後ぐらいに挿入すると良い

patch
diff --git a/.travis.yml b/.travis.yml
index e6a7410..4bf16d5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -197,6 +197,7 @@ script:
   # this builds all libraries and executables (without tests/benchmarks)
   - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
   # Building with tests and benchmarks...
+  - ${CABAL} v2-install $WITHCOMPILER -j2 tasty-discover | color_cabal_output
   # build & run tests, build benchmarks
   - ${CABAL} v2-build $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
   # Testing...

デフォルトの設定ファイル

default.haskell-ci
-- cabal-install version for all jobs
cabal-install-version: 2.4

-- jobs (N:M - cabal:ghc)
jobs:

-- distribution version (xenial, bionic)
distribution: xenial

-- Jobs selection across packages
jobs-selection: uniform

-- Copy ? fields from cabal.project fields
copy-fields: some

-- --ghc-options for local packages
local-ghc-options:

-- Clone submodules, i.e. recursively
submodules: False

-- Disable caching
cache: True

-- Skip separate dependency installation step
install-dependencies: True

-- Specify 'constraint: ... installed' packages
installed:

-- Build tests with
tests: True

-- Run tests with (note: only built tests are run)
run-tests: True

-- Build benchmarks
benchmarks: True

-- Haddock step
haddock: True

-- Build without tests and benchmarks
no-tests-no-benchmarks: True

-- Make unconstrained build
unconstrained: True

-- Use head.hackage repository. Also marks as allow-failures
head-hackage: >=8.9

-- Disable cabal check run
cabal-check: True

-- Enable builds only for specific branches
branches:

-- Enable IRC notifications to given channel (e.g. 'irc.freenode.org#haskell-lens')
irc-channels:

-- Project name (used for IRC notifications), defaults to package name or name of first package listed in cabal.project file
project-name:

-- Build steps to fold
folds:

-- Add ghc-head job
ghc-head: False

-- Add postgresql service
postgresql: False

-- Environment variables per job (e.g. `8.0.2:HADDOCK=false`)
env:

-- Allow failures of particular GHC version
allow-failures: False

-- [Discouraged] Assume there are only GHCs last in major series: 8.2.* will match only 8.2.2
last-in-series: False

-- Jobs to additionally build with OSX
osx:

-- Additional apt packages to install
apt:

-- .patch files to apply to the generated Travis YAML file
travis-patches:

-- Don't insert the haskell-ci version into the generated Travis YAML file
insert-version: True

-- Disable coloring cabal output
color: True

-- Enable Doctest job
doctest: False

-- Additional Doctest options
doctest-options:

-- Doctest version
doctest-version: ==0.16.*

-- Filter packages from .ghc.environment file
doctest-filter-packages:

-- Enable HLint job
hlint: False

-- Specify HLint job
hlint-job: latest

-- Use specific .hlint.yaml
hlint-yaml:

-- Additional HLint options
hlint-options:

-- HLint version
hlint-version: ==2.1.*

参考リソース

Last updated