GitHub Pagesへ直接デプロイする方式に変更

このサイトのGitHub Pagesへのデプロイ方式を、GitHub Actionsを使って直接デプロイする方式に変更した。

新機能の説明

2022年7月まで、GitHub Pagesにファイルをデプロイするためには、何らかのブランチにデプロイしたいファイルを配置する必要があった。これを実現するために、よくpeaceiris/actions-gh-pagesのようなカスタムアクションが使われていた。

2022年7月から、新方式として、actions/upload-pages-artifactactions/deploy-pagesという二つのカスタムアクションを組み合わせて、ブランチにファイルを配置することなく直接GitHub Pagesにデプロイする方式も選べるようになった。この情報は、GitHubのブログ記事でも紹介されている。2023年5月時点で、この機能はβ版という位置付けになっている。

このサイトでの変更箇所

リポジトリの設定と、workflow、合計二箇所を変更することになった。

リポジトリの設定変更について。GitHub PagesのSourceを "Deploy from a branch" から "GitHub Actions" に変更した。

Settings > Pages

workflowの変更について。変更前は、デプロイ用のworkflowは以下のような内容だった。

name: publish

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
        with:
          repository: r7kamura/r7n
      - uses: actions/checkout@v3
        with:
          path: r7kamura.com
      - uses: actions/setup-node@v3
        with:
          node-version-file: package.json
          cache: npm
      - run: npm install
      - run: npm run export
        env:
          ARTICLES_DIRECTORY_PATHS: ./r7kamura.com/articles
      - uses: peaceiris/actions-gh-pages@v3
        with:
          cname: r7kamura.com
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: out

変更後は、以下のような内容になった。

name: publish

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
        with:
          repository: r7kamura/r7n
      - uses: actions/checkout@v3
        with:
          path: r7kamura.com
      - uses: actions/setup-node@v3
        with:
          node-version-file: package.json
          cache: npm
      - run: npm install
      - run: npm run export
        env:
          ARTICLES_DIRECTORY_PATHS: ./r7kamura.com/articles
      - uses: actions/upload-pages-artifact@v1
        with:
          path: out
  deploy:
    needs: build
    permissions:
      id-token: write
      pages: write
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/deploy-pages@v2
        id: deployment

元々peaceiris/actions-gh-pagesを実行していた箇所が、actions/upload-pages-artifactに変わった。また実行されるjobが、元々buildだけだったのが、buildとdeployの2つに分かたれた。

buildアクションでは、まず一時的にartifactとしてファイルがアップロードされる。次に、後続のdeployアクションで、artifactがGitHub Pagesにデプロイされる。actions/deploy-pagesでは、このように二つのjobに分割することを推奨していたので、そのようにした。

また細かい変更点として、カスタムドメインを使うためのCNAMEというファイルが、GitHubによってリポジトリのデフォルトブランチに自動的に配置された。このCNAMEファイルはドキュメントを読む限り本来不要なように見えるので、不具合で追加されただけかも。