はじめに
先日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を投稿してくれます💺
いい感じ...