From 9dbd79100138e2de6a670174f1b31a54661de77d Mon Sep 17 00:00:00 2001 From: Shohei Ueda <30958501+peaceiris@users.noreply.github.com> Date: Thu, 5 Sep 2019 23:07:49 +0900 Subject: [PATCH] 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 --- .github/workflows/docker-image-ci.yml | 36 +++++--- .hadolint.yaml | 2 + Dockerfile | 9 -- README.md | 121 ++++++++++++++++++-------- action.yml | 9 ++ entrypoint.sh | 22 ++++- 6 files changed, 138 insertions(+), 61 deletions(-) create mode 100644 .hadolint.yaml create mode 100644 action.yml diff --git a/.github/workflows/docker-image-ci.yml b/.github/workflows/docker-image-ci.yml index 1e88bdc..a188a56 100644 --- a/.github/workflows/docker-image-ci.yml +++ b/.github/workflows/docker-image-ci.yml @@ -4,8 +4,7 @@ on: push: branches: - master - tags: - - invalid-tag + - 'release-v*' jobs: test: @@ -15,19 +14,34 @@ jobs: - uses: actions/checkout@master - name: build - if: github.event.deleted == false 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: success() && endsWith(github.ref, 'master') - env: - DOCKER_IMAGE: docker.pkg.github.com/${{ github.repository }}/action:latest - PKG_GITHUB_TOKEN: ${{ secrets.PKG_GITHUB_TOKEN }} + # - 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: | - echo ${PKG_GITHUB_TOKEN} | docker login docker.pkg.github.com -u ${GITHUB_ACTOR} --password-stdin && - docker push ${DOCKER_IMAGE} && - docker logout + brew install hadolint + hadolint ./Dockerfile diff --git a/.hadolint.yaml b/.hadolint.yaml new file mode 100644 index 0000000..8f7e23e --- /dev/null +++ b/.hadolint.yaml @@ -0,0 +1,2 @@ +ignored: + - DL3008 diff --git a/Dockerfile b/Dockerfile index c4e85dd..2728365 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,5 @@ 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 apt-get update && apt-get install -y --no-install-recommends \ git \ openssh-client \ diff --git a/README.md b/README.md index c34c04f..6a4c060 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,25 @@ A GitHub Action to deploy your static site to GitHub Pages with [Static Site Gen ## Getting started -### Create `.github/workflows/gh-pages.yml` +### (1) Add ssh deploy key -An example with Hugo action. +Generate your deploy key with the following command. + +```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) +``` + +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) @@ -40,63 +56,92 @@ jobs: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@master + - name: build - uses: peaceiris/actions-hugo@v0.57.2 - if: github.event.deleted == false + uses: peaceiris/actions-hugo@v0.58.0 with: args: --gc --minify --cleanDestinationDir + - name: deploy - uses: peaceiris/actions-gh-pages@v1.1.0 - if: success() + uses: peaceiris/actions-gh-pages@v2.0.0 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + 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 -- [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) - ![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@v1 -action "mkdocs-build" { - needs = ["pipenv-sync"] - uses = "peaceiris/actions-pipenv@3.6" - args = ["run", "mkdocs", "build", "--config-file", "./mkdocs-sample.yml"] -} + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: '3.6' + architecture: 'x64' -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: 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 ``` diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..28afac1 --- /dev/null +++ b/action.yml @@ -0,0 +1,9 @@ +name: 'Deploy to GitHub Pages for Static Site Generator' +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' diff --git a/entrypoint.sh b/entrypoint.sh index 643c144..60c65ce 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -12,8 +12,25 @@ function print_info() { } # check values -if [ -z "${GITHUB_TOKEN}" ]; then - print_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 "${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 @@ -27,7 +44,6 @@ if [ -z "${PUBLISH_DIR}" ]; then exit 1 fi -remote_repo="https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" remote_branch="${PUBLISH_BRANCH}" local_dir="${HOME}/$(tr -cd 'a-f0-9' < /dev/urandom | head -c 32)"