Compare commits

...

27 Commits

Author SHA1 Message Date
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
5 changed files with 324 additions and 50 deletions

View File

@@ -1,10 +1,6 @@
name: docker image ci
on:
push:
branches:
- master
- 'release-v*'
on: push
jobs:
test:
@@ -20,16 +16,6 @@ jobs:
docker build . --file Dockerfile --tag ${DOCKER_IMAGE} ||
(echo -e "\e[31m[${GITHUB_WORKFLOW}] failed to build\e[m" && exit 1)
# - name: push latest image
# if: endsWith(github.ref, 'master')
# env:
# DOCKER_IMAGE: docker.pkg.github.com/${{ github.repository }}/action:latest
# PKG_GITHUB_TOKEN: ${{ secrets.PKG_GITHUB_TOKEN }}
# run: |
# echo ${PKG_GITHUB_TOKEN} | docker login docker.pkg.github.com -u ${GITHUB_ACTOR} --password-stdin &&
# docker push ${DOCKER_IMAGE} &&
# docker logout
shellcheck:
runs-on: ubuntu-18.04
steps:

View File

@@ -4,8 +4,7 @@ RUN apk add --no-cache \
bash \
git \
openssh-client \
ca-certificates && \
rm -rf /var/lib/apt/lists/*
ca-certificates
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]

326
README.md
View File

@@ -14,6 +14,31 @@ 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)
- [:star: Repository type - Project](#star-repository-type---project)
- [:star: Repository type - User and Organization](#star-repository-type---user-and-organization)
- [Options](#options)
- [: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)
- [:star: Suppressing empty commits](#star-suppressing-empty-commits)
- [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
@@ -23,7 +48,7 @@ A GitHub Action to deploy your static site to GitHub Pages with [Static Site Gen
Generate your deploy key with the following command.
```sh
ssh-keygen -t rsa -b 4096 -C "your@email.com" -f gh-pages -N ""
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)
@@ -36,11 +61,132 @@ Next, Go to **Repository Settings**
### (2) Create `.github/workflows/gh-pages.yml`
An example yaml file with Hugo action.
#### :star: Repository type - Project
- [peaceiris/actions-hugo: GitHub Actions for Hugo extended](https://github.com/peaceiris/actions-hugo)
An example workflow for Hugo.
![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: Install Hugo
env:
HUGO_VERSION: '0.58.2'
run: |
mkdir /tmp/hugo && cd /tmp/hugo
curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-64bit.tar.gz | \
tar -xz && \
sudo mv ./hugo /usr/local/bin/
- name: Build
run: hugo --gc --minify --cleanDestinationDir
- name: Deploy
uses: peaceiris/actions-gh-pages@v2.3.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
The above example is for [Project Pages sites]. (`<username>/<project_name>` repository)
#### :star: 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
### Options
#### :star: 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.3.0
+ uses: docker://peaceiris/gh-pages:v2.3.0
```
- [peaceiris/gh-pages - Docker Hub](https://hub.docker.com/r/peaceiris/gh-pages)
#### :star: `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 }}
```
#### :star: `GITHUB_TOKEN`
> **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 }}
```
#### :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
uses: peaceiris/actions-gh-pages@v2.3.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
with:
emptyCommits: false
```
## Examples
### Static Site Generators with Node.js
[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-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)
```yaml
@@ -58,53 +204,175 @@ jobs:
- uses: actions/checkout@master
- name: build
uses: peaceiris/actions-hugo@v0.58.0
uses: actions/setup-node@v1
with:
args: --gc --minify --cleanDestinationDir
node-version: '10.16'
- run: |
npm install
npm run build
- name: deploy
uses: peaceiris/actions-gh-pages@v2.1.0
uses: peaceiris/actions-gh-pages@v2.3.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
### Options
### Gatsby
#### Pull action image from Docker Hub
An example for [Gatsby] (Gatsby.js) project with [gatsby-starter-blog]
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.
[Gatsby]: https://github.com/gatsbyjs/gatsby
[gatsby-starter-blog]: https://github.com/gatsbyjs/gatsby-starter-blog
```diff
- uses: peaceiris/actions-gh-pages@v2.1.0
+ uses: docker://peaceiris/gh-pages:v2.1.0
![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.3.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./public
```
- [peaceiris/gh-pages - Docker Hub](https://hub.docker.com/r/peaceiris/gh-pages)
### React and Next
```diff
- uses: peaceiris/actions-hugo@v0.58.0
+ uses: docker://peaceiris/gha-hugo:v0.58.0
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.3.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: ./out
```
- [peaceiris/gha-hugo - Docker Hub](https://hub.docker.com/r/peaceiris/gha-hugo)
### Vue and Nuxt
### `GITHUB_TOKEN`
An example for [Nuxt.js] (Vue.js) project with [create-nuxt-app]
> **NOTES**: This action supports `GITHUB_TOKEN` but it has some problems to deploy to GitHub Pages. See #9
- cf. [GitHub Pages Deployment - Nuxt.js](https://nuxtjs.org/faq/github-pages)
```diff
- ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
[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.3.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.
## Examples
[pelican]: https://github.com/getpelican/pelican
[MkDocs]: https://github.com/mkdocs/mkdocs
[sphinx]: https://github.com/sphinx-doc/sphinx
### MkDocs
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)
@@ -133,11 +401,11 @@ jobs:
pip install --upgrade pip
pip install -r ./requirements.txt
- name: Build with MkDocs
- name: Build
run: mkdocs build
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v2.1.0
- name: Deploy
uses: peaceiris/actions-gh-pages@v2.3.0
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
PUBLISH_BRANCH: gh-pages

View File

@@ -7,3 +7,8 @@ runs:
branding:
icon: 'upload-cloud'
color: 'blue'
inputs:
emptyCommits:
description: 'If empty commits should be made to the publication branch'
required: false
default: 'true'

View File

@@ -23,14 +23,20 @@ if [ -n "${ACTIONS_DEPLOY_KEY}" ]; then
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"
remote_repo="https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
remote_repo="https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
else
print_error "not found ACTIONS_DEPLOY_KEY or GITHUB_TOKEN"
print_error "not found ACTIONS_DEPLOY_KEY, PERSONAL_TOKEN, or GITHUB_TOKEN"
exit 1
fi
@@ -49,7 +55,7 @@ remote_branch="${PUBLISH_BRANCH}"
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}"
git rm -r '*'
git rm -r --ignore-unmatch '*'
find "${GITHUB_WORKSPACE}/${PUBLISH_DIR}" -maxdepth 1 | \
tail -n +2 | \
xargs -I % cp -rf % "${local_dir}/"
@@ -65,6 +71,16 @@ git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
git remote rm origin || true
git remote add origin "${remote_repo}"
git add --all
git commit --allow-empty -m "Automated deployment: $(date -u) ${GITHUB_SHA}"
print_info "Allowing empty commits: ${INPUT_EMPTYCOMMITS}"
COMMIT_MESSAGE="Automated deployment: $(date -u) ${GITHUB_SHA}"
if [[ ${INPUT_EMPTYCOMMITS} == "true" ]]; then
git commit --allow-empty -m "${COMMIT_MESSAGE}"
else
git commit -m "${COMMIT_MESSAGE}" || \
print_info "No changes detected, skipping deployment" && \
exit 0
fi
git push origin "${remote_branch}"
print_info "${GITHUB_SHA} was successfully deployed"