This article explains how to deploy sites to GitHub Pages using GitHub Actions.

Workflow

Create .github/workflows/gh-pages.yml in the site root.

 1name: GitHub Pages
 2on:
 3  push:
 4    branches:
 5      - main
 6permissions:
 7  contents: write
 8jobs:
 9  build-and-deploy:
10    concurrency: ci-${{ github.ref }}
11    runs-on: ubuntu-latest
12    steps:
13      - name: Checkout 🛎️
14        uses: actions/checkout@v3
15        with:
16          submodules: true
17          fetch-depth: 0
18
19      - name: Setup Node
20        uses: actions/setup-node@v3
21        with:
22          node-version: '16'
23
24      - name: Cache dependencies
25        uses: actions/cache@v2
26        with:
27          path: ~/.npm
28          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
29          restore-keys: |
30                        ${{ runner.os }}-node-
31
32      - name: Install dependencies
33        run: npm install
34
35      - name: Setup Hugo
36        uses: peaceiris/actions-hugo@v2
37        with:
38          hugo-version: 'latest'
39          extended: true
40
41      - name: Build
42        run: hugo --minify --gc --enableGitInfo
43
44      - name: Deploy 🚀
45        uses: peaceiris/actions-gh-pages@v3
46        with:
47          github_token: ${{ secrets.GITHUB_TOKEN }}
48          publish_dir: ./public

See also Starter Template GitHub Pages Workflow