Travis CIのVimが古くてテストが通らないからスピリチュアルパワー使う
Travis CIのテストで任意のバージョンのVimを使う
Travis CIのテストで任意のバージョンのVimを使う方法。
(またはvim-themisを使用した、Vimプラグインのテスト用.travis.ymlのサンプルとして)
要点まとめ
- Travis CIがデフォルトで持ってるVimのバージョンが低くてテストが落ちる
- 解決方法 => VimをGitHubからclone & ビルドして使うようにする
テスト対象
事件
.travis.yml
language: viml
install:
- mkdir -p ~/.vim/bundle/repos/github.com
- mkdir ~/.vim/bundle/repos/github.com/thinca
- mkdir ~/.vim/bundle/repos/github.com/tyru
- mkdir ~/Repository
- git clone https://github.com/thinca/vim-themis ~/.vim/bundle/repos/github.com/thinca/vim-themis
- git clone https://github.com/tyru/open-browser.vim ~/.vim/bundle/repos/github.com/tyru/open-browser.vim
- git clone https://github.com/aiya000/aref-web.vim ~/Repository/aref-web.vim
before_script:
- vim --version
script:
- ~/.vim/bundle/repos/github.com/thinca/vim-themis/bin/themis ~/Repository/aref-web.vim/test --reporter spec
branches:
- master
結果
.
.
$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May 4 2012 04:25:35)
Included patches: 1-429
.
.
$ ~/.vim/bundle/repos/github.com/thinca/vim-themis/bin/themis ~/Repository/aref-web.vim/test --reporter spec
aref-web.vim
[✓] is_supported_source_test
[✓] get_target_url_test
[✓] can_use_dump_cmd_test
[✖] have_openbrowser_vim_test
function 112() (~/Repository/aref-web.vim/test/aref_web.vim)
function <SNR>27_have_openbrowser_vim() Line:5 (~/build/aiya000/aref-web.vim/autoload/aref_web.vim)
Vim(return):E121: Undefined variable: v:false
tests 4
passes 3
fails 1
The command "~/.vim/bundle/repos/github.com/thinca/vim-themis/bin/themis ~/Repository/aref-web.vim/test --reporter spec" exited with 1.
Done. Your build exited with 1.
tests 4
passes 3
fails 1
Vim(return):E121: Undefined variable: v:false
「はぁ? ナニソレ、イミワカンナイ」
なぜ
v:falseとは最近のVimのアップデートで追加された値(変数)で、
Travis CIのUbuntuがデフォルトで備えているVimのバージョンが低いので
対応していないのです。
対策
Travis CIのスピリチュアルUbuntuパワーを使い、以下の流れでスピリチュアルテストをしてもらいます。
- GitHubのVimをcloneする
- cloneしたVimをビルドする
- テストでそれ使う
- !スピリチュアルやね
.travis.yml
language: viml
install:
# Prepare environment
- mkdir -p ~/.vim/bundle/repos/github.com
- mkdir ~/.vim/bundle/repos/github.com/thinca
- mkdir ~/.vim/bundle/repos/github.com/tyru
- mkdir ~/Repository
# Install needed plugins
- git clone https://github.com/thinca/vim-themis ~/.vim/bundle/repos/github.com/thinca/vim-themis
- git clone https://github.com/tyru/open-browser.vim ~/.vim/bundle/repos/github.com/tyru/open-browser.vim
- git clone https://github.com/aiya000/aref-web.vim ~/Repository/aref-web.vim
- git clone https://github.com/vim/vim /tmp/vim
# Build just version vim to ~/bin/vim7.4.1689
- mkdir ~/bin
- cd /tmp/vim
- sudo apt-get install -y gettext libncurses5-dev libacl1-dev libgpm-dev
- git checkout v7.4.1689
- ./configure --with-features=huge --enable-fail-if-missing --prefix=$HOME/bin/vim7.4.1689
- make && make install
- export THEMIS_VIM=$HOME/bin/vim7.4.1689/bin/vim
cache:
directories:
- $HOME/bin/vim7.4.1689
before_script:
- $HOME/bin/vim7.4.1689/bin/vim --version
script:
- ~/.vim/bundle/repos/github.com/thinca/vim-themis/bin/themis ~/Repository/aref-web.vim/test --reporter spec
branches:
- master
結果 ( スピリチュアル )
.
.
$ $HOME/bin/vim/bin/vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 20 2016 19:16:45)
Included patches: 1-1689
.
.
$ ~/.vim/bundle/repos/github.com/thinca/vim-themis/bin/themis ~/Repository/aref-web.vim/test --reporter spec
aref-web.vim
[✓] is_supported_source_test
[✓] get_target_url_test
[✓] can_use_dump_cmd_test
[✓] have_openbrowser_vim_test
tests 4
passes 4
The command "~/.vim/bundle/repos/github.com/thinca/vim-themis/bin/themis ~/Repository/aref-web.vim/test --reporter spec" exited with 0.
Done. Your build exited with 0.
Included patches: 1-1689
tests 4
passes 4
Done. Your build exited with 0.
「ハラショー!」
ポイント
- VimのHEADをビルドするとコワイので、リビジョンを指定してる
- Vim側のバグが出てたらこっちにも影響してきてコワイからね!
- ./configureには最小限のオプションを渡している
- ビルド速い
- cacheでdirectoriesを指定した
スピリチュアルやね!