GitHub Actions で GitHub Pages へ公開する
この GitHub Actions を使う。
方針
- ジェネレーターは Eleventy
- そうでなければ適宜読み替えてください
books/
ディレクトリーに Markdown ファイル等のコンテンツが置かれるmain
ブランチへのgit push
で公開
作業手順
- ビルドスクリプト (
npm run build
) - GitHub Actions のセットアップ
- リポジトリーの GitHub Pages 設定
- 独自ドメインの設定(必要なら)
ビルドスクリプト (npm run build
)
package.json
で npm script build
を用意する。
{
"scripts": {
"build": "eleventy --input=books/ --formats=html,md,css,png",
},
…
これで npm run build
が使えるようになった。
GitHub Actions のセットアップ
プロジェクトのディレクトリーに .github/workflows/github-pages.yml
を以下の内容で作成。
name: GitHub Pages
on: push
jobs:
publish:
if: ${{ github.ref == 'refs/heads/main' }}
runs-on: ubuntu-20.04
permissions:
contents: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: 18
cache: "npm"
- name: Install
run: npm ci
- name: Build
run: npm run build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: _site/
リポジトリーの GitHub Pages 設定
GitHub で該当リポジトリーを開いて Settings > 左メニュー Pages > Source にて、gh-pages
のブランチを選択する。
"(None)" のままだと、この設定ページに "Your site is ready to be published at ..." というメッセージ(青色)が表示されるものの公開が完了しない。"Your site is published at ..." というメッセージ(緑色)になれば完了。
独自ドメインの設定(必要なら)
- Configuring a custom domain for your GitHub Pages site - GitHub Docs
- Passthrough File Copy — Eleventy
いわゆる CNAME
の設定。
まず利用中のドメイン管理サービスで、該当ドメインに CNAME
で振り先が <GitHubアカウント名>.github.io
、例えば ginpei
なら ginpei.github.io
になるよう設定しておく。
次に設定ファイルを用意する。static/CNAME
(拡張子なし)を作成し、該当ドメイン名を記述する。
my-site.example.com
このファイル CNAME
は出力ディレクトリーのルートに置かれる必要がある。Eleventy の設定 .eleventy.js
で以下のようにして、static/
以下のファイルを含めるようにする。
module.exports = function (eleventyConfig) {
eleventyConfig.addPassthroughCopy({ static: "/" });
…
これでビルド時に _site/CNAME
が用意される。GitHub Pages はこのファイルを読み DNS 設定を行う。
設定後には TLS 証明書が発効され、それも完了すると https://
で利用できるようになる。割と時間がかかるっぽい。"Enforce HTTPS" の設定をしておくと良さそう。
エラーと対策
なんか動いてない気がする
GitHub で該当リポジトリーを開いて Actions からログが閲覧できる。エラーが起きていないか確認する。
CSS や画像が読み込まれない
Eleventy を --serve
オプションで起動するとルート /index.html
で動作する一方、GitHub Pages ではリポジトリー名がパスに含まれるため /foo-bar/index.html
のようになる。
WIP