2.15. 入力ファイルのステージング#
通常、入力ファイルは出力ディレクトリとは別の読み取り専用ディレクトリに置かれます。 これは、ツールが同じディレクトリに入力ファイルと一緒に出力ファイルを書き込むことを期待している場合に問題を引き起こします。 入力ファイルを出力ディレクトリにステージング(配置のこと)するには、InitialWorkDirRequirement
を使用します。この例では、JavaScript式を使用して、先頭のディレクトリパスから入力ファイルのベース名を抽出しています。
linkfile.cwl
##!/usr/bin/env cwl-runner
cwlVersion: v1.2
class: CommandLineTool
hints:
DockerRequirement:
dockerPull: openjdk:9.0.1-11-slim
baseCommand: javac
requirements:
InitialWorkDirRequirement:
listing:
- $(inputs.src)
inputs:
src:
type: File
inputBinding:
position: 1
valueFrom: $(self.basename)
outputs:
classfile:
type: File
outputBinding:
glob: "*.class"
arguments-job.yml
#src:
class: File
path: Hello.java
ここで、コマンドラインにツール定義と入力オブジェクトを指定して、cwltool
を起動します:
$ cwltool linkfile.cwl arguments-job.yml
INFO /opt/hostedtoolcache/Python/3.9.19/x64/bin/cwltool 3.1.20240508115724
INFO Resolved 'linkfile.cwl' to 'file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/staging-input-files/linkfile.cwl'
INFO [job linkfile.cwl] /tmp/c4p9tezt$ docker \
run \
-i \
--mount=type=bind,source=/tmp/c4p9tezt,target=/YcHclK \
--mount=type=bind,source=/tmp/9mh3bjoo,target=/tmp \
--mount=type=bind,source=/home/runner/work/user_guide/user_guide/src/_includes/cwl/staging-input-files/Hello.java,target=/YcHclK/Hello.java,readonly \
--workdir=/YcHclK \
--read-only=true \
--net=none \
--user=1001:127 \
--rm \
--cidfile=/tmp/mj5xotb9/20240518114647-817604.cid \
--env=TMPDIR=/tmp \
--env=HOME=/YcHclK \
openjdk:9.0.1-11-slim \
javac \
Hello.java
INFO [job linkfile.cwl] completed success
{
"classfile": {
"location": "file:///home/runner/work/user_guide/user_guide/src/_includes/cwl/staging-input-files/Hello.class",
"basename": "Hello.class",
"class": "File",
"checksum": "sha1$fdb876b40ad9ebc7fee873212e02d5940588642e",
"size": 184,
"path": "/home/runner/work/user_guide/user_guide/src/_includes/cwl/staging-input-files/Hello.class"
}
}INFO Final process status is success