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