Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim script を GitHub Actions でテストする

$
0
0

Vim プラグインを作成するにあたって、Vim script のテストをCIツールで実行したいと思いました。

この記事では FizzBuzz プラグインをサンプルに、GitHub Actions でテストを実行する流れを掲載しています。

事前準備

GitHub にリポジトリを作成します。

今回は fizzbuzz.vimというリポジトリ名で作成しています。

FizzBuzz プラグインの追加

「引数として任意の数値を渡すと、FizzBuzz のルールに従い文字列を返す」という関数を定義するプラグインを追加します。

plugin/fizzbuzz.vim
function! fizzbuzz#to_fizzbuzz(number) abort
  lets:divisible_by_3=(a:number % 3==0)lets:divisible_by_5=(a:number % 5==0)ifs:divisible_by_3&& !s:divisible_by_5return'Fizz'elseif!s:divisible_by_3&& s:divisible_by_5return'Buzz'elseifs:divisible_by_3&& s:divisible_by_5return'FizzBuzz'endifreturn''endfunction

themis.vim を使ったテストの追加

Vim script 用テストフレームワークの themis.vimを利用して、テストを追加します。(テーミスやテミスと発音するようです)

FizzBuzz のルールに従った戻り値が返ってくることをテストしています。

test/fizzbuzz.vim
lets:suite= themis#suite('fizzbuzz')lets:assert= themis#helper('assert')function!s:suite.to_fizzbuzz_1()letl:number=1letl:response = fizzbuzz#to_fizzbuzz(l:number)calls:assert.equals(l:response,'')endfunctionfunction!s:suite.to_fizzbuzz_3()letl:number=3letl:response = fizzbuzz#to_fizzbuzz(l:number)calls:assert.equals(l:response,'Fizz')endfunctionfunction!s:suite.to_fizzbuzz_5()letl:number=5letl:response = fizzbuzz#to_fizzbuzz(l:number)calls:assert.equals(l:response,'Buzz')endfunctionfunction!s:suite.to_fizzbuzz_15()letl:number=15letl:response = fizzbuzz#to_fizzbuzz(l:number)calls:assert.equals(l:response,'FizzBuzz')endfunction

ターミナルでのテスト結果はこちら。

$ ~/.ghq/github.com/stackline/fizzbuzz.vim
$ themis
1..4
ok 1 - fizzbuzz to_fizzbuzz_1
ok 2 - fizzbuzz to_fizzbuzz_3
ok 3 - fizzbuzz to_fizzbuzz_5
ok 4 - fizzbuzz to_fizzbuzz_15

# tests 4# passes 4

GitHub Actions にワークフロー追加

Vim script のテスト環境構築と実行を行うワークフローを追加します。

GitHub Actions が提供する Simple workflowをベースに、async.vim の .travis.ymlを参考にしながら作成しました。(ローカルで Dockerfile を docker buildしながら動作確認しつつ、ある程度固まったタイミングで、ワークフローを作成)

.github/workflows/ci.yml
name:Teston:pushjobs:build:runs-on:ubuntu-lateststeps:-name:Initializerun:|sudo apt-get updatesudo apt-get install -y vimsudo apt-get install -y git-name:Clone repositoriesrun:|# Test frameworkgit clone --depth 1 --branch v1.5.4 --single-branch https://github.com/thinca/vim-themis /tmp/vim-themis# Repository under testgit clone --depth 1 --branch master --single-branch https://github.com/stackline/fizzbuzz.vim /tmp/fizzbuzz.vim-name:Run testsrun:/tmp/vim-themis/bin/themisworking-directory:/tmp/fizzbuzz.vim

ワークフローをリモートリポジトリに push すると、次回から push イベントをトリガーにワークフローが実行されます。

GitHub Actions でテスト実行

例えば README.mdを追加するコミットを git pushします。

その後 GitHub で fizzbuzz.vimリポジトリにアクセスし、Actions タブをクリックすると、実行したワークフローの一覧が表示されます。

ワークフロー名をクリックすると、以下のようなログが閲覧でき、Vim script のテストが実行されていることを確認できます。

image.png

また、ワークフローのステータスを表すバッジも所定の URL で取得できます。

image.png

GitHub 内で CI/CD まで完結できるのは便利そうですね :)


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>