Compare commits

..

62 Commits

Author SHA1 Message Date
Shohei Ueda
380b190669 fix: avoid #29 for keepFiles option (#34)
Some checks failed
docker image ci / test (push) Has been cancelled
docker image ci / shellcheck (push) Has been cancelled
docker image ci / hadolint (push) Has been cancelled
* fix: avoid #29
* docs: update TOC
* docs: update tag to v2.4.0
2019-09-25 03:00:25 +09:00
Roman Hotsiy
8eedda6921 feat: new option keepFiles (#33) 2019-09-25 02:41:21 +09:00
peaceiris
13d694636e docs: Add submodules to actions/checkout
https://github.com/peaceiris/actions-hugo/issues/42
2019-09-24 07:29:34 +09:00
peaceiris
551961e807 gha: remove paths 2019-09-23 14:36:00 +09:00
peaceiris
3e09c28a79 docs: update tag 2019-09-23 14:07:50 +09:00
Shohei Ueda
8f168fea5a fix: Fixes for docker hub image (#28)
Some checks failed
docker image ci / test (push) Has been cancelled
docker image ci / shellcheck (push) Has been cancelled
docker image ci / hadolint (push) Has been cancelled
* fix: Fixes for docker hub image (INPUT_EMPTYCOMMITS false condition)
* fix: Add skip function

Close #27
Close #31 
Keep open #29 

* gha: Add fetch-depth 1 to actions/checkout
* gha: Add pull_request trigger, Close #32
2019-09-23 14:00:10 +09:00
peaceiris
5a72c9206d docs: update 2019-09-22 16:15:46 +09:00
peaceiris
b8dd2848eb gha: Add paths trigger 2019-09-22 16:14:23 +09:00
peaceiris
4530dcd167 docs: Add link to issue #9
https://github.com/peaceiris/actions-gh-pages/issues/31
2019-09-22 14:03:03 +09:00
Shohei Ueda
74f032c7e9 docs: Add log images (#30)
* docs: Add log images
* docs: replace star emoji
2019-09-22 13:06:23 +09:00
peaceiris
0713c6cb9c docs: update peaceiris/actions-hugo@v2.2.0 2019-09-21 10:48:31 +09:00
peaceiris
c647ffeac6 style: reindent 2019-09-20 14:59:10 +09:00
peaceiris
b16172a44d docs: Add section about .nojekyll #26 2019-09-20 09:07:35 +09:00
peaceiris
4f0ad674b7 docs: update peaceiris/actions-hugo@v2.1.0 2019-09-18 04:26:28 +09:00
peaceiris
16fae5a6db docs: Add Tips and FAQ section for #25 2019-09-17 22:55:15 +09:00
peaceiris
e46ccd0122 docs: Add peaceiris/actions-hugo@v2.0.0 2019-09-16 08:40:04 +09:00
peaceiris
087a904156 docs: Upgrade peaceiris/actions-gh-pages to v2.3.1 2019-09-16 01:11:55 +09:00
blue-jam
47a6d63ea8 Fix: "git rm" fails when publish branch is empty (#24)
Some checks failed
docker image ci / test (push) Has been cancelled
docker image ci / shellcheck (push) Has been cancelled
docker image ci / hadolint (push) Has been cancelled
When a publish branch exists and it has no files, `git rm -r '*'` fails with

```
fatal: pathspec '*' did not match any files
```

`--ignore-unmatch` option let git exit with a zero status in this case.

Reference: https://git-scm.com/docs/git-rm#Documentation/git-rm.txt---ignore-unmatch
2019-09-16 01:06:45 +09:00
peaceiris
201f9af234 docs: Update Hugo workflow example
- Update Hugo workflow example (Install Hugo with downloading binary)
- Remove `peaceiris/actions-hugo` from README

Close #23
2019-09-15 04:24:29 +09:00
peaceiris
d3bd43b617 docs: Update action tag to v2.3.0
Some checks failed
docker image ci / test (push) Has been cancelled
docker image ci / shellcheck (push) Has been cancelled
docker image ci / hadolint (push) Has been cancelled
2019-09-15 03:54:18 +09:00
James McCollum
241ef9fea0 feat: Add emptyCommits option (#22)
* feat: Add emptyCommits option (@kingofzeal)
* docs: Update README about emptyCommits option (@kingofzeal)
* gha: Update trigger of docker image ci workflow (@peaceiris)

Close #21
2019-09-15 03:49:20 +09:00
peaceiris
dea149a296 docs: Add example for Next project (React) 2019-09-13 02:20:10 +09:00
peaceiris
6f22f8bab3 docs: Remove .nojekyll
`npm run generate` creates `dist/.nojekyll` automatically
2019-09-13 00:46:04 +09:00
peaceiris
b6f9d57b6e docs: Add Gatsby example 2019-09-12 21:15:05 +09:00
peaceiris
926fd81d28 docs: Add link to GitHub Pages Deployment - Nuxt.js 2019-09-12 20:59:02 +09:00
peaceiris
c2b05426eb docs: Add premise for Nuxt project about .nojekyll 2019-09-12 20:17:20 +09:00
peaceiris
a938c00ed3 docs: update toc 2019-09-12 20:13:41 +09:00
peaceiris
6025194d82 docs: add example for Nuxt (Vue) 2019-09-12 20:12:48 +09:00
peaceiris
6bbc45593f docs: add links to next.js and nuxt.js 2019-09-10 16:10:26 +09:00
peaceiris
423f0009fd docs: add premise for dependencies management of Node.js and Python project 2019-09-10 15:46:19 +09:00
peaceiris
142a3920a3 style(readme): add new line 2019-09-10 15:27:07 +09:00
peaceiris
8cc357e55e docs: add example YAML workflow setting filefor Static Site Generators with Node.js 2019-09-10 15:18:51 +09:00
peaceiris
7115ce79d6 docs: add Static Site Generators in Python 2019-09-10 15:11:43 +09:00
peaceiris
00ca533aaa add: github repository card of peaceiris/actions-hugo 2019-09-10 01:26:56 +09:00
peaceiris
1846d9c611 add: emoji to h4 heading 2019-09-09 10:42:09 +09:00
peaceiris
5ef51a859a upgrade: peaceiris/actions-hugo to v0.58.1 2019-09-08 18:09:06 +09:00
peaceiris
27f7912ac1 upgrade: peaceiris/actions-hugo to v0.58.1 2019-09-08 18:07:50 +09:00
peaceiris
acef980b83 remove: rm command to cleanup apt cache 2019-09-08 11:51:04 +09:00
peaceiris
e3cf4a5678 docs: ✏️ add Table of Contents using doctoc 2019-09-08 11:38:39 +09:00
peaceiris
844594e15d docs: ✏️ add explanation for User and Organization Pages sites
Closes: #15
2019-09-08 11:32:59 +09:00
peaceiris
568c603f29 readme: update action tag for v2.2.0 2019-09-08 04:28:37 +09:00
Shohei Ueda
b263205b1b Release v2.2.0 (#19)
* try to fix: remote repo URL for GITHUB_TOKEN

cf. https://developer.github.com/apps/building-github-apps/authenticating-with-github-apps/#http-based-git-access-by-an-installation

* add: PERSONAL_TOKEN
* update: readme about PERSONAL_TOKEN
2019-09-08 04:24:03 +09:00
peaceiris
8fd3a55a6f fix: readme 2019-09-06 01:16:44 +09:00
peaceiris
61579670d5 enhance: readme 2019-09-06 00:50:59 +09:00
peaceiris
809601eb1f update: readme from v2.0.0 to v2.1.0 2019-09-06 00:33:20 +09:00
Shohei Ueda
45f5817ce0 Release v2.1.0 (#14)
* change: base docker image from ubuntu:18.04 to alpine:3.10.2
* update: .hadolint.yaml to ignore DL3018
2019-09-06 00:31:34 +09:00
peaceiris
713b37219b update: .dockerignore 2019-09-05 23:38:50 +09:00
peaceiris
7e5e720d90 fix: action.yml name 2019-09-05 23:10:30 +09:00
Shohei Ueda
9dbd791001 Release v2.0.0 (#10)
Changes for peaceiris/actions-gh-pages

* update: yaml example of GitHub Actions v2 settings for MkDocs, close #8
* revert: support ACTIONS_DEPLOY_KEY (ssh deploy) again
* upgrade: Hugo to v0.58.0 at example yaml
* remove: steps if statement from example yaml, close #12

Changes for this repository

* gha: add lint job (shellcheck and hadolint)
* gha: remove tag filter
* gha: remove steps if statement, close #12
* gha: add action.yml
* fix: FUNDING.yml
2019-09-05 23:07:49 +09:00
peaceiris
500440b181 fix: FUNDING.yml 2019-09-04 22:17:54 +09:00
peaceiris
0e24c54186 add: Docker Hub Build Status badge 2019-09-02 19:23:36 +09:00
peaceiris
3a8415028f add: master branch to GitHub Actions filter 2019-09-02 18:37:30 +09:00
peaceiris
e43f914d03 fix: readme 2019-09-02 18:35:05 +09:00
peaceiris
77991bbc93 add: release docker image with latest tag 2019-09-02 18:28:50 +09:00
Michael Smith
76d9ea1451 Fetch remote before testing whether the publish branch exists (#7)
This re-uses the existing branch rather than always overwriting it with
a new branch with a single commit.

Signed-off-by: Michael Smith <michael.smith@puppet.com>
2019-09-02 17:47:55 +09:00
peaceiris
bb5d194848 rename: example workflow name 2019-08-22 05:02:54 +09:00
peaceiris
82f293b20d rename: workflow name 2019-08-22 04:58:58 +09:00
peaceiris
da8d0ec496 add: GitHub Actions badge 2019-08-22 04:53:47 +09:00
peaceiris
141841e4cd add: docker-image-ci workflow 2019-08-22 04:49:43 +09:00
peaceiris
d357978789 remove: GitHub Actions v1 workflow overview images 2019-08-22 03:41:21 +09:00
peaceiris
6492b522ce migrate: GitHub Actions v2 YAML workflow setting example with hugo 2019-08-22 02:48:35 +09:00
peaceiris
5b4ace2ae6 remove: GitHub Actions v1 workflow setting 2019-08-22 02:45:13 +09:00
20 changed files with 588 additions and 102 deletions

View File

@@ -1,5 +1,7 @@
.git
.github
.hadolint.yaml
LICENSE
README.md
action.yml
images

3
.github/FUNDING.yml vendored
View File

@@ -1,7 +1,8 @@
# These are supported funding model platforms
github: peaceiris
# github: peaceiris
patreon: peaceiris
issuehunt: peaceiris
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel

View File

@@ -1,9 +0,0 @@
workflow "Main workflow" {
on = "push"
resolves = ["docker-build"]
}
action "docker-build" {
uses = "actions/docker/cli@master"
args = "build -t peaceiris/actions-gh-deploy ."
}

42
.github/workflows/docker-image-ci.yml vendored Normal file
View File

@@ -0,0 +1,42 @@
name: docker image ci
on:
pull_request:
types: [opened, synchronize]
push:
jobs:
test:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
- name: build
env:
DOCKER_IMAGE: docker.pkg.github.com/${{ github.repository }}/action:latest
run: |
docker build . --file Dockerfile --tag ${DOCKER_IMAGE} ||
(echo -e "\e[31m[${GITHUB_WORKFLOW}] failed to build\e[m" && exit 1)
shellcheck:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
- name: shellcheck
run: shellcheck ./entrypoint.sh
hadolint:
runs-on: macOS-10.14
steps:
- uses: actions/checkout@master
with:
fetch-depth: 1
- name: hadolint
run: |
brew install hadolint
hadolint ./Dockerfile

2
.hadolint.yaml Normal file
View File

@@ -0,0 +1,2 @@
ignored:
- DL3018

View File

@@ -1,17 +1,10 @@
FROM alpine:3.9
LABEL "com.github.actions.name"="Deploy to GitHub Pages for Static Site Generator"
LABEL "com.github.actions.description"="A GitHub Action to deploy your static site to GitHub Pages with Static Site Generator"
LABEL "com.github.actions.icon"="upload-cloud"
LABEL "com.github.actions.color"="blue"
LABEL "repository"="https://github.com/peaceiris/actions-gh-pages"
LABEL "homepage"="https://github.com/peaceiris/actions-gh-pages"
LABEL "maintainer"="peaceiris"
FROM alpine:3.10.2
RUN apk add --no-cache \
bash \
git \
openssh-client
openssh-client \
ca-certificates
ADD entrypoint.sh /entrypoint.sh
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]

502
README.md
View File

@@ -1,6 +1,8 @@
[![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)
[![GitHub Actions status](https://github.com/peaceiris/actions-gh-pages/workflows/docker%20image%20ci/badge.svg)](https://github.com/peaceiris/actions-gh-pages/actions)
[![Docker Hub Build Status](https://img.shields.io/docker/cloud/build/peaceiris/gh-pages.svg)](https://hub.docker.com/r/peaceiris/gh-pages)
<img width="400" alt="GitHub Actions for deploying to GitHub Pages with Static Site Generators" src="./images/ogp.svg">
@@ -12,106 +14,478 @@ A GitHub Action to deploy your static site to GitHub Pages with [Static Site Gen
[Static Site Generators]: https://www.staticgen.com/
<!-- 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)
- [⭐️ Repository type - Project](#%EF%B8%8F-repository-type---project)
- [⭐️ Repository type - User and Organization](#%EF%B8%8F-repository-type---user-and-organization)
- [Options](#options)
- [⭐️ Pull action image from Docker Hub](#%EF%B8%8F-pull-action-image-from-docker-hub)
- [⭐️ `PERSONAL_TOKEN`](#%EF%B8%8F-personal_token)
- [⭐️ `GITHUB_TOKEN`](#%EF%B8%8F-github_token)
- [⭐️ Suppressing empty commits](#%EF%B8%8F-suppressing-empty-commits)
- [⭐️ Keeping existing files](#%EF%B8%8F-keeping-existing-files)
- [Tips and FAQ](#tips-and-faq)
- [How to add `CNAME`](#how-to-add-cname)
- [Deployment completed but you cannot read](#deployment-completed-but-you-cannot-read)
- [Examples](#examples)
- [Static Site Generators with Node.js](#static-site-generators-with-nodejs)
- [Gatsby](#gatsby)
- [React and Next](#react-and-next)
- [Vue and Nuxt](#vue-and-nuxt)
- [Static Site Generators with Python](#static-site-generators-with-python)
- [License](#license)
- [About the author](#about-the-author)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
## Getting started
### Create `.github/main.workflow`
### (1) Add ssh deploy key
An example with Hugo action.
Generate your deploy key with the following command.
- [peaceiris/actions-hugo: GitHub Actions for Hugo extended](https://github.com/peaceiris/actions-hugo)
```sh
ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""
# 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`
| Add your public key | Success |
|---|---|
| ![](./images/deploy-keys-1.jpg) | ![](./images/deploy-keys-2.jpg) |
| Add your private key | Success |
|---|---|
| ![](./images/secrets-1.jpg) | ![](./images/secrets-2.jpg) |
### (2) Create `.github/workflows/gh-pages.yml`
#### ⭐️ Repository type - Project
An example workflow for Hugo.
- [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)
![peaceiris/actions-gh-pages latest version](https://img.shields.io/github/release/peaceiris/actions-gh-pages.svg?label=peaceiris%2Factions-gh-pages)
```hcl
workflow "GitHub Pages" {
on = "push"
resolves = ["deploy"]
}
```yaml
name: github pages
action "is-branch-master" {
uses = "actions/bin/filter@master"
args = "branch master"
}
on:
push:
branches:
- master
action "is-not-branch-deleted" {
uses = "actions/bin/filter@master"
args = "not deleted"
}
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
# with:
# submodules: true
action "build" {
needs = ["is-branch-master", "is-not-branch-deleted"]
uses = "peaceiris/actions-hugo@v0.56.3"
args = ["--gc", "--minify", "--cleanDestinationDir"]
}
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2.2.0
with:
hugo-version: '0.58.3'
action "deploy" {
needs = "build"
uses = "peaceiris/actions-gh-pages@v1.1.0"
env = {
PUBLISH_DIR = "./public"
PUBLISH_BRANCH = "gh-pages"
}
secrets = ["GITHUB_TOKEN"]
}
- name: Build
run: hugo --gc --minify --cleanDestinationDir
- name: Deploy
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
| Workflow overview | Actions log |
The above example is for [Project Pages sites]. (`<username>/<project_name>` repository)
| Actions log overview | Build step log |
|---|---|
| ![GitHub Actions for deploying to GitHub Pages Workflow overview](./images/workflow-1.jpg) | ![GitHub Actions for deploying to GitHub Pages Actions log](./images/workflow-2.jpg) |
| ![](./images/log1.jpg) | ![](./images/log2.jpg) |
| Deploy step log | GitHub Pages log |
|---|---|
| ![](./images/log3.jpg) | ![](./images/log4.jpg) |
#### ⭐️ Repository type - User and Organization
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
![Change default branch](./images/default-branch.jpg)
### Options
#### ⭐️ Pull action image from Docker Hub
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
- uses: peaceiris/actions-gh-pages@v2.4.0
+ uses: docker://peaceiris/gh-pages:v2.4.0
```
- [peaceiris/gh-pages - Docker Hub](https://hub.docker.com/r/peaceiris/gh-pages)
#### ⭐️ `PERSONAL_TOKEN`
[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`.
```diff
- ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
```
#### ⭐️ `GITHUB_TOKEN`
> **NOTES**: Do not use `GITHUB_TOKEN`.
>
> This action supports `GITHUB_TOKEN` but it has some problems to deploy to GitHub Pages. GitHub team is investigating that. See [Issue #9]
[Issue #9]: https://github.com/peaceiris/actions-gh-pages/issues/9
```diff
- ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
#### ⭐️ 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
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
with:
emptyCommits: false
```
#### ⭐️ Keeping existing files
By default, existing files in the publish branch are removed before adding the ones from publish dir. If you want the action to add new files but leave existing ones untouched, set the optional parameter `keepFiles` to `true`.
For example:
```yaml
- name: Deploy
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
with:
keepFiles: true
```
## 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.
### Deployment completed but you cannot read
Does your `PUBLISH_DIR` contain files or directories that name starts with an underscore? (`_modules`, `_sources` and `_next`, etc.)
GitHub Pages does not read those by default.
Please add `.nojekyll` file to `PUBLISH_DIR`.
- [Bypassing Jekyll on GitHub Pages - The GitHub Blog](https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/)
> It is now possible to completely bypass Jekyll processing on GitHub Pages by creating a file named `.nojekyll` in the root of your pages repo and pushing it to GitHub. This should only be necessary if your site uses files or directories that start with underscores since Jekyll considers these to be special resources and does not copy them to the final site.
## Examples
### MkDocs
### Static Site Generators with Node.js
- [peaceiris/actions-pipenv: GitHub Actions for pipenv](https://github.com/peaceiris/actions-pipenv)
- [main.workflow - peaceiris/mkdocs-material-boilerplate](https://github.com/peaceiris/mkdocs-material-boilerplate/blob/master/.github/main.workflow)
[hexo], [gitbook], [vuepress], [react-static], [gridsome], etc.
[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
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)
```hcl
workflow "MkDocs workflow" {
on = "push"
resolves = ["deploy"]
}
```yaml
name: github pages
action "branch-filter" {
uses = "actions/bin/filter@master"
args = "branch master"
}
on:
push:
branches:
- master
action "pipenv-sync" {
needs = ["branch-filter"]
uses = "peaceiris/actions-pipenv@3.6"
args = "sync"
}
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@master
action "mkdocs-build" {
needs = ["pipenv-sync"]
uses = "peaceiris/actions-pipenv@3.6"
args = ["run", "mkdocs", "build", "--config-file", "./mkdocs-sample.yml"]
}
- name: build
uses: actions/setup-node@v1
with:
node-version: '10.16'
- run: |
npm install
npm run build
action "deploy" {
needs = ["mkdocs-build"]
uses = "peaceiris/actions-gh-pages@v1.1.0"
env = {
PUBLISH_DIR = "./site"
PUBLISH_BRANCH = "gh-pages"
}
secrets = ["GITHUB_TOKEN"]
}
- name: deploy
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
### 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
![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: format
run: npm run format
- name: test
run: npm run test
- name: build
run: npm run build
- name: deploy
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
### 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
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./out
```
### Vue and Nuxt
An example for [Nuxt.js] (Vue.js) project with [create-nuxt-app]
- cf. [GitHub Pages Deployment - Nuxt.js](https://nuxtjs.org/faq/github-pages)
[Nuxt.js]: https://github.com/nuxt/nuxt.js
[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
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./dist
```
### Static Site Generators with Python
[pelican], [MkDocs], [sphinx], etc.
[pelican]: https://github.com/getpelican/pelican
[MkDocs]: https://github.com/mkdocs/mkdocs
[sphinx]: https://github.com/sphinx-doc/sphinx
Premise: Dependencies are managed by `requirements.txt`
![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@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
- name: Build
run: mkdocs build
- name: Deploy
uses: peaceiris/actions-gh-pages@v2.4.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./site
```
## License
[MIT License - peaceiris/actions-gh-pages]
- [MIT License - peaceiris/actions-gh-pages]
[MIT License - peaceiris/actions-gh-pages]: https://github.com/peaceiris/actions-gh-pages/blob/master/LICENSE

18
action.yml Normal file
View File

@@ -0,0 +1,18 @@
name: 'Deploy action for GitHub Pages'
description: 'A GitHub Action to deploy your static site to GitHub Pages with Static Site Generator'
author: 'peaceiris'
runs:
using: 'docker'
image: 'Dockerfile'
branding:
icon: 'upload-cloud'
color: 'blue'
inputs:
emptyCommits:
description: 'If empty commits should be made to the publication branch'
required: false
default: 'true'
keepFiles:
description: 'If existing files in the publish branch should be not removed before deploying'
required: false
default: 'false'

View File

@@ -1,33 +1,96 @@
#!/bin/sh
#!/bin/bash
set -e
# set -ex
function print_error() {
echo -e "\e[31mERROR: ${1}\e[m"
}
function print_info() {
echo -e "\e[36mINFO: ${1}\e[m"
}
function skip() {
print_info "No changes detected, skipping deployment"
exit 0
}
# check values
if [ -z "${GITHUB_TOKEN}" ]; then
echo "error: not found GITHUB_TOKEN"
if [ -n "${ACTIONS_DEPLOY_KEY}" ]; then
print_info "setup with ACTIONS_DEPLOY_KEY"
mkdir /root/.ssh
ssh-keyscan -t rsa github.com > /root/.ssh/known_hosts
echo "${ACTIONS_DEPLOY_KEY}" > /root/.ssh/id_rsa
chmod 400 /root/.ssh/id_rsa
remote_repo="git@github.com:${GITHUB_REPOSITORY}.git"
elif [ -n "${PERSONAL_TOKEN}" ]; then
print_info "setup with PERSONAL_TOKEN"
remote_repo="https://x-access-token:${PERSONAL_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
elif [ -n "${GITHUB_TOKEN}" ]; then
print_info "setup with GITHUB_TOKEN"
print_error "Do not use GITHUB_TOKEN, See #9"
remote_repo="https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
else
print_error "not found ACTIONS_DEPLOY_KEY, PERSONAL_TOKEN, or GITHUB_TOKEN"
exit 1
fi
if [ -z "${PUBLISH_BRANCH}" ]; then
echo "error: not found PUBLISH_BRANCH"
print_error "not found PUBLISH_BRANCH"
exit 1
fi
if [ -z "${PUBLISH_DIR}" ]; then
echo "error: not found PUBLISH_DIR"
print_error "not found PUBLISH_DIR"
exit 1
fi
cd "${PUBLISH_DIR}" || exit 1
# initialize git
remote_repo="https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
remote_branch="${PUBLISH_BRANCH}"
git init
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
git remote add origin "${remote_repo}"
local_dir="${HOME}/$(tr -cd 'a-f0-9' < /dev/urandom | head -c 32)"
if git clone --depth=1 --single-branch --branch "${remote_branch}" "${remote_repo}" "${local_dir}"; then
cd "${local_dir}"
if [[ ${INPUT_KEEPFILES} == "true" ]]; then
print_info "Keeping existing files: ${INPUT_KEEPFILES}"
else
git rm -r --ignore-unmatch '*'
fi
find "${GITHUB_WORKSPACE}/${PUBLISH_DIR}" -maxdepth 1 | \
tail -n +2 | \
xargs -I % cp -rf % "${local_dir}/"
else
cd "${PUBLISH_DIR}"
git init
git checkout --orphan "${remote_branch}"
fi
# push to publishing branch
git checkout "${remote_branch}" || git checkout --orphan "${remote_branch}"
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
git remote rm origin || true
git remote add origin "${remote_repo}"
git add --all
timestamp=$(date -u)
git commit -m "Automated deployment: ${timestamp} ${GITHUB_SHA}"
git push origin "${remote_branch}" --force
print_info "Allowing empty commits: ${INPUT_EMPTYCOMMITS}"
COMMIT_MESSAGE="Automated deployment: $(date -u) ${GITHUB_SHA}"
if [[ ${INPUT_EMPTYCOMMITS} == "false" ]]; then
git commit -m "${COMMIT_MESSAGE}" || skip
else
git commit --allow-empty -m "${COMMIT_MESSAGE}"
fi
git push origin "${remote_branch}"
print_info "${GITHUB_SHA} was successfully deployed"

BIN
images/default-branch.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
images/deploy-keys-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

BIN
images/deploy-keys-2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
images/log1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
images/log2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
images/log3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

BIN
images/log4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
images/secrets-1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
images/secrets-2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB