GitHub Actions for Hugo ️ Setup Hugo quickly and build your site fast. Hugo extended, Hugo Modules, Linux (Ubuntu), macOS, and Windows are supported.
Find a file
Michael T Lombardi b7e8a5bdba
(GH-608) Add getConventions and refactor
This commit introduces the getConventions function, which does a one-time calculation
for the changes in packaging conventions to propagate to the getArch and getOS
functions.

It updates those functions and the installer code to leverage the conventions.

Finally, it updates the test arrangement for getArch and getOS to use test cases
instead of repeating the same test over and over and adds unit tests for the new
getConventions function.
2022-10-13 23:13:33 -05:00
.github ci: bump actions/setup-node from 3.4.1 to 3.5.0 (#606) 2022-09-28 11:06:30 +09:00
.husky chore: update husky config 2021-03-06 23:08:18 +09:00
.vscode chore: disable deno on vscode (#388) 2020-07-17 16:08:23 +09:00
__tests__ (GH-608) Add getConventions and refactor 2022-10-13 23:13:33 -05:00
images [ImgBot] Optimize images (#56) 2019-10-08 14:01:01 +09:00
src (GH-608) Add getConventions and refactor 2022-10-13 23:13:33 -05:00
.dockerignore chore: update git (#150) 2020-01-25 11:56:09 +09:00
.editorconfig chore: update git (#150) 2020-01-25 11:56:09 +09:00
.envrc chore: delete line 2019-10-09 11:49:24 +09:00
.eslintrc.json test: Add integration testing (#131) 2020-01-18 10:29:06 +09:00
.gitignore chore: Add .DS_Store [skip ci] 2020-01-18 01:12:59 +09:00
.npmrc chore: Add engines field 2020-01-29 11:03:45 +09:00
.nvmrc deps: node 12.22.4 2021-08-11 03:39:20 +09:00
.prettierrc.json chore: change printWidth from 80 to 100 (#365) 2020-06-22 05:40:06 +09:00
action.yml github: Update action meta 2019-10-29 10:03:36 +09:00
CHANGELOG.md chore(release): 2.5.0 2021-05-27 13:04:54 +09:00
Dockerfile deps: bump git from 2.27.0 to 2.28.0 (#398) 2020-07-28 02:20:31 +09:00
jest.config.js Feat: Support macOS and Windows, migrate JavaScript to TypeScript (#32) 2019-09-21 10:41:21 +09:00
LICENSE chore: Update LICENSE year 2020-01-16 17:42:37 +09:00
Makefile ci: Add workflow for developing container (#231) 2020-03-27 19:07:48 +09:00
package-lock.json deps: bump @actions/exec from 1.0.4 to 1.1.1 (#571) 2022-04-01 16:02:57 +09:00
package.json deps: bump @actions/exec from 1.0.4 to 1.1.1 (#571) 2022-04-01 16:02:57 +09:00
README.md ci: drop ubuntu-18.04, add ubuntu-22.04 and ubuntu-latest (#603) 2022-08-30 00:06:54 +09:00
release.sh chore: change default branch from master to main (#386) 2020-07-17 15:38:09 +09:00
tsconfig.json build: Set target to ES2019 (#497) 2021-03-06 21:29:10 +09:00

GitHub Actions for Hugo

GitHub Actions for Hugo

license release GitHub release date Release Feed Test Code Scanning

CodeFactor codecov Maintainability

This Hugo Setup Action can install Hugo to a virtual machine of GitHub Actions. Hugo extended version, Hugo Modules, Linux (Ubuntu), macOS, and Windows are supported.

From v2, this Hugo Setup Action has migrated to a JavaScript (TypeScript) action. We no longer build or pull a Hugo docker image. Thanks to this change, we can complete this action in less than a few seconds. (A docker base action was taking about 1 min or more execution time to build and pull a docker image.)

OS (runs-on) ubuntu-latest, ubuntu-20.04, ubuntu-22.04 macos-latest windows-2019
Support
Hugo type Hugo Extended Hugo Modules Latest Hugo
Support

Table of Contents

Getting started

Create your workflow

An example workflow .github/workflows/gh-pages.yml with GitHub Actions for GitHub Pages. For the first deployment, we have to do this operation: First Deployment with GITHUB_TOKEN - peaceiris/actions-gh-pages

peaceiris/actions-gh-pages - GitHub

name: GitHub Pages

on:
  push:
    branches:
      - main  # Set a branch to deploy
  pull_request:

jobs:
  deploy:
    runs-on: ubuntu-22.04
    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true  # Fetch Hugo themes (true OR recursive)
          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.91.2'
          # extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        if: ${{ github.ref == 'refs/heads/main' }}
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./public

Options

Use Hugo extended

Set extended: true to use a Hugo extended version.

- name: Setup Hugo
  uses: peaceiris/actions-hugo@v2
  with:
    hugo-version: '0.91.2'
    extended: true

Use the latest version of Hugo

Set hugo-version: 'latest' to use the latest version of Hugo.

- name: Setup Hugo
  uses: peaceiris/actions-hugo@v2
  with:
    hugo-version: 'latest'

This action fetches the latest version of Hugo by hugo | Homebrew Formulae

Tips

Caching Hugo Modules

Insert a cache step before site-building as follows. Note that the cache dir location of Hugo on a Linux-based operating system is /tmp/hugo_cache. On macOS, ${TMPDIR}/hugo_cache has the location.

- uses: actions/cache@v2
  with:
    path: /tmp/hugo_cache
    key: ${{ runner.os }}-hugomod-${{ hashFiles('**/go.sum') }}
    restore-keys: |
      ${{ runner.os }}-hugomod-      

- name: Build
  run: hugo --minify

Read Hugo version from file

How to sync a Hugo version between a Docker Compose and a GitHub Actions workflow via .env file.

Write a HUGO_VERSION to the .env file like the following and push it to a remote branch.

HUGO_VERSION=0.91.2

Next, add a step to read a Hugo version from the .env file.

    - name: Read .env
      id: hugo-version
      run: |
        . ./.env
        echo "::set-output name=HUGO_VERSION::${HUGO_VERSION}"        

    - name: Setup Hugo
      uses: peaceiris/actions-hugo@v2
      with:
        hugo-version: '${{ steps.hugo-version.outputs.HUGO_VERSION }}'
        extended: true

Here is a docker-compose.yml example.

version: '3'

services:
  hugo:
    container_name: hugo
    image: "peaceiris/hugo:v${HUGO_VERSION}"
    # image: peaceiris/hugo:v${HUGO_VERSION}-mod   # Hugo Modules
    # image: peaceiris/hugo:v${HUGO_VERSION}-full  # Hugo Modules and Node.js
    ports:
      - 1313:1313
    volumes:
      - ${PWD}:/src
    command:
      - server
      - --bind=0.0.0.0
      - --buildDrafts

The alpine base Hugo Docker image is provided on the following repository.

peaceiris/hugo-extended-docker: Hugo alpine base Docker image (Hugo extended and Hugo Modules)

Workflow for autoprefixer and postcss-cli

Here is an example workflow for the google/docsy Hugo theme. This theme needs autoprefixer and postcss-cli to build a project. The following workflow is tested with google/docsy-example.

A workflow for the Hugo Babel pipeline is also the same as follows.

name: GitHub Pages

on:
  push:
    branches:
      - master  # Set a branch to deploy
  pull_request:

jobs:
  deploy:
    runs-on: ubuntu-22.04
    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive  # Fetch the Docsy theme
          fetch-depth: 0         # Fetch all history for .GitInfo and .Lastmod

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.91.2'
          extended: true

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: '16'
          cache: 'npm'
          # The action defaults to search for the dependency file (package-lock.json,
          # npm-shrinkwrap.json or yarn.lock) in the repository root, and uses its
          # hash as a part of the cache key.
          # https://github.com/actions/setup-node/blob/main/docs/advanced-usage.md#caching-packages-data
          cache-dependency-path: '**/package-lock.json'

      - run: npm ci
      - run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        if: ${{ github.ref == 'refs/heads/master' }}
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

Workflow for asciidoctor

Here is an example workflow for a Hugo project using asciidoctor.

name: GitHub Pages

on:
  push:
    branches:
      - main  # Set a branch to deploy
  pull_request:

jobs:
  deploy:
    runs-on: ubuntu-22.04
    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true  # Fetch Hugo themes (true OR recursive)
          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.91.2'
          extended: true

      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.7

      - run: gem install asciidoctor

      - name: Run Hugo
        run: |
          alias asciidoctor="asciidoctor --attribute=experimental=true --attribute=icons=font"
          hugo --minify          

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        if: ${{ github.ref == 'refs/heads/main' }}
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

Non-ascii Filename

cf. Gitinfo fails on unicode filename · Issue #3071 · gohugoio/hugo

name: GitHub Pages

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-22.04
    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Disable quotePath
        run: git config core.quotePath false

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.91.2'

CHANGELOG

License

About Maintainer

Maintainer Notes

Run npm test on a Docker container.

# On container
make build
make all

# Release script on host
./release.sh