Edited at

俺の CWL ワークフローがこのエンジンで動かない件 (解決編)


TL;DR


  • 準拠度テストを実行するスクリプトに、各機能ごとの準拠度を示すバッジ用のデータを出力する機能を追加した

  • あとは各エンジンのリポジトリの CI に、テスト時に生成したバッジ用データを適当なサーバーに保存 (Github の適当なブランチでも良い) する機能を追加し、README でそれを参照するようにすれば対応状況がすぐにわかるようになる!


    • みんなでプルリクエスト送りましょう!がんがん送りましょう!




注意!

本記事は二部構成になっています。


  • (前の記事) CWL で書かれたワークフローが、問答無用で CWL 準拠のワークフローエンジンで動くわけではない話


    • 対象


      • CWL でワークフローを書くユーザー





  • (この記事) 上を解決するために、機能ごとの準拠度を表すバッジを付ける話


    • 対象


      • README に詳細な準拠度を表すバッジを付けてドヤ顔したいワークフローエンジン開発者

      • バッジが付いてないエンジンに対して、バッジを付けるプルリクエストを投げつけて「このエンジンはわしが育てた」とドヤ顔したいユーザー






はじめに

前回は、なんとかRequirement が含まれるワークフローやツールの実行には、エンジン側がその Requirement への対応が必要であることと、conformance test を利用した対応状況の確認方法を説明しました。

この問題の解決策として、conformance test を実行する仕組みである cwltest に、テストに付いている各タグごとの対応状況を表すバッジ用データを作成する機能を実装しました (マージ済み。次回リリースから有効です)。

今回は追加した機能の解説と、それを利用したバッジの追加方法について説明します。


つかいかた

公式のリポジトリ には、conformance test を一気に走らせる run_test.sh というスクリプトがありますが、残念ながらまだ run_test.sh はバッジ作成機能には対応していません1

そのため、run_test.sh が内部で使用している cwltest を直接呼び出してバッジ用データを作成します。


cwltest のインストール

cwltest コマンドはPyPI に収録されているため、pip からインストールできます。

しかし、収録されているバージョンにはまだバッジ作成機能がない1ため、開発版を直接インストールします。

$ git clone git@github.com:common-workflow-language/cwltest.git

$ cd cwltest
$ pip install -U .


テスト実行

インストール後、conformance test を cwltest コマンドを使用して実行します。

このとき、バッジ用データを作成する --badgedir オプションを追加します。

$ git clone https://github.com/common-workflow-language/common-workflow-language

$ cd common-workflow-language/v1.0
$ cwltest --test conformance_test_v1.0.yaml --tool cwl-runner --badgedir badges # cwl-runner の準拠度バッジが欲しい場合
...

実行後、badges (--badgedir で指定したディレクトリ)以下に、タグ名.json というファイルができています。

$ ls badges

command_line.json initial_work_dir.json scatter.json subworkflow.json
...
$ cat badges/command_line_tool.json | jq .
{
"subject": "[CWL] command_line_tool",
"status": "100%",
"color": "green"
}

これらのファイルをどこかのサーバーに置けば準備完了です(Github 内でも OK です)。

今回は、サンプルとしてアップロードした tom-tan/badge-test リポジトリのファイルを利用します2


バッジを貼り付ける

あとはバッジを作成してくれる badgen.net というサービスを利用することで、バッジを作成できます。例えば、バッジ用のファイルが https://raw.githubusercontent.com/tom-tan/badge-test/master/command_line_tool.json にある場合、以下のように Markdown を書けば、

![result of command_line_tool](https://flat.badgen.net/https/raw.githubusercontent.com/tom-tan/badge-test/master/command_line_tool.json)

こんな感じのバッジを付けられます。素敵!


まとめ

とりあえず、バッジを作成するための仕組みはできました。

あとは各エンジンのリポジトリに対して、以下の変更を加えればいいです。


  • CI 上で conformance test を実行する際に --badgedir オプションを付ける


    • 実行後、別ブランチなどに作成されたバッジ用ファイルをコミットする




  • README.md に、コミットされたファイルを参照して各機能ごとのバッジを付ける

OSS として公開されているエンジンの場合、CI の内容は .travis.yml 等で管理されているため、そこを変更するプルリクエストを送ることで、上の機能を追加してもらうことが可能です。

なので、バッジを付けるために、みんなでプルリクエストを送りましょう!がんがん送りましょう!


おまけ

現状の conformance test には SoftwareRequirement を用いたテストが存在しないため、SoftwareRequirement の準拠度バッジは付けることができません。バッジを作成できるようにするためには、conformance test に対応するテストを追加する必要があります。必要な人はプルリクエストを送りましょう!





  1. 2018年12月11日時点 



  2. リポジトリの README.md に、「こんな感じに表示できるといいよね」というサンプルがあります。