これまで GitHub Actions を使ったことがなかったのですが、
という質問を見かけ、丁度よいお題だと思ったのでこれを実現してみることにしました。
リポジトリ作成とコードコミット
まず、GitHub Pages用のリポジトリとそれを定期更新するためのプログラムを管理するリポジトリの2つを用意します。これらは1つのリポジトリにまとめてしまえると思いますが、冒頭の質問者の環境はそうでは無さそうだったので今回は別々にしました。
なお、私は既に個人用に GitHub Pages を利用しているので、別途 hello-github-actions という Organization を作成して、そちらに上記2リポジトリを作成しました。
-
GitHub Pages 用: hello-github-actions/hello-github-actions.github.io
-
更新プログラム管理用: hello-github-actions/updater
更新プログラムは こんな感じ のもので、スタック・オーバーフローのRSSを取得して public
ディレクトリにhtmlで書き出すものです。 この public
ディレクトリ以下を GitHub Pages に表示する設定を行っていきます。
Deploy key 設定
GitHub Actions for GitHub Pages というアクションを利用して更新を行います。
このページの Deploy to external repository external_repository に記載されている機能を用いるために、 Deploy key の設定を行っておきます。
鍵生成
まず、 デプロイキーの管理 > デプロイキー > セットアップ の手順通り、 ssh-keygen
コマンドでキーを生成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
GitHub Pages リポジトリへ deploy key として公開鍵を登録
続いて、公開鍵を GitHub Pages のリポジトリに Deploy key として登録します。
リポジトリの Settings > Deploy keys > Add deploy key ボタンから登録できます。 上記した私のリポジトリの場合は
から登録することになります。 Allow write access のチェックを入れます。Title は何でも良いようです。
更新プログラム リポジトリへ repository secret として秘密鍵を登録
その後、秘密鍵を更新プログラムリポジトリのシークレットとして登録します。
リポジトリの Settings > Secrets > New repository secret ボタンから登録できます。 私のリポジトリの場合は
から登録することになります。 Name は後で GitHub Actions スクリプトから変数名として利用するので覚えておいてください。今回のサンプル実装では リファレンスのサンプルと同じく ACTIONS_DEPLOY_KEY という名前に設定しています。
GitHub Actions 設定
更新プログラムを定期的に実行したいので、更新プログラムリポジトリに設定を行います。
.github/workflows
に ymlファイルを作成します。名前は何でも良いようなので今回は update.yml
としました。
記載内容は
などを参考にし、結果的に次のようになっています。
前述した通り、 ACTIONS_DEPLOY_KEY という名前を変数として用いています。
成果物
1時間おきに https://ja.stackoverflow.com/ の上位の質問を取得して一覧します。
毎時15分に更新する設定にしていますが、 GitHub Actionsのログを見ると 30-40分程度遅れて実行されているようです。 (検証時、書き方が間違っているせいで実行できていないのかとあせりました…)