LoginSignup
31
20

More than 3 years have passed since last update.

GitHub Actionsでコマンド失敗時の実行結果をIssueに貼り付けて投稿する

Posted at

はじめに

先日GitHub Pagesを使って自己紹介ページを作成したのですが、
外部リンク先が404になっていたらカッコ悪いので、GitHub Actionsでリンク切れをチェックするワークフローを定期実行することにしました🚨

リンク切れのチェック自体はmarkdown-link-checkというナイスなパッケージを使ってすぐに実現できたのですが、
出力結果をIssueとして投稿しようとした時に、以下を実現しようとして少しハマったため共有します

  • npm runの結果をcode記法で本文に貼り付けたい
    • もっと言うと、Issue Templateの中に埋め込んで投稿したい
  • npm runが失敗した時だけIssueを作成したい

作ったもの

こちらで動いてる実物に、コメントをつけてご紹介します🌾
なおテンプレートはこちらです

schedule.yml
name: Schedule

on:
  schedule:
    - cron: 0 0 * * 0 # 日本時間の毎週日曜9時に定期実行

jobs:
  schedule:
    name: Check
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: '12'
      - run: npm install
      - id: check_link # idを設定して、後続のstepで参照できるようにする
        run: npm run check:link > ./out/check_link_result.txt # 実行結果をファイルに出力
        continue-on-error: true # このステップの終了ステータスが0以外でもエラーにせず、後続のステップを実行する
      - run: | # ::set-env を使って環境変数を後続ステップに渡す際に、改行コードのエスケープが必要なので実施する
          CHECK_LINK_RESULT="$(cat ./out/check_link_result.txt)"
          CHECK_LINK_RESULT="${CHECK_LINK_RESULT//'%'/'%25'}"
          CHECK_LINK_RESULT="${CHECK_LINK_RESULT//$'\n'/'%0A'}"
          CHECK_LINK_RESULT="${CHECK_LINK_RESULT//$'\r'/'%0D'}"
          echo "::set-env name=CHECK_LINK_RESULT::$CHECK_LINK_RESULT"
      - uses: JasonEtco/create-an-issue@v2
        if: steps.check_link.outcome == 'failure' # steps.ステップのid.outcome で、ステップ毎の実行の成否をチェックできる
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CHECK_LINK_RESULT: ${{ env.CHECK_LINK_RESULT }} # テンプレート内で {{ env.XXX }} の形式で値を参照
        with:
          filename: .github/issue_template_link_check.md
      # Actionsとしては、 check_linkステップの成否に関わらず成功として扱われる
      # (それ以外のステップでエラーとなった場合は失敗となる)

エラーとなると、こんな感じでIssueを投稿してくれます💺
いい感じ...

image.png

参考にしたもの

31
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
20