mottox2 blog

GitHub Actionsのイベントによって挙動を変える

devGitHubActions

GitHub Actionsでは定期実行(schedule)のイベントがサポートされておりCron形式で定期的に実行されるワークフローを定義できます。しかし、scheduleではなくpushイベントで動作を確認したいときでも、定期的に実行されるワークフローの中に破壊的な処理(ファイル書き込みやAPI呼び出し)があると安心して実行することができません。

ローカルでDockerコンテナを使って確認するactというツールもありますが、個人ごとに環境を用意する必要があったり、微妙に挙動が不安に感じることもあってnot for meな気がしています。

そこで、各種CLIに付随するdry run的な挙動を実現するために、Workflowをトリガーするイベントによって処理を分岐させ安全に挙動を確認できるようにしました。

イベントによって挙動を変える

次のワークフローはDenoで外部APIから取得してきたデータをファイルに格納し、add-and-commitアクションでリポジトリにcommitするものです。

.github/workflows/task.yml
name: Run task

on:
  schedule:
    - cron:  '30 0 * * *'
  push:

jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - run: echo "event name is:" ${{ github.event_name }}

      - name: Checkout repo
        uses: actions/checkout@v3

      - name: Setup Deno
        uses: denoland/setup-deno@v1
        with:
          deno-version: v1.23

      # ファイルの書き込みを行うプログラムを実行しています
      - name: Run script
        run: >
          deno run
          --allow-write
          --allow-env=MY_SECRET_TOKEN
          --allow-net=api.example.com
          index.ts
        env:
          MY_SECRET_TOKEN: ${{ secrets.MY_SECRET_TOKEN }}

      # 作成されたファイルのDiffが出力される
      - run: git add . -N && git diff . 
      
      - uses: EndBug/add-and-commit@v9
        if: github.event_name == 'schedule' # この条件文によってScheduleのときだけコミットされるようになる

ワークフローのイベントにはScheduleとPushが設定されているため、定期的に実行されるだけでなくプッシュされたときにもワークフローが実行されます。
ただ、プッシュされた時はファイルが作成されたことは確認したいのですが、コミットされるのは望ましくありません。

そこでStepに条件文を指定し、トリガーとなったイベント名を取得するgithub.event_nameを使ってScheduleの時のみコミットを行うように指定します。
また、デバッグ用として作成されたファイルのDiffを表示するためにgit add . -N && git diff . を実行するようにしました。

これら対応を行うことである程度安心して挙動を確認できるようになりました。

まとめ

GitHub Actionsのワークフロー構文に関してはドキュメントがしっかりしていて、しかも日本語対応しています。ドキュメントを読みましょう。

今回は触れませんでしたが、簡単なタスクを書くのであればDenoが良かったです。

dev

ウェブ技術で縦書きを含む画像を生成したい

ここ最近、Web技術を利用した画像生成に興味があります。本記事では、日本語における表現の一種である縦書きに焦点を当て、Web技術を使った縦書きを含む画像生成方法についての調査をまとめました。 > 現

blog

Netlify Formsで問い合わせフォームを作ったら簡単だった

追記(2022/12/29): 問い合わせに対応する窓口をTwitterに統一したいので、フォームページは削除しました。 当ブログは静的サイトホスティングサービスのNetlifyでホスティングされ

netlify
dev

翻訳でHacktoberfestに参加しました

毎年10月に開催されるHacktoberfestに参加しました。このイベントはOSSへの貢献を行い、期間中に規定数(4つ)の貢献を行った人に特典がプレゼントされるものになっています。 自分はドキュメ

Copyright © 2023 @mottox2 All Rights Reserved.