2020-10-13 11:05:40 +02:00
## GitHub Actions for Hugo
< img width = "400" alt = "GitHub Actions for Hugo" src = "./images/ogp.svg" >
2020-07-17 08:38:09 +02:00
[![license ](https://img.shields.io/github/license/peaceiris/actions-hugo.svg )](https://github.com/peaceiris/actions-hugo/blob/main/LICENSE)
2019-05-21 22:57:34 +02:00
[![release ](https://img.shields.io/github/release/peaceiris/actions-hugo.svg )](https://github.com/peaceiris/actions-hugo/releases/latest)
[![GitHub release date ](https://img.shields.io/github/release-date/peaceiris/actions-hugo.svg )](https://github.com/peaceiris/actions-hugo/releases)
2020-03-16 02:49:39 +01:00
[![Release Feed ](https://img.shields.io/badge/release-feed-yellow )](https://github.com/peaceiris/actions-hugo/releases.atom)
2020-07-17 08:38:09 +02:00
![Test ](https://github.com/peaceiris/actions-hugo/workflows/Test/badge.svg?branch=main&event=push )
2020-07-23 04:21:29 +02:00
![Code Scanning ](https://github.com/peaceiris/actions-hugo/workflows/Code%20Scanning/badge.svg?event=push )
2020-03-16 02:49:39 +01:00
2019-11-13 04:58:32 +01:00
[![CodeFactor ](https://www.codefactor.io/repository/github/peaceiris/actions-hugo/badge )](https://www.codefactor.io/repository/github/peaceiris/actions-hugo)
2020-07-17 08:38:09 +02:00
[![codecov ](https://codecov.io/gh/peaceiris/actions-hugo/branch/main/graph/badge.svg )](https://codecov.io/gh/peaceiris/actions-hugo)
2020-03-16 02:49:39 +01:00
[![Maintainability ](https://api.codeclimate.com/v1/badges/ebf2eef3a046b396ba9c/maintainability )](https://codeclimate.com/github/peaceiris/actions-hugo/maintainability)
2019-05-21 22:57:34 +02:00
2020-10-13 11:05:40 +02:00
This **Hugo Setup Action** can install [Hugo] to a virtual machine of **GitHub Actions** .
2020-01-18 02:29:06 +01:00
**Hugo extended** version, **Hugo Modules** , Linux (Ubuntu), macOS, and Windows are supported.
2019-09-17 13:39:59 +02:00
2020-10-13 11:05:40 +02:00
[Hugo]: https://github.com/gohugoio/hugo
2020-01-18 02:29:06 +01:00
From `v2` , this Hugo Setup Action has migrated to a JavaScript (TypeScript) action.
We no longer build or pull a Hugo docker image.
2020-01-19 08:35:39 +01:00
Thanks to this change, we can complete this action in less than a few seconds.
2020-01-18 02:29:06 +01:00
(A docker base action was taking about 1 min or more execution time to build and pull a docker image.)
2019-09-21 03:41:21 +02:00
2022-08-29 17:06:54 +02:00
| OS (runs-on) | ubuntu-latest, ubuntu-20.04, ubuntu-22.04 | macos-latest | windows-2019 |
2019-09-21 03:41:21 +02:00
|---|:---:|:---:|:---:|
| Support | ✅️ | ✅️ | ✅️ |
| Hugo type | Hugo Extended | Hugo Modules | Latest Hugo |
|---|:---:|:---:|:---:|
| Support | ✅️ | ✅️ | ✅️ |
2019-09-17 13:39:59 +02:00
2019-11-22 04:12:20 +01:00
## Table of Contents
2019-09-22 02:43:11 +02:00
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE - RUN doctoc TO UPDATE -->
2019-11-22 04:12:20 +01:00
2019-09-22 02:43:11 +02:00
- [Getting started ](#getting-started )
- [⭐️ Create your workflow ](#%EF%B8%8F-create-your-workflow )
- [Options ](#options )
- [⭐️ Use Hugo extended ](#%EF%B8%8F-use-hugo-extended )
- [⭐️ Use the latest version of Hugo ](#%EF%B8%8F-use-the-latest-version-of-hugo )
2019-11-22 04:12:20 +01:00
- [Tips ](#tips )
2020-09-30 21:26:48 +02:00
- [⭐️ Caching Hugo Modules ](#%EF%B8%8F-caching-hugo-modules )
2019-11-22 04:15:00 +01:00
- [⭐️ Read Hugo version from file ](#%EF%B8%8F-read-hugo-version-from-file )
2020-05-24 05:10:28 +02:00
- [⭐️ Workflow for autoprefixer and postcss-cli ](#%EF%B8%8F-workflow-for-autoprefixer-and-postcss-cli )
2020-05-29 15:03:01 +02:00
- [⭐️ Workflow for asciidoctor ](#%EF%B8%8F-workflow-for-asciidoctor )
2021-03-08 07:52:26 +01:00
- [⭐️ Non-ascii Filename ](#%EF%B8%8F-non-ascii-filename )
2020-01-17 17:50:49 +01:00
- [CHANGELOG ](#changelog )
2019-09-22 02:43:11 +02:00
- [License ](#license )
2020-01-17 17:50:49 +01:00
- [About Maintainer ](#about-maintainer )
- [Maintainer Notes ](#maintainer-notes )
2019-09-22 02:43:11 +02:00
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
2019-05-21 22:57:34 +02:00
## Getting started
2019-09-22 02:43:11 +02:00
### ⭐️ Create your workflow
2019-05-21 22:57:34 +02:00
2020-04-28 07:32:23 +02:00
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 ](https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-first-deployment-with-github_token )
2019-05-22 00:18:16 +02:00
2019-10-19 09:52:57 +02:00
[GitHub Actions for GitHub Pages]: https://github.com/peaceiris/actions-gh-pages
2019-05-22 00:18:16 +02:00
2019-09-09 18:25:39 +02:00
[![peaceiris/actions-gh-pages - GitHub ](https://gh-card.dev/repos/peaceiris/actions-gh-pages.svg?fullname )](https://github.com/peaceiris/actions-gh-pages)
2019-08-15 13:26:15 +02:00
```yaml
2021-10-22 02:30:46 +02:00
name: GitHub Pages
2019-08-15 13:26:15 +02:00
on:
push:
branches:
2020-08-25 02:37:31 +02:00
- main # Set a branch to deploy
2021-05-17 16:35:24 +02:00
pull_request:
2019-08-15 13:26:15 +02:00
jobs:
2020-02-23 13:45:14 +01:00
deploy:
2022-08-29 17:06:54 +02:00
runs-on: ubuntu-22.04
2021-07-12 03:12:47 +02:00
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
2019-08-15 13:26:15 +02:00
steps:
2022-03-19 07:49:14 +01:00
- uses: actions/checkout@v3
2020-03-21 04:49:54 +01:00
with:
2020-05-24 05:09:28 +02:00
submodules: true # Fetch Hugo themes (true OR recursive)
2020-04-04 07:57:53 +02:00
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
2020-01-17 17:56:05 +01:00
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
2021-12-24 01:39:58 +01:00
hugo-version: '0.91.2'
2020-01-17 17:56:05 +01:00
# extended: true
- name: Build
run: hugo --minify
- name: Deploy
2020-02-05 08:10:19 +01:00
uses: peaceiris/actions-gh-pages@v3
2021-07-20 22:43:02 +02:00
if: ${{ github.ref == 'refs/heads/main' }}
2020-02-05 08:10:19 +01:00
with:
2020-02-23 13:41:38 +01:00
github_token: ${{ secrets.GITHUB_TOKEN }}
2020-02-05 08:10:19 +01:00
publish_dir: ./public
2019-05-21 22:57:34 +02:00
```
2019-11-22 04:19:08 +01:00
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >
2019-05-21 22:57:34 +02:00
2019-09-16 01:27:57 +02:00
## Options
2019-09-22 02:43:11 +02:00
### ⭐️ Use Hugo extended
2019-09-16 01:27:57 +02:00
2019-09-22 02:37:17 +02:00
Set `extended: true` to use a Hugo extended version.
2019-09-16 01:27:57 +02:00
```yaml
- name: Setup Hugo
2019-11-28 12:47:38 +01:00
uses: peaceiris/actions-hugo@v2
2019-09-16 01:27:57 +02:00
with:
2021-12-24 01:39:58 +01:00
hugo-version: '0.91.2'
2019-09-16 01:27:57 +02:00
extended: true
```
2019-09-22 02:43:11 +02:00
### ⭐️ Use the latest version of Hugo
2019-09-16 01:27:57 +02:00
2019-09-22 02:37:17 +02:00
Set `hugo-version: 'latest'` to use the latest version of Hugo.
2019-09-16 01:27:57 +02:00
```yaml
- name: Setup Hugo
2019-11-28 12:47:38 +01:00
uses: peaceiris/actions-hugo@v2
2019-09-16 01:27:57 +02:00
with:
hugo-version: 'latest'
```
2019-09-17 21:11:47 +02:00
This action fetches the latest version of Hugo by [hugo | Homebrew Formulae ](https://formulae.brew.sh/formula/hugo )
2019-09-16 01:27:57 +02:00
2019-11-22 04:19:08 +01:00
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >
2019-09-16 01:27:57 +02:00
2019-11-22 04:12:20 +01:00
## Tips
2020-09-30 21:26:48 +02:00
### ⭐️ 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.
```yaml
- 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
```
2021-03-08 07:52:26 +01:00
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >
2019-11-22 04:15:00 +01:00
### ⭐️ Read Hugo version from file
2019-11-22 04:12:20 +01:00
2019-11-28 12:43:56 +01:00
How to sync a Hugo version between a Docker Compose and a GitHub Actions workflow via `.env` file.
2019-11-22 04:12:20 +01:00
Write a `HUGO_VERSION` to the `.env` file like the following and push it to a remote branch.
```sh
2021-12-24 01:39:58 +01:00
HUGO_VERSION=0.91.2
2019-11-22 04:12:20 +01:00
```
Next, add a step to read a Hugo version from the `.env` file.
```yaml
- name: Read .env
id: hugo-version
run: |
. ./.env
2019-11-22 04:17:04 +01:00
echo "::set-output name=HUGO_VERSION::${HUGO_VERSION}"
2019-11-22 04:12:20 +01:00
- name: Setup Hugo
2019-11-28 12:47:38 +01:00
uses: peaceiris/actions-hugo@v2
2019-11-22 04:12:20 +01:00
with:
hugo-version: '${{ steps.hugo-version.outputs.HUGO_VERSION }}'
extended: true
```
Here is a `docker-compose.yml` example.
```yaml
version: '3'
services:
hugo:
container_name: hugo
image: "peaceiris/hugo:v${HUGO_VERSION}"
2020-09-30 18:23:25 +02:00
# image: peaceiris/hugo:v${HUGO_VERSION}-mod # Hugo Modules
# image: peaceiris/hugo:v${HUGO_VERSION}-full # Hugo Modules and Node.js
2019-11-22 04:12:20 +01:00
ports:
- 1313:1313
volumes:
- ${PWD}:/src
command:
- server
- --bind=0.0.0.0
- --buildDrafts
```
2019-12-17 23:01:35 +01:00
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)](https://github.com/peaceiris/hugo-extended-docker)
2021-03-08 07:52:26 +01:00
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >
2020-05-24 05:09:28 +02:00
### ⭐️ 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.
2021-10-22 02:30:46 +02:00
The following workflow is tested with [google/docsy-example].
2020-05-24 05:09:28 +02:00
[google/docsy]: https://github.com/google/docsy
[google/docsy-example]: https://github.com/google/docsy-example
2020-06-10 01:46:47 +02:00
A workflow for the Hugo Babel pipeline is also the same as follows.
2020-05-24 05:09:28 +02:00
```yaml
2021-10-22 02:30:46 +02:00
name: GitHub Pages
2020-05-24 05:09:28 +02:00
on:
push:
branches:
2021-10-20 07:30:57 +02:00
- master # Set a branch to deploy
2021-05-17 16:35:24 +02:00
pull_request:
2020-05-24 05:09:28 +02:00
jobs:
deploy:
2022-08-29 17:06:54 +02:00
runs-on: ubuntu-22.04
2021-07-12 03:12:47 +02:00
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
2020-05-24 05:09:28 +02:00
steps:
2022-03-19 07:49:14 +01:00
- uses: actions/checkout@v3
2020-05-24 05:09:28 +02:00
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:
2021-12-24 01:39:58 +01:00
hugo-version: '0.91.2'
2020-05-24 05:09:28 +02:00
extended: true
- name: Setup Node
2022-03-19 07:49:14 +01:00
uses: actions/setup-node@v3
2020-05-24 05:09:28 +02:00
with:
2022-08-27 13:15:37 +02:00
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'
2020-05-24 05:09:28 +02:00
- run: npm ci
- run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
2022-01-24 06:43:41 +01:00
if: ${{ github.ref == 'refs/heads/master' }}
2020-05-24 05:09:28 +02:00
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
```
2021-03-08 07:52:26 +01:00
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >
2020-05-29 15:03:01 +02:00
### ⭐️ Workflow for asciidoctor
Here is an example workflow for a Hugo project using `asciidoctor` .
```yaml
2021-10-22 02:30:46 +02:00
name: GitHub Pages
2020-05-29 15:03:01 +02:00
on:
push:
branches:
2020-08-25 02:37:31 +02:00
- main # Set a branch to deploy
2021-05-17 16:35:24 +02:00
pull_request:
2020-05-29 15:03:01 +02:00
jobs:
deploy:
2022-08-29 17:06:54 +02:00
runs-on: ubuntu-22.04
2021-07-12 03:12:47 +02:00
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
2020-05-29 15:03:01 +02:00
steps:
2022-03-19 07:49:14 +01:00
- uses: actions/checkout@v3
2020-05-29 15:03:01 +02:00
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:
2021-12-24 01:39:58 +01:00
hugo-version: '0.91.2'
2020-05-29 15:03:01 +02:00
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
2021-07-20 22:43:02 +02:00
if: ${{ github.ref == 'refs/heads/main' }}
2020-05-29 15:03:01 +02:00
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
```
2020-01-17 17:54:59 +01:00
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >
2021-03-08 07:52:26 +01:00
### ⭐️ Non-ascii Filename
cf. [Gitinfo fails on unicode filename · Issue #3071 · gohugoio/hugo ](https://github.com/gohugoio/hugo/issues/3071 )
```yaml
2021-10-22 02:30:46 +02:00
name: GitHub Pages
2021-03-08 07:52:26 +01:00
on:
push:
branches:
- main
jobs:
deploy:
2022-08-29 17:06:54 +02:00
runs-on: ubuntu-22.04
2021-07-12 03:12:47 +02:00
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
2021-03-08 07:52:26 +01:00
steps:
2022-03-19 07:49:14 +01:00
- uses: actions/checkout@v3
2021-03-08 07:52:26 +01:00
with:
fetch-depth: 0
- name: Disable quotePath
run: git config core.quotePath false
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
2021-12-24 01:39:58 +01:00
hugo-version: '0.91.2'
2021-03-08 07:52:26 +01:00
```
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >
2019-11-22 04:12:20 +01:00
2020-01-17 17:50:49 +01:00
## CHANGELOG
- [CHANGELOG.md ](CHANGELOG.md )
2019-05-21 22:57:34 +02:00
## License
2019-08-15 13:26:15 +02:00
- [MIT License - peaceiris/actions-hugo]
2019-05-21 22:57:34 +02:00
2020-07-17 08:38:09 +02:00
[MIT License - peaceiris/actions-hugo]: https://github.com/peaceiris/actions-hugo/blob/main/LICENSE
2019-05-21 22:57:34 +02:00
2020-01-17 17:50:49 +01:00
## About Maintainer
- [peaceiris homepage ](https://peaceiris.com/ )
2020-03-29 16:36:33 +02:00
- [GitHub Action Hero: Shohei Ueda - The GitHub Blog ](https://github.blog/2020-03-22-github-action-hero-shohei-ueda/ )
2020-01-17 17:50:49 +01:00
2019-05-22 14:01:05 +02:00
2020-01-17 17:50:49 +01:00
## Maintainer Notes
2020-03-27 11:12:10 +01:00
Run `npm test` on a Docker container.
2020-01-17 17:50:49 +01:00
```sh
2020-03-27 11:12:10 +01:00
# On container
2020-01-17 17:50:49 +01:00
make build
2020-03-27 11:12:10 +01:00
make all
2020-01-17 17:50:49 +01:00
2020-03-27 11:12:10 +01:00
# Release script on host
2020-01-17 17:50:49 +01:00
./release.sh
```
2019-11-22 04:19:08 +01:00
< div align = "right" >
< a href = "#table-of-contents" > Back to TOC ☝️< / a >
< / div >