1. cromwell でCWLを実行してみる

# cromwellワークフローエンジンを利用してcwlを実行する

cromwell の実行環境については、[0. cromwell でCWLを実行してみる ](https://qiita.com/percipere/items/42ed510ef77d26e649e3)を参照

CWLの[First Example](http://www.commonwl.org/user_guide/02-1st-example/)を利用する

## cwlのサンプルを作成

次の２つのファイルを作成

- 1st-tool.cwl
- echo-job.yml

```cwl:1st-tool.cwl
#!/usr/bin/env cwl-runner

cwlVersion: v1.0
class: CommandLineTool
baseCommand: echo
inputs:
  message:
    type: string
    inputBinding:
      position: 1
outputs: []
```

```yaml:echo-job.yml
message: Hello world!
```

## cromwellでcwlを実行する

cromwellに上記の2つのファイルを指定して実行する

`java -jar cromwell.jar run --type cwl --inputs YAML形式の入力ファイル ワークフローのCWL`

```terminal
# java -jar cromwell.jar run --type cwl --inputs echo-job.yml 1st-tool.cwl 
[2018-05-30 07:30:33,70] [info] Running with database db.url = jdbc:hsqldb:mem:e2bcacde-b3d0-4af2-8e74-9f2690991ab8;shutdown=false;hsqldb.tx=mvcc
[2018-05-30 07:30:38,67] [info] Running migration RenameWorkflowOptionsInMetadata with a read batch size of 100000 and a write batch size of 100000
[2018-05-30 07:30:38,69] [info] [RenameWorkflowOptionsInMetadata] 100%
[2018-05-30 07:30:38,78] [info] Running with database db.url = jdbc:hsqldb:mem:0113123e-dba9-4387-a894-4214f36387f4;shutdown=false;hsqldb.tx=mvcc
[2018-05-30 07:30:39,32] [info] Slf4jLogger started
[2018-05-30 07:30:39,37] [info] Pre Processing Workflow...
[2018-05-30 07:30:39,58] [info] Pre-Processing /git/1st-tool.cwl
[2018-05-30 07:30:39,65] [info] Pre Processing Inputs...
Exception in thread "main" cromwell.CromwellEntryPoint$$anon$1: ERROR: Unable to submit workflow to Cromwell::
running cwltool on file /git/1st-tool.cwl failed with Cannot run program "cwltool" (in directory "/git"): error=2, No such file or directory
...
```

プリプロセスは実行できるが、cwltoolが無いために実行できないとのメッセージが表示される

```terminal
# java -jar cromwell.jar --version
cromwell 32
```

少なくとも、このバージョンのcromwellは内部でcwltoolを利用する事でcwlを実行している事がわかる

## cwltoolをインストール

cromwellのエンジンだけではcwlを実行できないのでcwltoolをインストールする
cwltoolはpythonのプログラムなので、python3(又はpython2)も事前にインストールする

インストール手順は次の通り

- python3のインストール
- python3-pipのインストール
- gitのインストール
- gitを利用してcwltoolを取得
- pip3を利用してcwltoolのインストール


```terminal
# apt-get -y install python3
# apt-get -y install python3-pip
# apt-get -y install git
# git clone https://github.com/common-workflow-language/cwltool.git
# cd cwltool
# pip3 install .
# cd ../
```

cwltoolのバージョンを確認

```terminal
# cwltool --version             
/usr/local/bin/cwltool 1.0.20180528123027
```

cwltoolの動作を確認

```terminal
# cwltool 1st-tool.cwl echo-job.yml
/usr/local/bin/cwltool 1.0.20180528123027
Resolved '1st-tool.cwl' to 'file:///git/1st-tool.cwl'
[job 1st-tool.cwl] /tmp/tmp5qptk9al$ echo \
    'Hello world!'
Hello world!
[job 1st-tool.cwl] completed success
{}
Final process status is success
```

cwltool でサンプルが実行できることを確認したので、次にcromwellから実行する

```
# java -jar cromwell.jar run --type cwl --inputs echo-job.yml 1st-tool.cwl 
[2018-05-30 07:54:48,81] [info] Running with database db.url = jdbc:hsqldb:mem:601a446a-7221-4921-aa20-33b74753bedb;shutdown=false;hsqldb.tx=mvcc
[2018-05-30 07:54:53,79] [info] Running migration RenameWorkflowOptionsInMetadata with a read batch size of 100000 and a write batch size of 100000
...
[2018-05-30 07:54:56,30] [info] Workflow heartbeat configuration:
{
  "cromwellId" : "cromid-b4de34d",
  "heartbeatInterval" : "2 minutes",
  "ttl" : "10 minutes",
  "writeBatchSize" : 10000,
  "writeThreshold" : 10000
}
[2018-05-30 07:54:56,39] [info] Metadata summary refreshing every 2 seconds.
...
[2018-05-30 07:55:00,53] [info] BackgroundConfigAsyncJobExecutionActor [2fdd1b221st-tool.cwl:NA:1]: 'echo' 'Hello world!'
[2018-05-30 07:55:00,59] [info] BackgroundConfigAsyncJobExecutionActor [2fdd1b221st-tool.cwl:NA:1]: executing: /bin/bash /git/cromwell-executions/1st-tool.cwl/2fdd1b22-4f31-47cf-92f1-823560755450/call-1st-tool.cwl/execution/script
[2018-05-30 07:55:01,45] [info] BackgroundConfigAsyncJobExecutionActor [2fdd1b221st-tool.cwl:NA:1]: job id: 7914
[2018-05-30 07:55:01,45] [info] BackgroundConfigAsyncJobExecutionActor [2fdd1b221st-tool.cwl:NA:1]: Status change from - to Done
[2018-05-30 07:55:01,68] [info] WorkflowExecutionActor-2fdd1b22-4f31-47cf-92f1-823560755450 [2fdd1b22]: Workflow 1st-tool.cwl complete. Final Outputs:
{

}
[2018-05-30 07:55:01,96] [info] WorkflowManagerActor WorkflowActor-2fdd1b22-4f31-47cf-92f1-823560755450 is in a terminal state: WorkflowSucceededState
[2018-05-30 07:55:08,89] [info] SingleWorkflowRunnerActor workflow finished with status 'Succeeded'.
{
  "outputs": {

  },
  "id": "2fdd1b22-4f31-47cf-92f1-823560755450"
}
[2018-05-30 07:55:11,53] [info] Workflow polling stopped
...
[2018-05-30 07:55:11,69] [info] Shutdown finished.
```

cromwellとcwltoolを利用してcwlの実行が確認できた

今回はここまで:smiley: