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が良かったです。

event

Figmaのイベントでプラグイン開発について話してきた

Figmaの公式コミュニティであるFriends of Figma, TokyoのFigmaお楽しみトーク Vol.2というイベントでFigmaプラグイン開発について話してきました。 今回のイベント

poem

デザインとエンジニアリングの狭間で

この記事はエンジニアリングに興味があるデザイナー、デザインに興味があるエンジニア Advent Calendar 22日目の記事です。 私は以前ウェブアプリケーションエンジニア(サーバーとウェブフ

events

技術書典10でReactとGatsbyJSの入門本を頒布します

技術書典10で『つのぶえ出版』としてReactとGatsbyJSの入門本を頒布予定です。 > どんな本かどんな本か 一言でいうと、React/Gatsbyでウェブサイトを書けるようになる本です

Copyright © 2019 @mottox2 All Rights Reserved.