diff --git a/.github/workflows/pages-deploy.yml.hook b/.github/workflows/pages-deploy.yml.hook new file mode 100644 index 0000000..6d3ac74 --- /dev/null +++ b/.github/workflows/pages-deploy.yml.hook @@ -0,0 +1,99 @@ +name: 'Automatic build' +on: + push: + branches: + - master + paths-ignore: + - '.gitignore' + - 'README.md' + - 'LICENSE' + +jobs: + build-n-test: + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-ruby@v1 + with: + ruby-version: '2.6.x' + + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Bundle Caching + id: bundle-cache + uses: actions/cache@v1 + with: + path: vendor/bundle + key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile') }} + restore-keys: | + ${{ runner.os }}-gems- + + - name: Bundle config + run: | + bundle config path vendor/bundle + + - name: Bundle Install + if: steps.bundle-cache.outputs.cache-hit != 'true' + run: | + bundle install + + - name: Bundle Install locally + if: steps.bundle-cache.outputs.cache-hit == 'true' + run: | + bundle install --local + + - name: Build Site + run: | + bash tools/build.sh -b "" + + - name: Test Site + run: | + bash tools/test.sh + + deploy: + needs: build-n-test + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-ruby@v1 + with: + ruby-version: '2.6.x' + + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Bundle Caching + id: bundle-cache + uses: actions/cache@v1 + with: + path: vendor/bundle + key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile') }} + restore-keys: | + ${{ runner.os }}-gems- + + - name: Bundle config + run: | + bundle config path vendor/bundle + + - name: Bundle Install + if: steps.bundle-cache.outputs.cache-hit != 'true' + run: | + bundle install + + - name: Bundle Install locally + if: steps.bundle-cache.outputs.cache-hit == 'true' + run: | + bundle install --local + + - name: Build site + run: | + bash tools/build.sh + + - name: Deploy + run: | + bash tools/deploy.sh diff --git a/tools/deploy.sh b/tools/deploy.sh new file mode 100755 index 0000000..66580d3 --- /dev/null +++ b/tools/deploy.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Deploy the content of _site to 'origin/' +# +# v2.5 +# https://github.com/cotes2020/jekyll-theme-chirpy +# © 2020 Cotes Chung +# Published under MIT License + + +set -eu + +PAGES_BRANCH="gh-pages" + +_no_branch=false + +if [[ -z `git branch -av | grep $PAGES_BRANCH` ]]; then + _no_branch=true + git checkout -b $PAGES_BRANCH +else + git checkout $PAGES_BRANCH +fi + +mv _site ../ +mv .git ../ + +rm -rf * && rm -rf .[^.] .??* + +mv ../_site/* . +mv ../.git . + +git config --global user.name "GitHub Actions" +git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + +git update-ref -d HEAD +git add -A +git commit -m "[Automation] Site update No.${GITHUB_RUN_NUMBER}" + +if [[ $_no_branch = true ]]; then + git push -u origin $PAGES_BRANCH +else + git push -f +fi diff --git a/tools/init.sh b/tools/init.sh new file mode 100755 index 0000000..dc6390c --- /dev/null +++ b/tools/init.sh @@ -0,0 +1,89 @@ +#!/bin/bash +# +# Init the evrionment for new user. +# +# v2.5 +# https://github.com/cotes2020/jekyll-theme-chirpy +# © 2020 Cotes Chung +# Published under MIT License + +set -eu + + +ACTIONS_WORKFLOW=pages-deploy.yml + +help() { + echo "Usage:" + echo + echo " bash /path/to/init.sh [options]" + echo + echo "Options:" + echo " --no-gh Do not deploy to Github." + echo " -h, --help Print this help information." +} + +check_init() { + local _has_inited=false + + if [[ -d .github ]]; then + if [[ -f .github/workflows/$ACTIONS_WORKFLOW + && $(find .github/workflows/ -type f -name "*.yml" | wc -l) == 1 ]]; then + _has_inited=true + fi + else + _has_inited=true + fi + + if [[ $_has_inited = true ]]; then + echo "Already initialized." + exit 0 + fi +} + + +init_files() { + + if [[ $_no_gh = true ]]; then + rm -rf .github + else + mv .github/workflows/$ACTIONS_WORKFLOW.hook . + rm -rf .github + mkdir -p .github/workflows + mv ./${ACTIONS_WORKFLOW}.hook .github/workflows/${ACTIONS_WORKFLOW} + fi + + rm -f .travis.yml + rm -rf _posts/* docs + + git add -A && git add .github -f + git commit -m "[Automation] Initialize the environment." -q + + echo "[INFO] Initialization successful!" +} + + +check_init + +_no_gh=false + +while (( $# )) +do + opt="$1" + case $opt in + --no-gh) + _no_gh=true + shift + ;; + -h|--help) + help + exit 0 + ;; + *) + # unknown option + help + exit 1 + ;; + esac +done + +init_files