GitHub Actionsでは定期実行(schedule)のイベントがサポートされておりCron形式で定期的に実行されるワークフローを定義できます。しかし、scheduleではなくpushイベントで動作を確認したいときでも、定期的に実行されるワークフローの中に破壊的な処理(ファイル書き込みやAPI呼び出し)があると安心して実行することができません。
ローカルでDockerコンテナを使って確認するactというツールもありますが、個人ごとに環境を用意する必要があったり、微妙に挙動が不安に感じることもあってnot for meな気がしています。
そこで、各種CLIに付随するdry run的な挙動を実現するために、Workflowをトリガーするイベントによって処理を分岐させ安全に挙動を確認できるようにしました。
次のワークフローはDenoで外部APIから取得してきたデータをファイルに格納し、add-and-commitアクションでリポジトリにcommitするものです。
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が良かったです。
ここ最近、Web技術を利用した画像生成に興味があります。本記事では、日本語における表現の一種である縦書きに焦点を当て、Web技術を使った縦書きを含む画像生成方法についての調査をまとめました。 > 現
追記(2022/12/29): 問い合わせに対応する窓口をTwitterに統一したいので、フォームページは削除しました。 当ブログは静的サイトホスティングサービスのNetlifyでホスティングされ
毎年10月に開催されるHacktoberfestに参加しました。このイベントはOSSへの貢献を行い、期間中に規定数(4つ)の貢献を行った人に特典がプレゼントされるものになっています。 自分はドキュメ