新しいGitHub Pagesのデプロイ方法を試す
GitHub Pages に新しいデプロイ方法が来た
まだ 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 の結果
Discussion
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はこちらの記事のように細かく設定したほうがよさそうですね。
17:00 JST (08:00 UTC)現在は https://docs.github.com/en/rest/pages#create-a-github-pages-deployment に掲載されているように見えました。が、Response schemaとExample responseが(手元で実際に叩いて返ってくるレスポンスと比べて)古いように見えました。