スケジュール実行のワークフローはリポジトリを60日放置すると動かなくなる

## 概要
タイトルのとおりです。しばらくコミットが一切なかったリポジトリでワークフローだけが日々動いている、という状態だったのですがある日 **「あなたのワークフローはもうすぐ止まりますよ」** という内容のメールがGitHubから届きました。

中身を見ると以下のよう記載がありました。
![capture.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70638/d22cdb11-19ea-cfb5-cc20-cafe2b3ba8c5.png)

> **GitHub Actions scheduled workflow**
> 
> Scheduled workflows are disabled automatically after 60 days of repository inactivity.
> 
> Learn more about disabling and enabling a workflow 
> https://docs.github.com/actions/managing-workflow-runs/disabling-and-enabling-a-workflow
> 
> If you would like the Link check CI workflow to continue running, click the button below.

## メールに記載のリンクをみると
同じことが書いてありました。該当リポジトリはpublicリポジトリなので完全に当てはまります。不要なワークフローが実行され続けることにGitHubのリソースを割かないようにするためこのようになっているみたいです。

https://docs.github.com/en/actions/managing-workflow-runs/disabling-and-enabling-a-workflow

> 
**Warning:** To prevent unnecessary workflow runs, scheduled workflows may be disabled automatically. When a public repository is forked, scheduled workflows are disabled by default. In a public repository, scheduled workflows are automatically disabled when no repository activity has occurred in 60 days.

## 警告メールは60日経過の1週間前に届く
特にそういう公式ドキュメントは見つけられませんでした。が、該当リポジトリの最終コミットを見ると2021年10月29日で、現在は2021年12月21日なので53日経過したところです。あと7日というタイミングでメールが届いたので、おそらく1週間前から警告を出すということではないかと考えました。まあ猶予としても妥当なところだと思いますしほぼ間違いないでしょう。

## なんかうまくやれんかね
本当に使われていないワークフローならそれでもいいんでしょうけど、必要だから動いているワークフローがこれで止められてしまってはたまらんです。コミットがないからってワークフローが必要ないとは限らないでしょうに。

で、なんとかできないか考えてみたんですが **60日以内に1回でもコミットがあれば済むなら、定期的に自動コミットをするワークフローを作っておけば解決じゃね？** という安易な結論に至りました。

というわけで突貫ですがそんなワークフローを作ってみました。

```yml:.github/workflows/extend.yml
name: Extend CI

on:
  schedule:
    - cron: "0 0 1 * *"
  workflow_dispatch:

jobs:
  exec:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Git setting
        run: |
          # pullしておかないと Re-run all jobs 実行時はコケてしまうため
          git pull
          git config --local user.email "github-actions[bot]@users.noreply.github.com"
          git config --local user.name "github-actions[bot]"

      - name: Commit and push
        run: |
          git commit --allow-empty -m "chore: prevent automatic workflow stopping" -m "see: https://docs.github.com/en/actions/managing-workflow-runs/disabling-and-enabling-a-workflow"
          git push
```

実行されると以下の画像のようなコミットが増えます。`--allow-empty` で空コミットしているだけなので特にリポジトリ内のファイルに変更はありません。これによってリポジトリが放置されて続けて60日経ってしまうのは回避できるはずです。
![commit.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70638/e149ef9e-58ef-5ce7-7a36-726ed10042b3.png)

[GitHub Actions のスケジュール実行にやや不安はあります](https://qiita.com/tommy_aka_jps/items/5f4fe384008ffc9fa794) が、まあ月一で実行しておけば60日経つ前にはたぶん動くでしょうということで Cron は毎月1日に実行されるようにしました。

## ちなみに
別に [**止まったらまた動かせばいいだけじゃね**](https://docs.github.com/en/actions/managing-workflow-runs/disabling-and-enabling-a-workflow#enabling-a-workflow) って言われたらまあ身も蓋もない話ではあります:sweat_smile:まあメールに気が付かないで知らないうちに止まってしまうよりはマシかなーと。

もし何かの参考になれば幸いです。

## 参考
- [Disabling and enabling a workflow \- GitHub Docs](https://docs.github.com/en/actions/managing-workflow-runs/disabling-and-enabling-a-workflow)
- [How can commits show "github actions bot" instead of Unknown ? · Discussion \#479 · actions/checkout](https://github.com/actions/checkout/discussions/479)
- [Add line break to 'git commit -m' from the command line - Stack Overflow](https://stackoverflow.com/questions/5064563/add-line-break-to-git-commit-m-from-the-command-line)