Githubアクションでコマンドラインの出力をテストする



文脈
オープンソースプロジェクト管理者としてRitchie CLI , 私は最近、いくつかのコマンドライン出力が予想通りに動作しているかどうかテストする必要がありました.

何が起こったの
私は様々なオペレーティングシステム(Windows、Linux、MacOS)でCLIコマンドをテストしなければなりませんでした.
プロジェクトはゴングで開発されたので、簡単に各OSのバイナリを作成し、それを実行することができます.しかし、私はいくつかのコマンドを使用しなければならなかった<command-line> &> output.txt 出力ファイルを取得し、.txt リポジトリのファイルがコマンド出力が予想されたものかどうかチェックする.
私が直面した問題のいくつか
☞ エラーが発生したことをテストできませんでした.|| true 上記のコマンドの最後に(失敗を無視する).
☞ コマンドラインはOS ( DOS/UNIX )によって異なるかもしれません.
☞ 動的な出力をチェックするのは難しかった(それぞれの実行のために、例えば、すべての時間を進化させるデータかバージョン値).
私はこれらの特定の問題を解決するためにこのアクションを作成しました.

何がこのアクションですか?
この動作は、ユーザーがコマンドライン出力(成功またはエラー)をリポジトリにあるファイルコンテンツと比較したり、特定の式を含むかどうかを確認できます.
したがって、コマンドラインを画面上で返すことができるか、または作成するほとんどすべてをチェックするために使用できます.
☞ を指定すると、cat コマンド.
☞ ファイル全体の内容
☞ ファイルがAを通して特定のディレクトリの中に位置するならばls ファイル作成後のコマンド
☞ ...
また、それはすべてのOSサポートランナーと互換性があります.私は最初にWindowsでそれをテストするためにDOS/UNIXの違いのために問題がありました、しかし、私はbashを使用している操作を実行している複合作用を使うことができましたstrip-ansi npm cli lib ) この問題をバイパスする.

動作の仕方

このようにして、コマンドライン出力を3つの異なる方法でチェックできました.
☞ を返します.
☞ 出力がassertファイルから特定の行を含む場合
☞ を返します
Github UI上の「アクション」タブに表示されるのは、次のようになります.

出力が予想されていない場合、アクションはまた、diff の両方のファイル/式の間.

マイワークフロー
その行為をするAssert Command Line Output そして、あなたはそれを使用している異なった例(各々のための成功とエラーテストで)を見つけるでしょう.
The action.yml file can be found here .
1️⃣ Assert file content
コマンド出力をassert.txt ファイル内容
    steps:
      - uses: actions/[email protected]
      - uses: GuillaumeFalourd/[email protected]
        with:
          command_line: ls -lha
          assert_file_path: path/to/assert.txt
          expected_result: PASSED

コマンド出力がassert.txt ファイル内容
    steps:
      - uses: actions/[email protected]
      - uses: GuillaumeFalourd/[email protected]
        with:
          command_line: ls -lha
          assert_file_path: path/to/assert.txt
          expected_result: FAILED
2️⃣ Assert specific file line
コマンド出力ライン3を期待するassert.txt 行3のファイルの内容
    steps:
      - uses: actions/[email protected]
      - uses: GuillaumeFalourd/[email protected]
        with:
          command_line: ls -lha
          assert_file_path: path/to/assert.txt
          expected_result: PASSED
          specific_line: 3

コマンド出力ライン3を期待するのは、assert.txt 行3のファイルの内容
    steps:
      - uses: actions/[email protected]
      - uses: GuillaumeFalourd/[email protected]
        with:
          command_line: ls -lha
          assert_file_path: path/to/assert.txt
          expected_result: FAILED
          specific_line: 3
3️⃣ Assert specific expression
コマンド出力に特定の式を含める
    steps:
      - uses: actions/[email protected]
      - uses: GuillaumeFalourd/assert-command-li[email protected]
        with:
          command_line: ls -lha
          contains: runner
          expected_result: PASSED

コマンド出力が特定の式を含まないと予想する
    steps:
      - uses: actions/[email protected]
      - uses: GuillaumeFalourd/[email protected]
        with:
          command_line: ls -lha
          contains: error
          expected_result: FAILED

提出カテゴリ
Githubアクション、または定期的なチェックのCI/CDパイプライン内で使用されるコマンドからいくつかの特定の出力をチェックするための展開(DIY展開)だけでなく、保守者(管理者は休止しなければならない)に、この動作は役に立つかもしれません.

YAMLファイルまたはコードへのリンク
  • The action can be found on the Github Marketplace
  • アクションリポジトリ上の各OSの完全な実装例を見つけることができますcat or ls -lha デモコマンド
  • UBUNTU
    MACOS
    WINDOWS

    追加情報
    ☞ あなたは、次のリポジトリに貢献することができますContributing.md file
    ☞ このアクションはApache License 2.0

    結論
    私はすべてがまだ完璧ではないと信じています、この行動は最初のバージョン以来大いに進化しました、そして、私はあなたの何人かがそれが役に立つとわかることを望みます、そして、それをよりよくするために貢献したいです.読書ありがとう🚀