🌼

新しいGitHub Pagesのデプロイ方法を試す

2022/07/29に公開
1

GitHub Pages に新しいデプロイ方法が来た

https://github.blog/changelog/2022-07-27-github-pages-custom-github-actions-workflows-beta/

https://github.blog/changelog/2022-08-10-github-pages-builds-with-github-actions-ga/

まだ Beta ですが、 ついに公式から Pages にデプロイする方法が提供されました。

いままで

いままで GitHub Pages へデプロイする際は、ブランチを指定する方法や、デフォルトブランチの特定のディレクトリを指定していました。

また、これを GitHub Actions で行うために、日本人作者の peaceiris/actions-gh-pages を利用したことがある人も多いと思います。
(記事のアイコンは畏敬の念を込めて作者のアイコンっぽい絵文字にしました)

これから

これからは、gh-pages ブランチなどリポジトリを汚染せずに GitHub Pages へのデプロイが可能になります。

peaceiris/actions-gh-pages からの乗り換え

以下の 2 つを用いることで対応できます。

乗り換え前にリポジトリの Settings > Pages から Source を GitHub Actions に変更しましょう。

乗り換えのステップは基本的に 2 つです。

ステップ 1

peaceiris/actions-gh-pages の使用箇所を actions/upload-pages-artifact で置き換える。

-       - uses: peaceiris/actions-gh-pages@v3
-         with:
-           github_token: ${{ secrets.GITHUB_TOKEN }}
-           publish_dir: build
+       - uses: actions/upload-pages-artifact@v1
+         with:
+           path: build

今までは静的コンテンツを直接 gh-pages などのブランチにプッシュしていましたが、
今後は一度 artifacts に静的コンテンツをアップロードします。

ステップ 2

新たに actions/deploy-pages を使った job を作ります。

+   deploy:
+     needs: build
+     permissions:
+       pages: write
+       id-token: write
+     environment:
+       name: github-pages
+       url: ${{ steps.deployment.outputs.page_url }}
+     runs-on: ubuntu-latest
+     steps:
+       - name: Deploy to GitHub Pages
+         id: deployment
+         uses: actions/deploy-pages@v1

needs の項目では、ステップ 1 でアップロードした job を指定します。
steps.uses で先ほど設定した artifact がダウンロードされ、実際にデプロイ用のエンドポイントが叩かれてデプロイされます。

https://api.github.com/repos/{owner}/{repo}/pages/deployment というエンドポイントが叩かれてデプロイされるようですがこのエンドポイントはまだドキュメントには載っていない模様です(2022/07/29 現在)

ドキュメント: https://docs.github.com/ja/rest/pages#create-a-github-pages-deployment

permissions はエンドポイントを利用するための必要最低限の権限を取得していることになります。

この 2 つのステップで乗り換えは完了です。いままで通りのトリガーでデプロイできます。

おわりに

ドキュメントなどは今まで通り、 /docs ディレクトリをデプロイ対象にすることもできますし、リポジトリにコミットを紐づけたくない場合はこの方法で切り離せるようになります。
peaceiris/actions-gh-pages などのサードパーティ製の Action を利用する機会は減ると思いますが、あえてコミットを残したい場合や置き換えるまでもない場合には引き続き利用できます。

ユースケースによってデプロイ方法を選びつつ GitHub Pages を活用しましょう 🌼


自分で試したコミットと Actions の結果
https://github.com/ssssota/ssssota.github.io/commit/4787059e29c49b8e10433a4dda7f3dc7b74e85e9
https://github.com/ssssota/ssssota.github.io/actions/runs/2754361352

株式会社ZOZO

Discussion

tnirtnir

pre-public betaの時点では分かっていなかったのですが、https://github.com/actions/jekyll-build-pagesベースとは異なり、Maintain roleではActionsをpublishing sourceにできないことが今日分かりました。

https://github.com/actions/starter-workflows/tree/main/pages もブログ公開のタイミングに合わせて公開されていたので、そちらが参考になるかと思いましたが、permissionsはこちらの記事のように細かく設定したほうがよさそうですね。

https://api.github.com/repos/{owner}/{repo}/pages/deployment というエンドポイントが叩かれてデプロイされるようですがこのエンドポイントはまだドキュメントには載っていない模様です(2022/07/29 現在)。

17:00 JST (08:00 UTC)現在は https://docs.github.com/en/rest/pages#create-a-github-pages-deployment に掲載されているように見えました。が、Response schemaとExample responseが(手元で実際に叩いて返ってくるレスポンスと比べて)古いように見えました。