Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e5e720d90 | ||
|
|
9dbd791001 | ||
|
|
500440b181 | ||
|
|
0e24c54186 | ||
|
|
3a8415028f | ||
|
|
e43f914d03 | ||
|
|
77991bbc93 | ||
|
|
76d9ea1451 | ||
|
|
bb5d194848 | ||
|
|
82f293b20d | ||
|
|
da8d0ec496 | ||
|
|
141841e4cd | ||
|
|
d357978789 | ||
|
|
6492b522ce | ||
|
|
5b4ace2ae6 | ||
|
|
5af287f677 | ||
|
|
1f78e2b780 | ||
|
|
a18ce52dfa | ||
|
|
5ff5415c45 | ||
|
|
4ceb783693 | ||
|
|
95773e0623 | ||
|
|
f2d1faaacf | ||
|
|
9bfcfe68ee | ||
|
|
6009c110fc | ||
|
|
87dceaf2d6 | ||
|
|
3400745573 | ||
|
|
7c2aa28333 |
9
.github/FUNDING.yml
vendored
Normal file
9
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
# 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
|
||||
custom: # Replace with a single custom sponsorship URL
|
||||
9
.github/main.workflow
vendored
9
.github/main.workflow
vendored
@@ -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 ."
|
||||
}
|
||||
47
.github/workflows/docker-image-ci.yml
vendored
Normal file
47
.github/workflows/docker-image-ci.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
name: docker image ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- 'release-v*'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
|
||||
- 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)
|
||||
|
||||
# - 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:
|
||||
- uses: actions/checkout@master
|
||||
- name: shellcheck
|
||||
run: shellcheck ./entrypoint.sh
|
||||
|
||||
hadolint:
|
||||
runs-on: macOS-10.14
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: hadolint
|
||||
run: |
|
||||
brew install hadolint
|
||||
hadolint ./Dockerfile
|
||||
2
.hadolint.yaml
Normal file
2
.hadolint.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
ignored:
|
||||
- DL3008
|
||||
19
Dockerfile
19
Dockerfile
@@ -1,17 +1,10 @@
|
||||
FROM alpine:3.9
|
||||
FROM ubuntu:18.04
|
||||
|
||||
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"
|
||||
|
||||
RUN apk add --no-cache \
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
git \
|
||||
openssh-client
|
||||
openssh-client \
|
||||
ca-certificates && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ADD entrypoint.sh /entrypoint.sh
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||
|
||||
154
README.md
154
README.md
@@ -1,6 +1,8 @@
|
||||
[](https://github.com/peaceiris/actions-gh-pages/blob/master/LICENSE)
|
||||
[](https://github.com/peaceiris/actions-gh-pages/releases/latest)
|
||||
[](https://github.com/peaceiris/actions-gh-pages/releases)
|
||||
[](https://github.com/peaceiris/actions-gh-pages/actions)
|
||||
[](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">
|
||||
|
||||
@@ -16,58 +18,142 @@ A GitHub Action to deploy your static site to GitHub Pages with [Static Site Gen
|
||||
|
||||
## Getting started
|
||||
|
||||
### (1) Add deploy Key
|
||||
### (1) Add ssh deploy key
|
||||
|
||||
1. Generate deploy key `ssh-keygen -t rsa -b 4096 -C "your@email.com" -f gh-pages -N ""`
|
||||
2. Go to "Settings > Deploy Keys" of repository.
|
||||
3. Add your public key within "Allow write access" option.
|
||||
4. Go to "Settings > Secrets" of repository.
|
||||
5. Add your private deploy key as `ACTIONS_DEPLOY_KEY`
|
||||
Generate your deploy key with the following command.
|
||||
|
||||
### (2) Create `main.workflow`
|
||||
```sh
|
||||
ssh-keygen -t rsa -b 4096 -C "your@email.com" -f gh-pages -N ""
|
||||
# You will get 2 files:
|
||||
# gh-pages.pub (public key)
|
||||
# gh-pages (private key)
|
||||
```
|
||||
|
||||
An example with Hugo action.
|
||||
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`
|
||||
|
||||
An example yaml file with Hugo action.
|
||||
|
||||
- [peaceiris/actions-hugo: GitHub Actions for Hugo extended](https://github.com/peaceiris/actions-hugo)
|
||||
|
||||
```hcl
|
||||
workflow "GitHub Pages" {
|
||||
on = "push"
|
||||
resolves = ["deploy"]
|
||||
}
|
||||

|
||||

|
||||
|
||||
action "is-branch-master" {
|
||||
uses = "actions/bin/filter@master"
|
||||
args = "branch master"
|
||||
}
|
||||
```yaml
|
||||
name: github pages
|
||||
|
||||
action "build" {
|
||||
needs = "is-branch-master"
|
||||
uses = "peaceiris/actions-hugo@v0.55.6"
|
||||
args = ["--gc", "--minify", "--cleanDestinationDir"]
|
||||
}
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
action "deploy" {
|
||||
needs = "build"
|
||||
uses = "peaceiris/actions-gh-pages@v1.0.0"
|
||||
env = {
|
||||
PUBLISH_DIR = "./public"
|
||||
PUBLISH_BRANCH = "gh-pages"
|
||||
}
|
||||
secrets = ["ACTIONS_DEPLOY_KEY"]
|
||||
}
|
||||
jobs:
|
||||
build-deploy:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
|
||||
- name: build
|
||||
uses: peaceiris/actions-hugo@v0.58.0
|
||||
with:
|
||||
args: --gc --minify --cleanDestinationDir
|
||||
|
||||
- name: deploy
|
||||
uses: peaceiris/actions-gh-pages@v2.0.0
|
||||
env:
|
||||
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
|
||||
PUBLISH_BRANCH: gh-pages
|
||||
PUBLISH_DIR: ./public
|
||||
```
|
||||
|
||||
### 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.0.0
|
||||
+ uses: docker://peaceiris/gh-pages:v2.0.0
|
||||
```
|
||||
|
||||
- [peaceiris/gh-pages - Docker Hub](https://hub.docker.com/r/peaceiris/gh-pages)
|
||||
|
||||
```diff
|
||||
- uses: peaceiris/actions-hugo@v0.58.0
|
||||
+ uses: docker://peaceiris/gha-hugo:v0.58.0
|
||||
```
|
||||
|
||||
- [peaceiris/gha-hugo - Docker Hub](https://hub.docker.com/r/peaceiris/gha-hugo)
|
||||
|
||||
### `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 }}
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Examples
|
||||
|
||||
### MkDocs
|
||||
|
||||

|
||||
|
||||
```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 with MkDocs
|
||||
run: mkdocs build
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: peaceiris/actions-gh-pages@v2.0.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
|
||||
|
||||
|
||||
|
||||
## Supprt author
|
||||
## About the author
|
||||
|
||||
<a href="https://www.patreon.com/peaceiris"><img src="./images/patreon.jpg" alt="peaceiris - Patreon" width="150px"></a>
|
||||
- [peaceiris's homepage](https://peaceiris.com/)
|
||||
|
||||
9
action.yml
Normal file
9
action.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
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'
|
||||
@@ -1,33 +1,70 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
# setup ssh
|
||||
if [[ -z "${ACTIONS_DEPLOY_KEY}" ]]; then
|
||||
echo "error: not found ACTIONS_DEPLOY_KEY"
|
||||
exit 1
|
||||
fi
|
||||
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
|
||||
set -e
|
||||
# set -ex
|
||||
|
||||
# push to gh-pages branch
|
||||
if [[ -z "${PUBLISH_DIR}" ]]; then
|
||||
echo "error: not found PUBLISH_DIR"
|
||||
function print_error() {
|
||||
echo -e "\e[31mERROR: ${1}\e[m"
|
||||
}
|
||||
|
||||
function print_info() {
|
||||
echo -e "\e[36mINFO: ${1}\e[m"
|
||||
}
|
||||
|
||||
# check values
|
||||
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 "${GITHUB_TOKEN}" ]; then
|
||||
|
||||
print_info "setup with GITHUB_TOKEN"
|
||||
|
||||
remote_repo="https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
|
||||
|
||||
else
|
||||
print_error "not found ACTIONS_DEPLOY_KEY or GITHUB_TOKEN"
|
||||
exit 1
|
||||
fi
|
||||
cd ${PUBLISH_DIR}
|
||||
if [[ -z "${PUBLISH_BRANCH}" ]]; then
|
||||
echo "error: not found PUBLISH_BRANCH"
|
||||
|
||||
if [ -z "${PUBLISH_BRANCH}" ]; then
|
||||
print_error "not found PUBLISH_BRANCH"
|
||||
exit 1
|
||||
fi
|
||||
remote_repo="git@github.com:${GITHUB_REPOSITORY}.git"
|
||||
|
||||
if [ -z "${PUBLISH_DIR}" ]; then
|
||||
print_error "not found PUBLISH_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
remote_branch="${PUBLISH_BRANCH}"
|
||||
git init
|
||||
|
||||
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 '*'
|
||||
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 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 checkout "${remote_branch}" || git checkout --orphan "${remote_branch}"
|
||||
git add --all
|
||||
timestamp=$(date -u)
|
||||
git commit -m "Automated deployment: ${timestamp} ${GITHUB_SHA}"
|
||||
git push origin "${remote_branch}" --force
|
||||
git commit --allow-empty -m "Automated deployment: $(date -u) ${GITHUB_SHA}"
|
||||
git push origin "${remote_branch}"
|
||||
print_info "${GITHUB_SHA} was successfully deployed"
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.4 KiB |
Reference in New Issue
Block a user