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
dependabot[bot] f42b9853d3
deps: bump @types/jest from 26.0.0 to 26.0.3 (#369)
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 26.0.0 to 26.0.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-06-25 17:11:42 +09:00
.github ci: remove open-pull-requests-limit 2020-06-24 14:10:03 +09:00
.vscode Feat: Support macOS and Windows, migrate JavaScript to TypeScript (#32) 2019-09-21 10:41:21 +09:00
__tests__ chore: change printWidth from 80 to 100 (#365) 2020-06-22 05:40:06 +09:00
images [ImgBot] Optimize images (#56) 2019-10-08 14:01:01 +09:00
src chore: change printWidth from 80 to 100 (#365) 2020-06-22 05:40:06 +09: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: bump node from 12.18.0 to 12.18.1 (#360) 2020-06-19 12:00:05 +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.4.12 2020-06-21 13:19:00 +09:00
Dockerfile deps: bump git from 2.26.1 to 2.27.0 (#354) 2020-06-13 17:44:54 +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 @types/jest from 26.0.0 to 26.0.3 (#369) 2020-06-25 17:11:42 +09:00
package.json deps: bump @types/jest from 26.0.0 to 26.0.3 (#369) 2020-06-25 17:11:42 +09:00
README.md docs: add Babel 2020-06-10 08:46:47 +09:00
release.sh chore: ignore failure 2020-01-25 02:30:13 +09:00
tsconfig.json test: Add integration testing (#131) 2020-01-18 10:29:06 +09:00

license release GitHub release date Release Feed Test

CodeFactor codecov Maintainability

GitHub Actions for Hugo

GitHub Actions for Hugo

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-18.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:
      - master

jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
        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.71.1'
          # extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        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.71.1'
    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

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.71.1

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
    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 on google/docsy-example.

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

name: github pages

on:
  push:
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
        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.71.1'
          extended: true

      - name: Setup Node
        uses: actions/setup-node@v1
        with:
          node-version: '12.x'

      - name: Cache dependencies
        uses: actions/cache@v1
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-            

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

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        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:
      - master

jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
        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.71.1'
          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
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}

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