commit 32cd3112ba34a8bad9906633a26519a8694a4b0f Author: Cotes Chung <11371340+cotes2020@users.noreply.github.com> Date: Tue Jan 26 05:13:40 2021 +0800 Init commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..cdded46 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +charset = utf-8 +# 2 space indentation +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +# Unix-style newlines with a newline ending every file +end_of_line = lf +insert_final_newline = true diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..262d6bd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,16 @@ +# Set default behavior to automatically normalize line endings. +* text=auto + +# Force bash scripts to always use LF line endings so that if a repo is accessed +# in Unix via a file share from Windows, the scripts will work. +*.sh text eol=lf + +# Force batch scripts to always use CRLF line endings so that if a repo is accessed +# in Windows via a file share from Linux, the scripts will work. +*.{cmd,[cC][mM][dD]} text eol=crlf +*.{bat,[bB][aA][tT]} text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary +*.ico binary diff --git a/.github/workflows/pages-deploy.yml b/.github/workflows/pages-deploy.yml new file mode 100644 index 0000000..2e02375 --- /dev/null +++ b/.github/workflows/pages-deploy.yml @@ -0,0 +1,68 @@ +name: 'Automatic build' +on: + push: + branches: + - main + paths-ignore: + - .gitignore + - README.md + - LICENSE + +jobs: + continuous-delivery: + + runs-on: ubuntu-latest + + env: + GEMS_PATH: ~/vendor/bundle + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 # for posts's lastmod + + - name: Setup Ruby + uses: actions/setup-ruby@v1 + with: + ruby-version: 2.7 + + - name: Bundle Caching + uses: actions/cache@v2 + with: + path: ${{ env.GEMS_PATH }} + key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }} + restore-keys: | + ${{ runner.os }}-gems- + + - name: Bundle Install + run: | + bundle config path ${{ env.GEMS_PATH }} + bundle install --jobs 4 --retry 3 + + - 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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..de35908 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# hidden files +.* +!.github + +# jekyll cache +_site +vendor + +# rubygem +*.gem + +# npm dependencies +node_modules +package-lock.json diff --git a/404.html b/404.html new file mode 100644 index 0000000..fd9ff20 --- /dev/null +++ b/404.html @@ -0,0 +1,20 @@ +--- +layout: page +title: "404: Page not found" +permalink: /404.html + +redirect_from: + - /norobots/ + - /assets/ + - /tabs/ + - /categories/ + - /tags/ + - /posts/ + +dynamic_title: true +--- + +
+

Sorry, we've misplaced that URL or it's pointing to something that doesn't exist.

+

Head back Home to try finding it again, or search for it on the Archives page.

+
diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..78ba91d --- /dev/null +++ b/Gemfile @@ -0,0 +1,22 @@ +source "https://rubygems.org" + +gem "jekyll-theme-chirpy" + +# If you have any plugins, put them here! +group :jekyll_plugins do + # gem "jekyll-xxx", "~> x.y" +end + +group :test do + gem "html-proofer", "~> 3.18" +end + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library. +install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do + gem "tzinfo", "~> 1.2" + gem "tzinfo-data" +end + +# # # Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform? diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a6f6c9f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Cotes Chung + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9cb852d --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Chirpy Starter + +The startup template for [**Jekyll Theme Chirpy**][chirpy]. + +When installing the `jekyll-theme-chirpy` through [RubyGem][gem], Jekyll can only read files in the folders `_includes`, `_layout`, `_sass` and `assets`, as well as a small part of variables of the file `_config.yml` from the theme's gem (use the command `bundle info --path jekyll-theme-chirpy` to locate). To fully use all the features of `jekyll-theme-chirpy`, you also need to copy other files/directories and site variables from the theme's gem to your Jekyll site. This will be boring, so we extract all the other required things of the theme's gem to help you quickly use `jekyll-theme-chirpy`. + +[gem]: https://rubygems.org/gems/jekyll-theme-chirpy +[chirpy]: https://github.com/cotes2020/jekyll-theme-chirpy/ + +**File Directory Struct** + +```shell +. +├── .github +│   └── workflows +│   └── pages-deploy.yml # the GitHub Actions workflow +├── Gemfile +├── LICENSE +├── README.md # this file +├── _config.yml # all variables are from the theme's gem, except the option `theme` +├── _data # from the theme's gem +├── _plugins # idem +├── _tabs # idem +├── app.js # idem +├── feed.xml # idem +├── index.html # idem +├── 404.html # idem +├── robots.txt # idem +└── sw.js # idem + +``` + +## Installation + +[Use this template][usetemplate] to generate a new repository, and then execute: + +[usetemplate]: https://github.com/cotes2020/chirpy-starter/generate + +``` +$ bundle +``` + +## Usage + +### Customing Stylesheet + +Creare a new file `/assets/css/style.scss` in your Jekyll site. + +And then add the following content: + +```scss +--- +--- + +@import {{ site.theme }} + +// add your style below +``` + +### Changing the Number of Tabs + +When adding or deleting files in the `_tabs` folder, you need to complete [Custom Stylesheet](#custom-stylesheet) first, and then add a new line before `@import`: + +```scss +$tab-count: {{ site.tabs | size | plus: 1 }}; +``` + +### Publishing to GitHub Pages + +See the `jekyll-theme-chirpy`'s [deployment instructions](https://github.com/cotes2020/jekyll-theme-chirpy#deployment). Note that in order to use GitHub Actions caching to speed up the deployment, you should add the `Gemfile.lock` file to your repository. + +### Updating + +Please note that files and directories in this project may change as the [`jekyll-theme-chirpy`][chirpy] is updated. When updating, please ensure that the file directory structure of your Jekyll site is the same as that of this project. + +And then execute: + +```console +$ bundle update jekyll-theme-chirpy +``` + +## Documentation + +See the [theme's docs](https://github.com/cotes2020/jekyll-theme-chirpy#documentation). + +## License + +This work is published under [MIT](https://github.com/cotes2020/chirpy-starter/blob/master/LICENSE) License. diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..568d2de --- /dev/null +++ b/_config.yml @@ -0,0 +1,207 @@ +# import theme +theme: jekyll-theme-chirpy + +# The Site Configuration + +# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md +# -------------------------- +title: Chirpy # the main title + +tagline: A text-focused Jekyll theme # it will display as the sub-title + +description: >- # used by seo meta and the atom feed + A minimal, portfolio, sidebar, + bootstrap Jekyll theme with responsive web design + and focuses on text presentation. + +# fill in the protocol & hostname for your site, e.g., 'https://username.github.io' +url: '' + +author: your_full_name # change to your full name + +github: + username: github_username # change to your github username + +twitter: + username: twitter_username # change to your twitter username + +social: + name: your_full_name # it will shows as the copyright owner in Footer + email: example@doamin.com # change to your email address + links: + # The first element serves as the copyright owner's link + - https://twitter.com/username # change to your twitter homepage + - https://github.com/username # change to your github homepage + # Uncomment below to add more social links + # - https://www.facebook.com/username + # - https://www.linkedin.com/in/username + +google_site_verification: google_meta_tag_verification # change to your verification string +# -------------------------- + + +# Only if your site type is GitHub Project sites and doesn't have a custom domain, +# change below value to '/projectname'. +baseurl: '' + +# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone +timezone: Asia/Shanghai + +google_analytics: + id: '' # Fill with your Google Analytics ID + pv: + # The Google Analytics pageviews switch. + # DO NOT enable it unless you know how to deploy the Google Analytics superProxy. + enabled: false + # the next options only valid when `google_analytics.pv` is enabled. + proxy_url: '' + proxy_endpoint: '' + cache: false # pv data local cache, good for the users from GFW area. + +disqus: + comments: false # boolean type, the global switch for posts comments. + shortname: '' # Fill with your Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname + + +# Prefer color scheme setting. +# +# Note: Keep empty will follow the system prefer color by default, +# and there will be a toggle to switch the theme between dark and light +# on the bottom left of the sidebar. +# +# Available options: +# +# light - Use the light color scheme +# +# dark - Use the dark color scheme +# +theme_mode: # [light|dark] + +# The CDN endpoint for images. +# Notice that once it is assigned, the CDN url +# will be added to all image (site avatar & posts' images) paths starting with '/' +# +# e.g. 'https://cdn.com' +img_cdn: '' + +# the avatar on sidebar, support local or CORS resources +avatar: https://cdn.jsdelivr.net/gh/cotes2020/chirpy-images/commons/avatar.jpg + +# boolean type, the global switch for ToC in posts. +toc: true + +paginate: 10 + +kramdown: + syntax_highlighter: rouge + syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options + css_class: highlight + # default_lang: console + span: + line_numbers: false + block: + line_numbers: true + start_line: 1 + +# DO NOT change this unless you're a Pro user on Jekyll and Web development, +# or you think you're smart enough to change other relevant URLs within this template. +permalink: /posts/:title/ + +collections: + tabs: + output: true + sort_by: order + + +defaults: + - + scope: + path: '' # An empty string here means all files in the project + type: posts + values: + layout: post + comments: true # Enable comments in posts. + toc: true # Display TOC column in posts. + breadcrumb: + - + label: Posts + url: / + - + scope: + path: _drafts + values: + comments: false + - + scope: + path: index.html + values: + breadcrumb: + - + label: Posts + - + scope: + path: tags + values: + breadcrumb: + - + label: Home + url: / + - + label: Tags + url: /tabs/tags/ + - + scope: + path: categories + values: + breadcrumb: + - + label: Home + url: / + - + label: Categories + url: /tabs/categories/ + - + scope: + path: '' + type: tabs # see `site.collections` + values: + layout: page + dynamic_title: true # Hide title in mobile screens. + breadcrumb: + - + label: Home + url: / + +sass: + style: compressed + +compress_html: + clippings: all + comments: all + endings: all + profile: false + blanklines: false + ignore: + envs: [development] + +exclude: + - vendor + - Gemfile.lock + - Gemfile + - tools + - docs + - README.md + - LICENSE + - gulpfile.js + - node_modules + - package.json + - package-lock.json + +jekyll-archives: + enabled: [categories, tags] + layouts: + category: category + tag: tag + permalinks: + tag: /tags/:name/ + category: /categories/:name/ diff --git a/_data/contact.yml b/_data/contact.yml new file mode 100644 index 0000000..1cd8496 --- /dev/null +++ b/_data/contact.yml @@ -0,0 +1,30 @@ +# The contact options. + +- + type: github + icon: 'fab fa-github-alt' +- + type: twitter + icon: 'fab fa-twitter' +- + type: email + icon: 'fas fa-envelope' + noblank: true # open link in current tab +- + type: rss + icon: 'fas fa-rss' + noblank: true + +# Uncomment and complete the url below to enable more contact options +# - +# type: mastodon +# icon: 'fab fa-mastodon' # icons powered by +# url: '' # Fill with your mastodon account page +# - +# type: linkedin +# icon: 'fab fa-linkedin' # icons powered by +# url: '' # Fill with your Linkedin homepage +# - +# type: stack-overflow +# icon: 'fab fa-stack-overflow' +# url: '' # Fill with your stackoverflow homepage diff --git a/_data/date_format.yml b/_data/date_format.yml new file mode 100644 index 0000000..3c7bc79 --- /dev/null +++ b/_data/date_format.yml @@ -0,0 +1,7 @@ +# The date format + +tooltip: "%a, %b %e, %Y, %l:%M %p %z" + +post: + long: "%b %e, %Y" + short: "%b %e" diff --git a/_data/label.yml b/_data/label.yml new file mode 100644 index 0000000..11cccf4 --- /dev/null +++ b/_data/label.yml @@ -0,0 +1,19 @@ +# The label text of site. + +panel: + lastmod: Recent Update + trending_tags: Trending Tags + toc: Contents + +post: + relate_posts: Further Reading + share: Share + button: + next: Newer + previous: Older + +search_hint: Search # text show on search bar + +pin_prompt: Pinned # pinned prompt + +read_time_unit: min # see posts' time to read diff --git a/_data/rights.yml b/_data/rights.yml new file mode 100644 index 0000000..f6fdd42 --- /dev/null +++ b/_data/rights.yml @@ -0,0 +1,11 @@ +# License data + +license: + name: CC BY 4.0 + link: "https://creativecommons.org/licenses/by/4.0/" + +brief: Some rights reserved. + +verbose: >- + Except where otherwise noted, the blog posts on this site are licensed + under the Creative Commons Attribution 4.0 International (CC BY 4.0) License by the author. diff --git a/_data/share.yml b/_data/share.yml new file mode 100644 index 0000000..ecd1b0d --- /dev/null +++ b/_data/share.yml @@ -0,0 +1,27 @@ +# Sharing options at the bottom of the post. +# Icons from + +platforms: + - + type: Twitter + icon: "fab fa-twitter" + link: "https://twitter.com/intent/tweet?text=TITLE&url=URL" + - + type: Facebook + icon: "fab fa-facebook-square" + link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL" + - + type: Telegram + icon: "fab fa-telegram" + link: "https://telegram.me/share?text=TITLE&url=URL" + + # Uncomment below if you need to. + # - + # type: Linkedin + # icon: "fab fa-linkedin" + # link: "https://www.linkedin.com/sharing/share-offsite/?url=URL" + # + # - + # type: Weibo + # icon: "fab fa-weibo" + # link: "http://service.weibo.com/share/share.php?title=TITLE&url=URL" diff --git a/_plugins/posts-lastmod-hook.rb b/_plugins/posts-lastmod-hook.rb new file mode 100644 index 0000000..1fd6ecf --- /dev/null +++ b/_plugins/posts-lastmod-hook.rb @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby +# +# Check for changed posts + +Jekyll::Hooks.register :posts, :post_init do |post| + + commit_num = `git rev-list --count HEAD "#{ post.path }"` + + if commit_num.to_i > 1 + lastmod_date = `git log -1 --pretty="%ad" --date=iso "#{ post.path }"` + post.data['last_modified_at'] = lastmod_date + end + +end diff --git a/_posts/.placeholder b/_posts/.placeholder new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/_posts/.placeholder @@ -0,0 +1 @@ + diff --git a/_tabs/about.md b/_tabs/about.md new file mode 100644 index 0000000..a28ea05 --- /dev/null +++ b/_tabs/about.md @@ -0,0 +1,8 @@ +--- +title: About +icon: fas fa-info +order: 4 +--- + + +> **Note**: Add Markdown syntax content to file `_tabs/about.md` and it will show up on this page. diff --git a/_tabs/archives.md b/_tabs/archives.md new file mode 100644 index 0000000..f969f92 --- /dev/null +++ b/_tabs/archives.md @@ -0,0 +1,7 @@ +--- +layout: archives +title: Archives +icon: fas fa-archive +order: 3 +--- + diff --git a/_tabs/categories.md b/_tabs/categories.md new file mode 100644 index 0000000..3a23c29 --- /dev/null +++ b/_tabs/categories.md @@ -0,0 +1,6 @@ +--- +layout: categories +title: Categories +icon: fas fa-stream +order: 1 +--- diff --git a/_tabs/tags.md b/_tabs/tags.md new file mode 100644 index 0000000..53abc94 --- /dev/null +++ b/_tabs/tags.md @@ -0,0 +1,6 @@ +--- +layout: tags +title: Tags +icon: fas fa-tags +order: 2 +--- diff --git a/app.js b/app.js new file mode 100644 index 0000000..b821164 --- /dev/null +++ b/app.js @@ -0,0 +1,8 @@ +--- +layout: compress +--- + +/* Registering Service Worker */ +if('serviceWorker' in navigator) { + navigator.serviceWorker.register('{{ "/sw.js" | relative_url }}'); +}; diff --git a/feed.xml b/feed.xml new file mode 100644 index 0000000..d75e8fb --- /dev/null +++ b/feed.xml @@ -0,0 +1,60 @@ +--- +layout: compress +# Atom Feed, reference: https://validator.w3.org/feed/docs/atom.html +--- + +{% capture source %} + + {{ "/" | absolute_url }} + {{ site.title }} + {{ site.description }} + {{ site.time | date_to_xmlschema }} + + {{ site.author }} + {{ "/" | absolute_url }} + + + + Jekyll + © {{ 'now' | date: '%Y' }} {{ site.author }} + {{ site.baseurl }}/assets/img/favicons/favicon.ico + {{ site.baseurl }}/assets/img/favicons/favicon-96x96.png + +{% for post in site.posts limit: 5 %} + {% assign post_absolute_url = post.url | absolute_url %} + + {{ post.title }} + + {{ post.date | date_to_xmlschema }} + {% if post.last_modified_at %} + {{ post.last_modified_at | date_to_xmlschema }} + {% else %} + {{ post.date | date_to_xmlschema }} + {% endif %} + {{ post_absolute_url }} + + + {{ site.author }} + + + {% if post.categories %} + {% for category in post.categories %} + + {% endfor %} + {% endif %} + + {% if post.summary %} + {{ post.summary | strip }} + {% else %} + + {% include no-linenos.html content=post.content %} + {{ content | strip_html | truncate: 400 }} + + {% endif %} + + +{% endfor %} + +{% endcapture %} +{{ source | replace: '&', '&' }} diff --git a/index.html b/index.html new file mode 100644 index 0000000..1357b08 --- /dev/null +++ b/index.html @@ -0,0 +1,4 @@ +--- +layout: home +# Index page +--- diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..681b4c6 --- /dev/null +++ b/robots.txt @@ -0,0 +1,10 @@ +--- +permalink: robots.txt +# The robots rules +--- + +User-agent: * + +Disallow: /norobots/ + +Sitemap: {{ '/sitemap.xml' | absolute_url }} diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..dee9898 --- /dev/null +++ b/sw.js @@ -0,0 +1,61 @@ +--- +layout: compress +# PWA service worker +--- + +self.importScripts('{{ "/assets/js/data/cache-list.js" | relative_url }}'); + +var cacheName = 'chirpy-{{ "now" | date: "%Y%m%d.%H%M" }}'; + + +function isExcluded(url) { + const regex = /(^http(s)?|^\/)/; /* the regex for CORS url or relative url */ + for (const rule of exclude) { + if (!regex.test(url) || + url.indexOf(rule) != -1) { + return true; + } + } + return false; +} + + +self.addEventListener('install', (e) => { + self.skipWaiting(); + e.waitUntil( + caches.open(cacheName).then((cache) => { + return cache.addAll(include); + }) + ); +}); + + +self.addEventListener('fetch', (e) => { + e.respondWith( + caches.match(e.request).then((r) => { + /* console.log('[Service Worker] Fetching resource: ' + e.request.url); */ + return r || fetch(e.request).then((response) => { + return caches.open(cacheName).then((cache) => { + if (!isExcluded(e.request.url)) { + /* console.log('[Service Worker] Caching new resource: ' + e.request.url); */ + cache.put(e.request, response.clone()); + } + return response; + }); + }); + }) + ); +}); + + +self.addEventListener('activate', (e) => { + e.waitUntil( + caches.keys().then((keyList) => { + return Promise.all(keyList.map((key) => { + if(key !== cacheName) { + return caches.delete(key); + } + })); + }) + ); +}); diff --git a/tools/deploy.sh b/tools/deploy.sh new file mode 100755 index 0000000..17a490a --- /dev/null +++ b/tools/deploy.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# +# Deploy the content of _site to 'origin/' + +set -eu + +PAGES_BRANCH="gh-pages" + +_no_branch=false +_backup_dir="$(mktemp -d)" + +init() { + if [[ -z ${GITHUB_ACTION+x} ]]; then + echo "ERROR: This script is not allowed to run outside of GitHub Action." + 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 + fi + + if [[ -z $(git branch -av | grep "$PAGES_BRANCH") ]]; then + _no_branch=true + git checkout -b "$PAGES_BRANCH" + else + git checkout "$PAGES_BRANCH" + fi +} + +backup() { + mv _site/* "$_backup_dir" + mv .git "$_backup_dir" + + # When adding custom domain from Github website, + # the CANME only exist on `gh-pages` branch + if [[ -f CNAME ]]; then + mv CNAME "$_backup_dir" + fi +} + +flush() { + rm -rf ./* + rm -rf .[^.] .??* + + shopt -s dotglob nullglob + mv "$_backup_dir"/* . +} + +deploy() { + 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; then + git push -u origin "$PAGES_BRANCH" + else + git push -f + fi +} + +main() { + init + backup + flush + deploy +} + +main diff --git a/tools/test.sh b/tools/test.sh new file mode 100755 index 0000000..0a22ba0 --- /dev/null +++ b/tools/test.sh @@ -0,0 +1,67 @@ +#!/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