diff --git a/.github/workflows/pages-deploy.yml b/.github/workflows/pages-deploy.yml index b3bab26..e3efcc8 100644 --- a/.github/workflows/pages-deploy.yml +++ b/.github/workflows/pages-deploy.yml @@ -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/.gitignore b/.gitignore index 390dad2..3a9a8a6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,11 +3,11 @@ !.git* !.editorconfig !.nojekyll +!.travis.yml # bundler cache _site vendor -Gemfile.lock # rubygem *.gem diff --git a/Gemfile b/Gemfile index fcbc76d..cc90358 100644 --- a/Gemfile +++ b/Gemfile @@ -1,11 +1,8 @@ +# frozen_string_literal: true + source "https://rubygems.org" -gem "jekyll-theme-chirpy", "~> 4.2", ">= 4.2.1" - -group :jekyll_plugins do - # If you have any plugins, put them here! - # gem "jekyll-xxx", "~> x.y" -end +gem "jekyll-theme-chirpy", "~> 4.3", ">= 4.3.0" group :test do gem "html-proofer", "~> 3.18" @@ -20,3 +17,6 @@ end # Performance-booster for watching directories on Windows gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform? + +# Jekyll <= 4.2.0 compatibility with Ruby 3.0 +gem "webrick", "~> 1.7" diff --git a/_config.yml b/_config.yml index 734598f..f88f2c3 100644 --- a/_config.yml +++ b/_config.yml @@ -3,8 +3,8 @@ # Import the theme theme: jekyll-theme-chirpy -# Only if your site type is GitHub Project sites and doesn't have a custom domain, -# change below value to '/projectname'. +# Change the following value to '/PROJECT_NAME' ONLY IF your site type is GitHub Pages Project sites +# and doesn't have a custom domain. baseurl: '' # The language of the webpage › http://www.lingoes.net/en/translator/langcode.htm @@ -82,7 +82,7 @@ theme_mode: # [light|dark] img_cdn: '' # the avatar on sidebar, support local or CORS resources -avatar: https://cdn.jsdelivr.net/gh/cotes2020/chirpy-images/commons/avatar.jpg +avatar: '' # boolean type, the global switch for ToC in posts. toc: true diff --git a/_data/contact.yml b/_data/contact.yml index 1cd8496..05da2f2 100644 --- a/_data/contact.yml +++ b/_data/contact.yml @@ -2,7 +2,7 @@ - type: github - icon: 'fab fa-github-alt' + icon: 'fab fa-github' - type: twitter icon: 'fab fa-twitter' diff --git a/_tabs/about.md b/_tabs/about.md index a28ea05..b511014 100644 --- a/_tabs/about.md +++ b/_tabs/about.md @@ -1,6 +1,6 @@ --- title: About -icon: fas fa-info +icon: fas fa-info-circle order: 4 --- diff --git a/_tabs/tags.md b/_tabs/tags.md index 53abc94..2108d24 100644 --- a/_tabs/tags.md +++ b/_tabs/tags.md @@ -1,6 +1,6 @@ --- layout: tags title: Tags -icon: fas fa-tags +icon: fas fa-tag order: 2 --- diff --git a/tools/deploy.sh b/tools/deploy.sh index 17a490a..84b2b10 100755 --- a/tools/deploy.sh +++ b/tools/deploy.sh @@ -1,28 +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 - # Gemfile could be changed by `bundle install` in actions workflow - if [[ -n $(git ls-files | grep Gemfile.lock) && -n \ - $(git status Gemfile.lock --porcelain) ]]; then - git checkout -- Gemfile.lock + _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" @@ -30,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, @@ -56,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 @@ -65,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 0a22ba0..0000000 --- a/tools/test.sh +++ /dev/null @@ -1,67 +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 -URL_IGNORE=cdn.jsdelivr.net - -_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 \ - --empty_alt_ignore \ - --allow_hash_href \ - --url_ignore $URL_IGNORE