stackでstackage nightlyのresolverを使おうとしても,stack.yamlには
resolver: nightly-2015-10-27
のように日付まで用意しないと使えない.lts-2やlts-3についても同様で,lts-3.*まで指定する必要がある.
Travis CI等で各resolverについてマトリクステストする場合,ltsのほうはともかくnightlyについてはビルド時点で最新のものを常に見るようにして欲しい.どうにかなりませんかという話は出ているのだが,とりあえずこの件がどうにかなるまでのツナギ
stackageのリダイレクトがnightlyやlts-*の最新を知ってるので,次のようなスクリプト用意しておいて,
#!/bin/bash LATEST_VERSION=$(wget -O/dev/null https://www.stackage.org/$1 2>&1 | grep "https://www.stackage.org/$1" | tail -n1 | sed "s/.*$1/$1/") sed "s/^resolver: .*/resolver: ${LATEST_VERSION}/" stack.yaml
元となるstack.yamlからresolverを書き変えたものを生成して使わせるようにする,
before_install: - ./latest $RESOLVER > stack-travis.yaml - export STACK_YAML=stack-travis.yaml
あとはマトリクス指定で
matrix: include: - env: RESOLVER=lts-2 - env: RESOLVER=ghc-7.10.2 - env: RESOLVER=lts-3 - env: RESOLVER=lts-3.10 - env: RESOLVER=nightly allow_failures: - env: RESOLVER=nightly
のようにしておくと,lts-2(の最新),ghc-7.10.2,lts-3(の最新),lts-3.10,nightly(の最新)という設定になる.現時点で具体的には,lts-2 → lts-2.22,lts-3 → lts-3.11,nightly → nightly-2015-10-27 となる.