From b460d03c3bf4e391089f4271fb8c0c3aaa5eb914 Mon Sep 17 00:00:00 2001 From: Cotes Chung <11371340+cotes2020@users.noreply.github.com> Date: Tue, 28 Sep 2021 22:22:36 +0800 Subject: [PATCH] Merge the test tool into the deploy tool --- .github/workflows/ci.yml | 9 +- .github/workflows/pages-deploy.yml.hook | 26 +----- tools/deploy.sh | 106 ++++++++++++++++++++++-- tools/test.sh | 64 -------------- 4 files changed, 101 insertions(+), 104 deletions(-) delete mode 100755 tools/test.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 907b905..f2222fc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,12 +36,5 @@ jobs: ruby-version: 2.7 bundler-cache: true - - name: Build Site - env: - JEKYLL_ENV: production - run: | - bundle exec jekyll b - - name: Test Site - run: | - bash tools/test.sh + run: bash tools/deploy.sh --dry-run diff --git a/.github/workflows/pages-deploy.yml.hook b/.github/workflows/pages-deploy.yml.hook index aa90027..81a249e 100644 --- a/.github/workflows/pages-deploy.yml.hook +++ b/.github/workflows/pages-deploy.yml.hook @@ -25,29 +25,5 @@ jobs: ruby-version: 2.7 bundler-cache: true - - name: Check baseurl - run: | - baseurl="$(grep '^baseurl:' _config.yml | sed "s/.*: *//;s/['\"]//g;s/#.*//")" - if [[ -n $baseurl ]]; then - echo "BASE_URL=$baseurl" >> $GITHUB_ENV - fi - - - name: Build Site - env: - JEKYLL_ENV: production - run: | - bundle exec jekyll b -d "_site$BASE_URL" - - - name: Test Site - run: | - bash tools/test.sh - - name: Deploy - run: | - if [[ -n $BASE_URL ]]; then - mv _site$BASE_URL _site-rename - rm -rf _site - mv _site-rename _site - fi - - bash tools/deploy.sh + run: bash tools/deploy.sh diff --git a/tools/deploy.sh b/tools/deploy.sh index 7e17108..84b2b10 100755 --- a/tools/deploy.sh +++ b/tools/deploy.sh @@ -1,22 +1,80 @@ #!/usr/bin/env bash # -# Deploy the content of _site to 'origin/' +# Build, test and then deploy the site content to 'origin/' +# +# Requirement: html-proofer, jekyll +# +# Usage: See help information set -eu PAGES_BRANCH="gh-pages" -_no_branch=false +SITE_DIR="_site" + +_opt_dry_run=false + +_config="_config.yml" + +_no_pages_branch=false + _backup_dir="$(mktemp -d)" +_baseurl="" + +help() { + echo "Build, test and then deploy the site content to 'origin/'" + echo + echo "Usage:" + echo + echo " bash ./tools/deploy.sh [options]" + echo + echo "Options:" + echo ' -c, --config "" Specify config file(s)' + echo " --dry-run Build site and test, but not deploy" + echo " -h, --help Print this information." +} + init() { - if [[ -z ${GITHUB_ACTION+x} ]]; then - echo "ERROR: This script is not allowed to run outside of GitHub Action." + if [[ -z ${GITHUB_ACTION+x} && $_opt_dry_run == 'false' ]]; then + echo "ERROR: It is not allowed to deploy outside of the GitHub Action envrionment." + echo "Type option '-h' to see the help information." exit -1 fi + _baseurl="$(grep '^baseurl:' _config.yml | sed "s/.*: *//;s/['\"]//g;s/#.*//")" +} + +build() { + # clean up + if [[ -d $SITE_DIR ]]; then + rm -rf "$SITE_DIR" + fi + + # build + JEKYLL_ENV=production bundle exec jekyll b -d "$SITE_DIR$_baseurl" --config "$_config" +} + +test() { + bundle exec htmlproofer \ + --disable-external \ + --check-html \ + --allow_hash_href \ + "$SITE_DIR" +} + +resume_site_dir() { + if [[ -n $_baseurl ]]; then + # Move the site file to the regular directory '_site' + mv "$SITE_DIR$_baseurl" "${SITE_DIR}-rename" + rm -rf "$SITE_DIR" + mv "${SITE_DIR}-rename" "$SITE_DIR" + fi +} + +setup_gh() { if [[ -z $(git branch -av | grep "$PAGES_BRANCH") ]]; then - _no_branch=true + _no_pages_branch=true git checkout -b "$PAGES_BRANCH" else git checkout "$PAGES_BRANCH" @@ -24,7 +82,7 @@ init() { } backup() { - mv _site/* "$_backup_dir" + mv "$SITE_DIR"/* "$_backup_dir" mv .git "$_backup_dir" # When adding custom domain from Github website, @@ -50,7 +108,7 @@ deploy() { git add -A git commit -m "[Automation] Site update No.${GITHUB_RUN_NUMBER}" - if $_no_branch; then + if $_no_pages_branch; then git push -u origin "$PAGES_BRANCH" else git push -f @@ -59,9 +117,43 @@ deploy() { main() { init + build + test + resume_site_dir + + if $_opt_dry_run; then + exit 0 + fi + + setup_gh backup flush deploy } +while (($#)); do + opt="$1" + case $opt in + -c | --config) + _config="$2" + shift + shift + ;; + --dry-run) + # build & test, but not deploy + _opt_dry_run=true + shift + ;; + -h | --help) + help + exit 0 + ;; + *) + # unknown option + help + exit 1 + ;; + esac +done + main diff --git a/tools/test.sh b/tools/test.sh deleted file mode 100755 index ecaf8c8..0000000 --- a/tools/test.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash -# -# Using HTML-proofer to test site. -# -# Requirement: https://github.com/gjtorikian/html-proofer -# -# Usage: bash /path/to/test.sh [indicated path] - -DEST=_site - -_build=false - -help() { - echo "Usage:" - echo - echo " bash ./tools/test.sh [options]" - echo - echo "Options:" - echo " --build Run Jekyll build before test." - echo " -d, --dir Specify the test path." - echo " -h, --help Print this information." -} - -if [[ -n $1 && -d $1 ]]; then - DEST=$1 -fi - -while (($#)); do - opt="$1" - case $opt in - --build) - _build=true - shift - ;; - -d | --dir) - if [[ ! -d $2 ]]; then - echo -e "Error: path '$2' doesn't exist\n" - help - exit 1 - fi - DEST=$2 - shift - shift - ;; - -h | --help) - help - exit 0 - ;; - *) - # unknown option - help - exit 1 - ;; - esac -done - -if $_build; then - JEKYLL_ENV=production bundle exec jekyll b -fi - -bundle exec htmlproofer "$DEST" \ - --disable-external \ - --check-html \ - --allow_hash_href