2019-05-21 21:53:54 +00:00
[![license ](https://img.shields.io/github/license/peaceiris/actions-gh-pages.svg )](https://github.com/peaceiris/actions-gh-pages/blob/master/LICENSE)
[![release ](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg )](https://github.com/peaceiris/actions-gh-pages/releases/latest)
[![GitHub release date ](https://img.shields.io/github/release-date/peaceiris/actions-gh-pages.svg )](https://github.com/peaceiris/actions-gh-pages/releases)
2019-08-21 19:58:58 +00:00
[![GitHub Actions status ](https://github.com/peaceiris/actions-gh-pages/workflows/docker%20image%20ci/badge.svg )](https://github.com/peaceiris/actions-gh-pages/actions)
2019-09-02 10:23:36 +00:00
[![Docker Hub Build Status ](https://img.shields.io/docker/cloud/build/peaceiris/gh-pages.svg )](https://hub.docker.com/r/peaceiris/gh-pages)
2019-05-21 21:53:54 +00:00
< img width = "400" alt = "GitHub Actions for deploying to GitHub Pages with Static Site Generators" src = "./images/ogp.svg" >
## GitHub Actions for deploying to GitHub Pages
A GitHub Action to deploy your static site to GitHub Pages with [Static Site Generators] (Hugo, MkDocs, Gatsby, GitBook, etc.)
[Static Site Generators]: https://www.staticgen.com/
2019-09-08 02:38:30 +00:00
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE - RUN doctoc TO UPDATE -->
Table of Contents
- [Getting started ](#getting-started )
- [(1) Add ssh deploy key ](#1-add-ssh-deploy-key )
- [(2) Create `.github/workflows/gh-pages.yml` ](#2-create-githubworkflowsgh-pagesyml )
2019-09-09 01:42:09 +00:00
- [:star: Repository type - Project ](#star-repository-type---project )
- [:star: Repository type - User and Organization ](#star-repository-type---user-and-organization )
2019-09-08 02:38:30 +00:00
- [Options ](#options )
2019-09-09 01:42:09 +00:00
- [:star: Pull action image from Docker Hub ](#star-pull-action-image-from-docker-hub )
- [:star: `PERSONAL_TOKEN` ](#star-personal_token )
- [:star: `GITHUB_TOKEN` ](#star-github_token )
2019-09-14 18:49:20 +00:00
- [:star: Suppressing empty commits ](#star-suppressing-empty-commits )
2019-09-17 13:55:15 +00:00
- [Tips and FAQ ](#tips-and-faq )
- [How to add `CNAME` ](#how-to-add-cname )
2019-09-08 02:38:30 +00:00
- [Examples ](#examples )
2019-09-10 06:18:51 +00:00
- [Static Site Generators with Node.js ](#static-site-generators-with-nodejs )
2019-09-12 12:15:05 +00:00
- [Gatsby ](#gatsby )
2019-09-12 17:20:10 +00:00
- [React and Next ](#react-and-next )
2019-09-12 11:13:41 +00:00
- [Vue and Nuxt ](#vue-and-nuxt )
2019-09-10 06:18:51 +00:00
- [Static Site Generators with Python ](#static-site-generators-with-python )
2019-09-08 02:38:30 +00:00
- [License ](#license )
- [About the author ](#about-the-author )
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
2019-05-21 21:53:54 +00:00
## Getting started
2019-09-05 14:07:49 +00:00
### (1) Add ssh deploy key
2019-05-21 21:53:54 +00:00
2019-09-05 14:07:49 +00:00
Generate your deploy key with the following command.
```sh
2019-09-05 15:50:59 +00:00
ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""
2019-09-05 14:07:49 +00:00
# You will get 2 files:
# gh-pages.pub (public key)
# gh-pages (private key)
```
Next, Go to **Repository Settings**
- Go to **Deploy Keys** and add your public key with the **Allow write access**
- Go to **Secrets** and add your private key as `ACTIONS_DEPLOY_KEY`
### (2) Create `.github/workflows/gh-pages.yml`
2019-09-09 01:42:09 +00:00
#### :star: Repository type - Project
2019-09-08 02:32:27 +00:00
2019-09-14 19:24:29 +00:00
An example workflow for Hugo.
2019-05-21 21:53:54 +00:00
2019-09-15 23:40:04 +00:00
- [peaceiris/actions-hugo: GitHub Actions for Hugo ](https://github.com/peaceiris/actions-hugo )
[![peaceiris/actions-hugo - GitHub ](https://gh-card.dev/repos/peaceiris/actions-hugo.svg?fullname )](https://github.com/peaceiris/actions-hugo)
![peaceiris/actions-hugo latest version ](https://img.shields.io/github/release/peaceiris/actions-hugo.svg?label=peaceiris%2Factions-hugo )
2019-05-26 21:25:57 +00:00
![peaceiris/actions-gh-pages latest version ](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg?label=peaceiris%2Factions-gh-pages )
2019-08-21 17:48:35 +00:00
```yaml
2019-08-21 20:02:54 +00:00
name: github pages
2019-08-21 17:48:35 +00:00
on:
push:
branches:
- master
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
2019-09-05 14:07:49 +00:00
2019-09-15 23:40:04 +00:00
- name: Setup Hugo
2019-09-17 19:26:28 +00:00
uses: peaceiris/actions-hugo@v2.1.0
2019-09-15 23:40:04 +00:00
with:
hugo-version: '0.58.2'
2019-09-14 19:24:29 +00:00
- name: Build
run: hugo --gc --minify --cleanDestinationDir
2019-09-05 14:07:49 +00:00
2019-09-14 19:24:29 +00:00
- name: Deploy
2019-09-15 16:11:55 +00:00
uses: peaceiris/actions-gh-pages@v2.3.1
2019-08-21 17:48:35 +00:00
env:
2019-09-05 14:07:49 +00:00
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
2019-08-21 17:48:35 +00:00
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
2019-05-21 21:53:54 +00:00
```
2019-09-08 02:32:27 +00:00
The above example is for [Project Pages sites]. (`< username > /< project_name > ` repository)
2019-09-09 01:42:09 +00:00
#### :star: Repository type - User and Organization
2019-09-08 02:32:27 +00:00
For [User and Organization Pages sites] (`< username > /< username > .github.io` repository),
we have to set `master` branch to `PUBLISH_BRANCH` .
```yaml
on:
push:
branches:
- source # default branch
PUBLISH_BRANCH: master # deploying branch
```
[Project Pages sites]: https://help.github.com/en/articles/user-organization-and-project-pages#project-pages-sites
[User and Organization Pages sites]: https://help.github.com/en/articles/user-organization-and-project-pages#user-and-organization-pages-sites
2019-09-05 14:07:49 +00:00
### Options
2019-09-09 01:42:09 +00:00
#### :star: Pull action image from Docker Hub
2019-09-05 14:07:49 +00:00
You can pull a public docker image from Docker Hub.
By pulling docker images, you can reduce the overall execution time of your workflow. In addition, `latest` tag is provided.
```diff
2019-09-15 16:11:55 +00:00
- uses: peaceiris/actions-gh-pages@v2.3.1
+ uses: docker://peaceiris/gh-pages:v2.3.1
2019-09-05 14:07:49 +00:00
```
- [peaceiris/gh-pages - Docker Hub ](https://hub.docker.com/r/peaceiris/gh-pages )
2019-09-09 01:42:09 +00:00
#### :star: `PERSONAL_TOKEN`
2019-09-07 19:24:03 +00:00
2019-09-08 02:32:27 +00:00
[Generate a personal access token (`repo`) ](https://github.com/settings/tokens ) and add it to Secrets as `PERSONAL_TOKEN` , it works as well as `ACTIONS_DEPLOY_KEY` .
2019-09-07 19:24:03 +00:00
```diff
- ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
```
2019-09-09 01:42:09 +00:00
#### :star: `GITHUB_TOKEN`
2019-09-05 14:07:49 +00:00
> **NOTES**: This action supports `GITHUB_TOKEN` but it has some problems to deploy to GitHub Pages. See #9
```diff
- ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
2019-09-14 18:49:20 +00:00
#### :star: Suppressing empty commits
By default, a commit will always be generated and pushed to the `PUBLISH_BRANCH` , even if nothing changed. If you want to suppress this behavior, set the optional parameter `emptyCommits` to `false` . cf. [Issue #21 ]
[Issue #21 ]: https://github.com/peaceiris/actions-gh-pages/issues/21
For example:
```yaml
- name: deploy
2019-09-15 16:11:55 +00:00
uses: peaceiris/actions-gh-pages@v2.3.1
2019-09-14 18:49:20 +00:00
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
with:
emptyCommits: false
```
2019-05-21 21:53:54 +00:00
2019-09-17 13:55:15 +00:00
## Tips and FAQ
### How to add `CNAME`
Most of the Static Site Generators support `CNAME` as a static file.
- [Use a Custom Domain | Hugo ](https://gohugo.io/hosting-and-deployment/hosting-on-github/#use-a-custom-domain )
- [Using the Static folder | GatsbyJS ](https://www.gatsbyjs.org/docs/static-folder/ )
The same may be said of other files (`.nojekyll`, `BingSiteAuth.xml` , `robots.txt` , etc.). It is better to manage those files by Static Site Generators.
2019-05-21 21:53:54 +00:00
2019-05-25 21:32:29 +00:00
## Examples
2019-09-10 06:18:51 +00:00
### Static Site Generators with Node.js
2019-09-12 17:20:10 +00:00
[hexo], [gitbook], [vuepress], [react-static], [gridsome], etc.
2019-09-10 06:18:51 +00:00
[hexo]: https://github.com/hexojs/hexo
[gitbook]: https://github.com/GitbookIO/gitbook
[vuepress]: https://github.com/vuejs/vuepress
[react-static]: https://github.com/react-static/react-static
[gridsome]: https://github.com/gridsome/gridsome
2019-09-10 06:46:19 +00:00
Premise: Dependencies are managed by `package.json` and `package-lock.json`
![peaceiris/actions-gh-pages latest version ](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg?label=peaceiris%2Factions-gh-pages )
2019-09-10 06:18:51 +00:00
```yaml
name: github pages
on:
push:
branches:
- master
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: build
uses: actions/setup-node@v1
with:
node-version: '10.16'
- run: |
npm install
npm run build
2019-09-10 06:27:07 +00:00
2019-09-10 06:18:51 +00:00
- name: deploy
2019-09-15 16:11:55 +00:00
uses: peaceiris/actions-gh-pages@v2.3.1
2019-09-10 06:18:51 +00:00
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
2019-09-12 12:15:05 +00:00
### Gatsby
An example for [Gatsby] (Gatsby.js) project with [gatsby-starter-blog]
[Gatsby]: https://github.com/gatsbyjs/gatsby
[gatsby-starter-blog]: https://github.com/gatsbyjs/gatsby-starter-blog
2019-09-12 17:20:10 +00:00
![peaceiris/actions-gh-pages latest version ](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg?label=peaceiris%2Factions-gh-pages )
2019-09-12 12:15:05 +00:00
```yaml
name: github pages
on:
push:
branches:
- master
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: setup node
uses: actions/setup-node@v1
with:
node-version: '10.16'
- name: install
run: npm install
- name: format
run: npm run format
- name: test
run: npm run test
- name: build
run: npm run build
- name: deploy
2019-09-15 16:11:55 +00:00
uses: peaceiris/actions-gh-pages@v2.3.1
2019-09-12 12:15:05 +00:00
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
2019-09-12 17:20:10 +00:00
### React and Next
An example for [Next.js] (React.js) project with [create-next-app]
- cf. [Deploying a Next.js app into GitHub Pages · zeit/next.js Wiki ](https://github.com/zeit/next.js/wiki/Deploying-a-Next.js-app-into-GitHub-Pages )
[Next.js]: https://github.com/zeit/next.js
[create-next-app]: https://nextjs.org/docs
![peaceiris/actions-gh-pages latest version ](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg?label=peaceiris%2Factions-gh-pages )
```yaml
name: github pages
on:
push:
branches:
- master
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: setup node
uses: actions/setup-node@v1
with:
node-version: '10.16'
- name: install
run: yarn install
- name: build
run: yarn build
- name: export
run: yarn export
- name: add nojekyll
run: touch ./out/.nojekyll
- name: deploy
2019-09-15 16:11:55 +00:00
uses: peaceiris/actions-gh-pages@v2.3.1
2019-09-12 17:20:10 +00:00
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./out
```
2019-09-12 11:12:48 +00:00
### Vue and Nuxt
An example for [Nuxt.js] (Vue.js) project with [create-nuxt-app]
2019-09-12 11:59:02 +00:00
- cf. [GitHub Pages Deployment - Nuxt.js ](https://nuxtjs.org/faq/github-pages )
2019-09-12 11:17:20 +00:00
2019-09-12 12:15:05 +00:00
[Nuxt.js]: https://github.com/nuxt/nuxt.js
2019-09-12 11:12:48 +00:00
[create-nuxt-app]: https://github.com/nuxt/create-nuxt-app
![peaceiris/actions-gh-pages latest version ](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg?label=peaceiris%2Factions-gh-pages )
```yaml
name: github pages
on:
push:
branches:
- master
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
- name: setup node
uses: actions/setup-node@v1
with:
node-version: '10.16'
- name: install
run: npm install
- name: test
run: npm test
- name: generate
run: npm run generate
- name: deploy
2019-09-15 16:11:55 +00:00
uses: peaceiris/actions-gh-pages@v2.3.1
2019-09-12 11:12:48 +00:00
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./dist
```
2019-09-10 06:18:51 +00:00
### Static Site Generators with Python
2019-09-10 06:11:43 +00:00
[pelican], [MkDocs], [sphinx], etc.
[pelican]: https://github.com/getpelican/pelican
[MkDocs]: https://github.com/mkdocs/mkdocs
[sphinx]: https://github.com/sphinx-doc/sphinx
2019-05-25 21:32:29 +00:00
2019-09-10 06:46:19 +00:00
Premise: Dependencies are managed by `requirements.txt`
2019-05-26 21:25:57 +00:00
![peaceiris/actions-gh-pages latest version ](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg?label=peaceiris%2Factions-gh-pages )
2019-09-05 14:07:49 +00:00
```yaml
name: github pages
on:
push:
branches:
- master
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: '3.6'
architecture: 'x64'
- name: Install dependencies
run: |
pip install --upgrade pip
pip install -r ./requirements.txt
2019-09-10 06:46:19 +00:00
- name: Build
2019-09-05 14:07:49 +00:00
run: mkdocs build
2019-09-10 06:46:19 +00:00
- name: Deploy
2019-09-15 16:11:55 +00:00
uses: peaceiris/actions-gh-pages@v2.3.1
2019-09-05 14:07:49 +00:00
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./site
2019-05-25 21:32:29 +00:00
```
2019-05-21 21:53:54 +00:00
## License
2019-09-02 09:35:05 +00:00
- [MIT License - peaceiris/actions-gh-pages]
2019-05-21 21:53:54 +00:00
[MIT License - peaceiris/actions-gh-pages]: https://github.com/peaceiris/actions-gh-pages/blob/master/LICENSE
2019-05-22 12:11:01 +00:00
## About the author
- [peaceiris's homepage ](https://peaceiris.com/ )