#github #workflow #publish #tool #own #trs #ga4gh

bin+lib gh-trs

使用 GitHub 发布和测试您自己的 GA4GH TRS API 的 CLI 工具

21 个稳定版本

1.1.20 2022年6月3日
1.1.19 2022年5月10日
1.1.13 2022年4月13日
1.1.11 2022年3月24日
1.1.8 2022年2月16日

#695 in 命令行工具

Apache-2.0

9.5MB
4K SLoC

gh-trs: 使用 GitHub 发布和测试您自己的 GA4GH TRS API 的 CLI 工具

Apache License test

CLI 工具,用于将工作流程作为 GA4GH 工具注册服务 (TRS) API 发布,并使用 GitHub 测试工作流程。

功能特点

  • 从工作流程文档的 URL(称为 config_file)生成发布模板
  • 根据 gh-trs 配置文件测试工作流程
  • 将工作流程作为 GA4GH TRS API 发布到 GitHub

注意,存在 ddbj/yevis-cli 作为更全面且维护得更好的工具。基本上,我推荐使用它。

安装

使用无任何依赖项构建的单个二进制文件

$ curl -fsSL -O https://github.com/suecharo/gh-trs/releases/latest/download/gh-trs
$ chmod +x ./gh-trs
$ ./gh-trs --help

或者,使用 Docker 环境(也支持 docker-compose

$ docker-compose up -d --build
$ docker-compose exec app gh-trs --help

入门

首先,gh-trs 需要通过 GitHub REST API 进行各种操作,需要 GitHub 个人访问令牌。请参阅 GitHub 文档 - 创建个人访问令牌 了解如何生成 GitHub 个人访问令牌

所需的作用域如下(也请参见截图)

  • repo-public_repo
  • user-read:user
gh-trs-img-1

生成 GitHub 个人访问令牌 后,您需要通过以下方式之一将其传递给 gh-trs

  • 环境文件:将令牌写入 .env 文件,如 GITHUB_TOKEN=<paste_your_token>
  • 环境变量:设置 GITHUB_TOKEN 环境变量
  • 命令行选项:使用 --gh-token <paste_your_token> 选项

使用工作流程 trimming_and_qc.cwl 作为示例。

首先,从工作流程文档的 GitHub 位置生成 gh-trs 配置文件的模板

$ gh-trs make-template https://github.com/suecharo/gh-trs/blob/main/tests/CWL/wf/trimming_and_qc.cwl

test_config_CWL_template.yml 是将要生成内容的示例。

接下来,编辑生成的 ./gh-trs-config.yml,如 test_config_CWL.yml

主要编辑部分如下

  • workflow.files:要包含在工作流程中的文件列表
  • workflow.testing:要运行的测试列表

更多详细信息,请参阅 readme - validate

然后,根据 gh-trs 配置文件生成 GA4GH TRS API,并将其部署在 GitHub Pages 上。

$ gh-trs publish --repo <repo_owner>/<repo_name> ./gh-trs-config.yml

已部署的工作流程可以从 GA4GH TRS API 规范 中检索。

$ curl -L https://<repo_owner>.github.io/<repo_name>/tools

使用方法

本节描述了 gh-trs 的某些子命令。

$ gh-trs --help
gh-trs 0.1.1
CLI tool to publish and test your own GA4GH TRS API using GitHub

USAGE:
    gh-trs <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    help             Prints this message or the help of the given subcommand(s)
    make-template    Make a template for the gh-trs configuration file
    publish          Publish the TRS response to GitHub
    test             Test the workflow based on the gh-trs configuration file
    validate         Validate the gh-trs configuration file

make-template

从主要工作流程文件的 GitHub 位置生成 gh-trs 配置文件模板。

$ gh-trs make-template --help
gh-trs-make-template 0.1.1
Make a template for the gh-trs configuration file

USAGE:
    gh-trs make-template [FLAGS] [OPTIONS] <workflow-location>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information
    -v, --verbose    Verbose mode

OPTIONS:
        --gh-token <github-token>    GitHub Personal Access Token
    -o, --output <output>            Path to the output file [default: gh-trs-config.yml]

ARGS:
    <workflow-location>    Location of the primary workflow document

仅接受托管在 GitHub 上的 URL 作为 workflow-location。这是一个类似于 https://github.com/suecharo/gh-trs/blob/main/tests/CWL/wf/trimming_and_qc.cwl 的 URL,稍后将转换为类似 https://raw.githubusercontent.com/suecharo/gh-trs/645a193826bdb3f0731421d4ff1468d0736b4a06/tests/CWL/wf/trimming_and_qc.cwl 的 raw URL。

gh-trs 收集各种信息并生成 gh-trs 配置文件模板。特别是,workflow.files 会从主要工作流程位置递归生成文件列表。

validate

验证 gh-trs 配置文件的架构和内容。

$ gh-trs validate --help
gh-trs-validate 0.1.1
Validate the gh-trs configuration file

USAGE:
    gh-trs validate [FLAGS] [OPTIONS] [config-locations]...

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information
    -v, --verbose    Verbose mode

OPTIONS:
        --gh-token <github-token>    GitHub Personal Access Token

ARGS:
    <config-locations>...    Location of the gh-trs configuration files (local file path or remote URL) [default:
                             gh-trs-config.yml]

以下是 gh-trs 配置文件中某些字段的验证规则解释

  • id:工作流程的 ID。由 make-template 命令生成。如果您想更新现有工作流程,请填写现有工作流程的 ID。
  • version:版本形式为 x.y.z
  • authors:作者列表。
  • workflow.name:请自由填写。允许的字符包括 a-zA-Z0-9~!@#$%^&*()_+-={}[]|:;,.<>?,以及空格。
  • workflow.readme:用于 describe 工作流程的字段。使用您喜欢的任何 URL。
  • workflow.language:支持 CWLWDLNFLSMK
  • workflow.files:文件列表。指定为 type: secondary 的文件将在工作流程执行时,以 target 作为路径放置在执行目录中。
  • workflow.testing:测试列表。有关编写测试的详细信息,请参阅 test

已准备了一些示例。请检查

test

根据配置文件测试工作流程。

$ gh-trs test --help
gh-trs-test 0.1.1
Test the workflow based on the gh-trs configuration file

USAGE:
    gh-trs test [FLAGS] [OPTIONS] [config-locations]...

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information
    -v, --verbose    Verbose mode

OPTIONS:
    -d, --docker-host <docker-host>      Location of the docker host [default: unix:///var/run/docker.sock]
        --gh-token <github-token>        GitHub Personal Access Token
    -w, --wes-location <wes-location>    Location of WES in which to run the test. If not specified, `sapporo-service`
                                         will be started

ARGS:
    <config-locations>...    Location of the gh-trs configuration files (local file path or remote URL) [default:
                             gh-trs-config.yml]

测试使用 GA4GH 工作流程执行服务 (WES;GA4GH - WES API。特别是,gh-trs 使用 sapporo-service 作为 WES。如果没有指定 --wes-location 选项,则使用默认的 DOCKER_HOST 来指定 sapporo-service

以下是一个配置文件中 workflow.testing 字段的示例

testing:
  - id: test_1
    files:
      - url: "https://example.com/path/to/wf_params.json"
        target: wf_params.json
        type: wf_params
      - url: "https://example.com/path/to/wf_engine_params.json"
        target: wf_engine_params.json
        type: wf_engine_params
      - url: "https://example.com/path/to/data.fq"
        target: data.fq
        type: other

存在三种文件类型

  • wf_params:工作流程的参数。
  • wf_engine_params:工作流程引擎的执行参数。
  • other:其他文件(例如,数据文件)。

指定为 wf_paramswf_engine_params 的文件将作为 WES 执行参数放置在 WES 运行时。此外,other 文件将在工作流程执行时,以 target 作为路径放置在执行目录中。

您可以自由指定 id 字段。

有关如何运行 WES 的更多信息,请参阅 WES API 文档sapporo 文档

publish

将工作流程作为 GA4GH TRS API 发布到 GitHub。

$ gh-trs publish --help
gh-trs-publish 0.1.1
Publish the TRS response to GitHub

USAGE:
    gh-trs publish [FLAGS] [OPTIONS] --repo <repo> [config-locations]...

FLAGS:
        --from-trs     Recursively get the gh-trs configuration files from the TRS endpoint and publish them. It is
                       mainly intended to be tested and published all at once in a CI environment. If you use this option,
                       specify the TRS endpoint for `config_location`
    -h, --help         Prints help information
    -V, --version      Prints version information
    -v, --verbose      Verbose mode
        --with-test    Test before publishing

OPTIONS:
    -b, --branch <branch>                GitHub branch to publish to [default: gh-pages]
    -d, --docker-host <docker-host>      Location of the docker host [default: unix:///var/run/docker.sock]
        --gh-token <github-token>        GitHub Personal Access Token
    -r, --repo <repo>                    GitHub Repository to publish to. (e.g. owner/name)
    -w, --wes-location <wes-location>    Location of WES in which to run the test. If not specified, `sapporo-service`
                                         will be started

ARGS:
    <config-locations>...    Location of the gh-trs configuration files (local file path or remote URL) [default:
                             gh-trs-config.yml]

基于 gh-trs 配置文件生成 GA4GH TRS 响应,并发布到 GitHub Pages。此外,使用 --repo <repo>--branch <branch> 选项,gh-trs 可以指定要发布到的 GitHub 仓库或分支。

使用 --with-test 选项,gh-trs 可以在发布前运行测试。测试的工作流程将在 TRS 响应中将 verified 字段设置为 true

使用 --from-trs 选项,gh-trs 可以从 TRS 端点获取 gh-trs 配置文件并发布它们。因此,如果您想测试和发布已发布的 TRS 的所有工作流程,请运行类似以下命令

$ gh-trs publish --repo <owner/name> --branch gh-pages --with-test --from-trs https://example.com/path/to/trs

持续测试(CI/CD)

发布了用于持续测试的 GitHub Action (actions/gh-trs-action)。

此操作的输入如下

  • gh-token:GitHub 个人访问令牌
  • repo可选 要发布的 GitHub 仓库。 (例如,owner/name,默认:您的仓库)
  • branch可选 要发布的 GitHub 分支。 (默认:gh-pages)
  • trs-endpoint可选 获取 gh-trs 配置文件的 TRS 端点。 (默认:您的默认 trs 端点)

如果您想指定这些输入,请使用with上下文(文档,https://githubdocs.cn/ja/actions/using-workflows/workflow-syntax-for-github-actions#),如下所示:

jobs:
  test-and-publish:
    steps:
      - name: gh-trs-action
        uses: suecharo/gh-trs-action@v1
        with:
          gh-token: ${{ secrets.GITHUB_TOKEN }}
          repo: suecharo/gh-trs
          branch: gh-pages
          trs-endpoint: https://suecharo.github.io/gh-trs/

这些输入是可选的,如果不指定,将使用基于您仓库的默认值。

在此操作中,将执行以下命令:

$ gh-trs publish --verbose --with-test --repo ${{ inputs.repo }} --branch ${{ inputs.branch }} --from-trs ${{ inputs.trs-endpoint }}

测试结果将被上传到GitHub Actions,并以gh-trs-test-logs为名称的工件。此外,如果测试作为CI运行发布,GitHub Actions的相关运行URL将被设置在TRS响应中的verified_source字段。

以下是GitHub Actions两种模式的配方。

页面构建触发器

这是响应本地执行运行CI的配方。

name: page-build-ci

on:
  page_build: {}

jobs:
  test-and-publish:
    runs-on: ubuntu-latest
    if: "! contains(github.event.head_commit.message, 'in CI')"
    steps:
      - name: gh-trs-action
        uses: suecharo/gh-trs-action@v1
        with:
          gh-token: ${{ secrets.GITHUB_TOKEN }}

放置此操作后,当在本地环境中执行如下命令时,将启动CI:

$ gh-trs publish --repo suecharo/gh-trs ./tests/test_config_CWL.yml

计划触发器

name: schedule-ci

on:
  schedule:
    - cron: "0 0 * * 0" // every Sunday at midnight

jobs:
  test-and-publish:
    runs-on: ubuntu-latest
    steps:
      - name: gh-trs-action
        uses: suecharo/gh-trs-action@v1
        with:
          gh-token: ${{ secrets.GITHUB_TOKEN }}

放置此操作后,CI将根据计划执行。

认可

gh-trs部分得到JSPS KAKENHI Grant Numbers 20J22439的支持。

许可证

Apache-2.0。请参阅LICENSE

依赖项

~12–29MB
~425K SLoC