mirror of
https://github.com/cotes2020/chirpy-starter.git
synced 2025-04-21 11:53:27 +10:00
Compare commits
No commits in common. "main" and "v3.2.0" have entirely different histories.
@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Jekyll",
|
|
||||||
"image": "mcr.microsoft.com/devcontainers/jekyll:2-bullseye",
|
|
||||||
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
|
|
||||||
"postCreateCommand": "bash .devcontainer/post-create.sh",
|
|
||||||
"customizations": {
|
|
||||||
"vscode": {
|
|
||||||
"settings": {
|
|
||||||
"terminal.integrated.defaultProfile.linux": "zsh"
|
|
||||||
},
|
|
||||||
"extensions": [
|
|
||||||
// Liquid tags auto-complete
|
|
||||||
"killalau.vscode-liquid-snippets",
|
|
||||||
// Liquid syntax highlighting and formatting
|
|
||||||
"Shopify.theme-check-vscode",
|
|
||||||
// Shell
|
|
||||||
"timonwong.shellcheck",
|
|
||||||
"mkhl.shfmt",
|
|
||||||
// Common formatter
|
|
||||||
"EditorConfig.EditorConfig",
|
|
||||||
"esbenp.prettier-vscode",
|
|
||||||
"stylelint.vscode-stylelint",
|
|
||||||
"yzhang.markdown-all-in-one",
|
|
||||||
// Git
|
|
||||||
"mhutchie.git-graph"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [ -f package.json ]; then
|
|
||||||
bash -i -c "nvm install --lts && nvm install-latest-npm"
|
|
||||||
npm i
|
|
||||||
npm run build
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install dependencies for shfmt extension
|
|
||||||
curl -sS https://webi.sh/shfmt | sh &>/dev/null
|
|
||||||
|
|
||||||
# Add OMZ plugins
|
|
||||||
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
|
|
||||||
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
|
|
||||||
sed -i -E "s/^(plugins=\()(git)(\))/\1\2 zsh-syntax-highlighting zsh-autosuggestions\3/" ~/.zshrc
|
|
||||||
|
|
||||||
# Avoid git log use less
|
|
||||||
echo -e "\nunset LESS" >>~/.zshrc
|
|
@ -2,18 +2,10 @@ root = true
|
|||||||
|
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
|
# 2 space indentation
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
# Unix-style newlines with a newline ending every file
|
# Unix-style newlines with a newline ending every file
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
[*.{js,css,scss}]
|
|
||||||
quote_type = single
|
|
||||||
|
|
||||||
[*.{yml,yaml}]
|
|
||||||
quote_type = double
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
trim_trailing_whitespace = false
|
|
||||||
|
95
.github/workflows/pages-deploy.yml
vendored
95
.github/workflows/pages-deploy.yml
vendored
@ -1,73 +1,68 @@
|
|||||||
name: "Build and Deploy"
|
name: 'Automatic build'
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- master
|
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- .gitignore
|
- .gitignore
|
||||||
- README.md
|
- README.md
|
||||||
- LICENSE
|
- LICENSE
|
||||||
|
|
||||||
# Allows you to run this workflow manually from the Actions tab
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pages: write
|
|
||||||
id-token: write
|
|
||||||
|
|
||||||
# Allow one concurrent deployment
|
|
||||||
concurrency:
|
|
||||||
group: "pages"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
continuous-delivery:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
GEMS_PATH: ~/vendor/bundle
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0 # for posts's lastmod
|
||||||
# submodules: true
|
|
||||||
# If using the 'assets' git submodule from Chirpy Starter, uncomment above
|
|
||||||
# (See: https://github.com/cotes2020/chirpy-starter/tree/main/assets)
|
|
||||||
|
|
||||||
- name: Setup Pages
|
|
||||||
id: pages
|
|
||||||
uses: actions/configure-pages@v4
|
|
||||||
|
|
||||||
- name: Setup Ruby
|
- name: Setup Ruby
|
||||||
uses: ruby/setup-ruby@v1
|
uses: actions/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
ruby-version: 3.3
|
ruby-version: 2.7
|
||||||
bundler-cache: true
|
|
||||||
|
|
||||||
- name: Build site
|
- name: Bundle Caching
|
||||||
run: bundle exec jekyll b -d "_site${{ steps.pages.outputs.base_path }}"
|
uses: actions/cache@v2
|
||||||
env:
|
with:
|
||||||
JEKYLL_ENV: "production"
|
path: ${{ env.GEMS_PATH }}
|
||||||
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-gems-
|
||||||
|
|
||||||
- name: Test site
|
- name: Bundle Install
|
||||||
run: |
|
run: |
|
||||||
bundle exec htmlproofer _site \
|
bundle config path ${{ env.GEMS_PATH }}
|
||||||
\-\-disable-external \
|
bundle install --jobs 4 --retry 3
|
||||||
\-\-ignore-urls "/^http:\/\/127.0.0.1/,/^http:\/\/0.0.0.0/,/^http:\/\/localhost/"
|
|
||||||
|
|
||||||
- name: Upload site artifact
|
- name: Check baseurl
|
||||||
uses: actions/upload-pages-artifact@v3
|
run: |
|
||||||
with:
|
baseurl="$(grep '^baseurl:' _config.yml | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
|
||||||
path: "_site${{ steps.pages.outputs.base_path }}"
|
if [[ -n $baseurl ]]; then
|
||||||
|
echo "BASE_URL=$baseurl" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
|
||||||
deploy:
|
- name: Build Site
|
||||||
environment:
|
env:
|
||||||
name: github-pages
|
JEKYLL_ENV: production
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
run: |
|
||||||
runs-on: ubuntu-latest
|
bundle exec jekyll b -d "_site$BASE_URL"
|
||||||
needs: build
|
|
||||||
steps:
|
- name: Test Site
|
||||||
- name: Deploy to GitHub Pages
|
run: |
|
||||||
id: deployment
|
bash tools/test.sh
|
||||||
uses: actions/deploy-pages@v4
|
|
||||||
|
- 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
|
||||||
|
27
.gitignore
vendored
27
.gitignore
vendored
@ -1,27 +1,14 @@
|
|||||||
# Bundler cache
|
# hidden files
|
||||||
.bundle
|
.*
|
||||||
vendor
|
!.github
|
||||||
Gemfile.lock
|
|
||||||
|
|
||||||
# Jekyll cache
|
# jekyll cache
|
||||||
.jekyll-cache
|
|
||||||
.jekyll-metadata
|
|
||||||
_site
|
_site
|
||||||
|
vendor
|
||||||
|
|
||||||
# RubyGems
|
# rubygem
|
||||||
*.gem
|
*.gem
|
||||||
|
|
||||||
# NPM dependencies
|
# npm dependencies
|
||||||
node_modules
|
node_modules
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
# IDE configurations
|
|
||||||
.idea
|
|
||||||
.vscode/*
|
|
||||||
!.vscode/settings.json
|
|
||||||
!.vscode/extensions.json
|
|
||||||
!.vscode/tasks.json
|
|
||||||
|
|
||||||
# Misc
|
|
||||||
_sass/vendors
|
|
||||||
assets/js/dist
|
|
||||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
|||||||
[submodule "assets/lib"]
|
|
||||||
path = assets/lib
|
|
||||||
url = https://github.com/cotes2020/chirpy-static-assets.git
|
|
3
.vscode/extensions.json
vendored
3
.vscode/extensions.json
vendored
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": ["ms-vscode-remote.remote-containers"]
|
|
||||||
}
|
|
30
.vscode/settings.json
vendored
30
.vscode/settings.json
vendored
@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
// Prettier
|
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
||||||
"editor.formatOnSave": true,
|
|
||||||
// Shopify Liquid
|
|
||||||
"files.associations": {
|
|
||||||
"*.html": "liquid"
|
|
||||||
},
|
|
||||||
"[markdown]": {
|
|
||||||
"editor.defaultFormatter": "yzhang.markdown-all-in-one"
|
|
||||||
},
|
|
||||||
// Formatter
|
|
||||||
"[html][liquid]": {
|
|
||||||
"editor.defaultFormatter": "Shopify.theme-check-vscode"
|
|
||||||
},
|
|
||||||
"[shellscript]": {
|
|
||||||
"editor.defaultFormatter": "mkhl.shfmt"
|
|
||||||
},
|
|
||||||
// Disable vscode built-in stylelint
|
|
||||||
"css.validate": false,
|
|
||||||
"scss.validate": false,
|
|
||||||
"less.validate": false,
|
|
||||||
// Stylint extension settings
|
|
||||||
"stylelint.snippet": ["css", "scss"],
|
|
||||||
"stylelint.validate": ["css", "scss"],
|
|
||||||
// Run tasks in macOS
|
|
||||||
"terminal.integrated.profiles.osx": {
|
|
||||||
"zsh": { "path": "/bin/zsh", "args": ["-l", "-i"] }
|
|
||||||
}
|
|
||||||
}
|
|
26
.vscode/tasks.json
vendored
26
.vscode/tasks.json
vendored
@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "2.0.0",
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"label": "Run Jekyll Server",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "./tools/run.sh",
|
|
||||||
"group": {
|
|
||||||
"kind": "build",
|
|
||||||
"isDefault": true
|
|
||||||
},
|
|
||||||
"problemMatcher": [],
|
|
||||||
"detail": "Runs the Jekyll server with live reload."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "Build Jekyll Site",
|
|
||||||
"type": "shell",
|
|
||||||
"command": "./tools/test.sh",
|
|
||||||
"group": {
|
|
||||||
"kind": "build"
|
|
||||||
},
|
|
||||||
"problemMatcher": [],
|
|
||||||
"detail": "Build the Jekyll site for production."
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
21
404.html
Normal file
21
404.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
layout: page
|
||||||
|
title: "404: Page not found"
|
||||||
|
permalink: /404.html
|
||||||
|
|
||||||
|
redirect_from:
|
||||||
|
- /norobots/
|
||||||
|
- /assets/
|
||||||
|
- /posts/
|
||||||
|
|
||||||
|
dynamic_title: true
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="lead">
|
||||||
|
<p>Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. </p>
|
||||||
|
<p>
|
||||||
|
<a href="{{ '/' | relative_url }}">Head back Home</a>
|
||||||
|
to try finding it again, or search for it on the
|
||||||
|
<a href="{{ 'archives' | relative_url }}">Archives page</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
22
Gemfile
22
Gemfile
@ -1,14 +1,22 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
gem "jekyll-theme-chirpy", "~> 7.2", ">= 7.2.4"
|
gem "jekyll-theme-chirpy"
|
||||||
|
|
||||||
gem "html-proofer", "~> 5.0", group: :test
|
# If you have any plugins, put them here!
|
||||||
|
group :jekyll_plugins do
|
||||||
|
# gem "jekyll-xxx", "~> x.y"
|
||||||
|
end
|
||||||
|
|
||||||
platforms :mingw, :x64_mingw, :mswin, :jruby do
|
group :test do
|
||||||
gem "tzinfo", ">= 1", "< 3"
|
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"
|
gem "tzinfo-data"
|
||||||
end
|
end
|
||||||
|
|
||||||
gem "wdm", "~> 0.2.0", :platforms => [:mingw, :x64_mingw, :mswin]
|
# # # Performance-booster for watching directories on Windows
|
||||||
|
gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform?
|
||||||
|
82
README.md
82
README.md
@ -1,43 +1,85 @@
|
|||||||
# Chirpy Starter
|
# Chirpy Starter
|
||||||
|
|
||||||
[][gem]
|
[](https://rubygems.org/gems/jekyll-theme-chirpy)
|
||||||
[][mit]
|
[][mit]
|
||||||
|
|
||||||
When installing the [**Chirpy**][chirpy] theme through [RubyGems.org][gem], Jekyll can only read files in the folders
|
The startup template for [**Jekyll Theme Chirpy**][chirpy].
|
||||||
`_data`, `_layouts`, `_includes`, `_sass` and `assets`, as well as a small part of options of the `_config.yml` file
|
|
||||||
from the theme's gem. If you have ever installed this theme gem, you can use the command
|
|
||||||
`bundle info --path jekyll-theme-chirpy` to locate these files.
|
|
||||||
|
|
||||||
The Jekyll team claims that this is to leave the ball in the user’s court, but this also results in users not being
|
When installing the Chirpy through [RubyGems][gem], Jekyll can only read files in the folders `_includes`, `_layout`, `_sass` and `assets`, as well as a small part of options of the `_config.yml` file from the theme's gem (use the command `bundle info --path jekyll-theme-chirpy` to locate). To fully use all the features of Chirpy, you also need to copy other critical files/directories from the theme's gem to your Jekyll site.
|
||||||
able to enjoy the out-of-the-box experience when using feature-rich themes.
|
|
||||||
|
|
||||||
To fully use all the features of **Chirpy**, you need to copy the other critical files from the theme's gem to your
|
|
||||||
Jekyll site. The following is a list of targets:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
.
|
# The critical files/directories to run Chirpy theme
|
||||||
├── _config.yml
|
├── _data
|
||||||
├── _plugins
|
├── _plugins
|
||||||
├── _tabs
|
├── _tabs
|
||||||
└── index.html
|
├── _config.yml
|
||||||
|
├── app.js
|
||||||
|
├── feed.xml
|
||||||
|
├── index.html
|
||||||
|
├── robots.txt
|
||||||
|
├── sw.js
|
||||||
|
└── 404.html
|
||||||
```
|
```
|
||||||
|
|
||||||
To save you time, and also in case you lose some files while copying, we extract those files/configurations of the
|
We extracted all the necessary content of **Chirpy** theme's gem to help you quickly use the theme.
|
||||||
latest version of the **Chirpy** theme and the [CD][CD] workflow to here, so that you can start writing in minutes.
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
[Use this template][usetemplate] to generate a new repository, and then execute:
|
||||||
|
|
||||||
|
[usetemplate]: https://github.com/cotes2020/chirpy-starter/generate
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bundle
|
||||||
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Check out the [theme's docs](https://github.com/cotes2020/jekyll-theme-chirpy/wiki).
|
### Customing Stylesheet
|
||||||
|
|
||||||
## Contributing
|
Creare a new file `/assets/css/style.scss` in your Jekyll site.
|
||||||
|
|
||||||
This repository is automatically updated with new releases from the theme repository. If you encounter any issues or want to contribute to its improvement, please visit the [theme repository][chirpy] to provide feedback.
|
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 the section [Customing Stylesheet](#customing-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
|
## License
|
||||||
|
|
||||||
This work is published under [MIT][mit] License.
|
This work is published under [MIT](mit) License.
|
||||||
|
|
||||||
[gem]: https://rubygems.org/gems/jekyll-theme-chirpy
|
[gem]: https://rubygems.org/gems/jekyll-theme-chirpy
|
||||||
[chirpy]: https://github.com/cotes2020/jekyll-theme-chirpy/
|
[chirpy]: https://github.com/cotes2020/jekyll-theme-chirpy/
|
||||||
[CD]: https://en.wikipedia.org/wiki/Continuous_deployment
|
|
||||||
[mit]: https://github.com/cotes2020/chirpy-starter/blob/master/LICENSE
|
[mit]: https://github.com/cotes2020/chirpy-starter/blob/master/LICENSE
|
||||||
|
187
_config.yml
187
_config.yml
@ -3,79 +3,62 @@
|
|||||||
# Import the theme
|
# Import the theme
|
||||||
theme: jekyll-theme-chirpy
|
theme: jekyll-theme-chirpy
|
||||||
|
|
||||||
# The language of the webpage › http://www.lingoes.net/en/translator/langcode.htm
|
# Only if your site type is GitHub Project sites and doesn't have a custom domain,
|
||||||
# If it has the same name as one of the files in folder `_data/locales`, the layout language will also be changed,
|
# change below value to '/projectname'.
|
||||||
# otherwise, the layout language will use the default value of 'en'.
|
baseurl: ''
|
||||||
lang: en
|
|
||||||
|
|
||||||
# Change to your timezone › https://kevinnovak.github.io/Time-Zone-Picker
|
# the HTML language tag › https://www.w3.org/International/questions/qa-choosing-language-tags
|
||||||
timezone:
|
lang: en-US
|
||||||
|
|
||||||
|
# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone
|
||||||
|
timezone: Asia/Shanghai
|
||||||
|
|
||||||
# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
|
# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
|
||||||
# ↓ --------------------------
|
# --------------------------
|
||||||
|
|
||||||
title: Chirpy # the main title
|
title: Chirpy # the main title
|
||||||
|
|
||||||
tagline: A text-focused Jekyll theme # it will display as the subtitle
|
tagline: A text-focused Jekyll theme # it will display as the sub-title
|
||||||
|
|
||||||
description: >- # used by seo meta and the atom feed
|
description: >- # used by seo meta and the atom feed
|
||||||
A minimal, responsive and feature-rich Jekyll theme for technical writing.
|
A minimal, portfolio, sidebar,
|
||||||
|
bootstrap Jekyll theme with responsive web design
|
||||||
|
and focuses on text presentation.
|
||||||
|
|
||||||
# Fill in the protocol & hostname for your site.
|
# fill in the protocol & hostname for your site, e.g., 'https://username.github.io'
|
||||||
# E.g. 'https://username.github.io', note that it does not end with a '/'.
|
url: ''
|
||||||
url: ""
|
|
||||||
|
author: your_full_name # change to your full name
|
||||||
|
|
||||||
github:
|
github:
|
||||||
username: github_username # change to your GitHub username
|
username: github_username # change to your github username
|
||||||
|
|
||||||
twitter:
|
twitter:
|
||||||
username: twitter_username # change to your Twitter username
|
username: twitter_username # change to your twitter username
|
||||||
|
|
||||||
social:
|
social:
|
||||||
# Change to your full name.
|
name: your_full_name # it will shows as the copyright owner in Footer
|
||||||
# It will be displayed as the default author of the posts and the copyright owner in the Footer
|
email: example@doamin.com # change to your email address
|
||||||
name: your_full_name
|
|
||||||
email: example@domain.com # change to your email address
|
|
||||||
links:
|
links:
|
||||||
# The first element serves as the copyright owner's link
|
# The first element serves as the copyright owner's link
|
||||||
- https://twitter.com/username # change to your Twitter homepage
|
- https://twitter.com/username # change to your twitter homepage
|
||||||
- https://github.com/username # change to your GitHub homepage
|
- https://github.com/username # change to your github homepage
|
||||||
# Uncomment below to add more social links
|
# Uncomment below to add more social links
|
||||||
# - https://www.facebook.com/username
|
# - https://www.facebook.com/username
|
||||||
# - https://www.linkedin.com/in/username
|
# - https://www.linkedin.com/in/username
|
||||||
|
|
||||||
# Site Verification Settings
|
google_site_verification: google_meta_tag_verification # change to your verification string
|
||||||
webmaster_verifications:
|
# --------------------------
|
||||||
google: # fill in your Google verification code
|
|
||||||
bing: # fill in your Bing verification code
|
|
||||||
alexa: # fill in your Alexa verification code
|
|
||||||
yandex: # fill in your Yandex verification code
|
|
||||||
baidu: # fill in your Baidu verification code
|
|
||||||
facebook: # fill in your Facebook verification code
|
|
||||||
|
|
||||||
# ↑ --------------------------
|
google_analytics:
|
||||||
# The end of `jekyll-seo-tag` settings
|
id: '' # Fill with your Google Analytics ID
|
||||||
|
pv:
|
||||||
# Web Analytics Settings
|
# The Google Analytics pageviews switch.
|
||||||
analytics:
|
# DO NOT enable it unless you know how to deploy the Google Analytics superProxy.
|
||||||
google:
|
enabled: false
|
||||||
id: # fill in your Google Analytics ID
|
# the next options only valid when `google_analytics.pv` is enabled.
|
||||||
goatcounter:
|
proxy_url: ''
|
||||||
id: # fill in your GoatCounter ID
|
proxy_endpoint: ''
|
||||||
umami:
|
cache: false # pv data local cache, good for the users from GFW area.
|
||||||
id: # fill in your Umami ID
|
|
||||||
domain: # fill in your Umami domain
|
|
||||||
matomo:
|
|
||||||
id: # fill in your Matomo ID
|
|
||||||
domain: # fill in your Matomo domain
|
|
||||||
cloudflare:
|
|
||||||
id: # fill in your Cloudflare Web Analytics token
|
|
||||||
fathom:
|
|
||||||
id: # fill in your Fathom Site ID
|
|
||||||
|
|
||||||
# Page views settings
|
|
||||||
pageviews:
|
|
||||||
provider: # now only supports 'goatcounter'
|
|
||||||
|
|
||||||
# Prefer color scheme setting.
|
# Prefer color scheme setting.
|
||||||
#
|
#
|
||||||
@ -85,77 +68,33 @@ pageviews:
|
|||||||
#
|
#
|
||||||
# Available options:
|
# Available options:
|
||||||
#
|
#
|
||||||
# light — Use the light color scheme
|
# light - Use the light color scheme
|
||||||
# dark — Use the dark color scheme
|
# dark - Use the dark color scheme
|
||||||
#
|
#
|
||||||
theme_mode: # [light|dark]
|
theme_mode: # [light|dark]
|
||||||
|
|
||||||
# The CDN endpoint for media resources.
|
# The CDN endpoint for images.
|
||||||
# Notice that once it is assigned, the CDN url
|
# Notice that once it is assigned, the CDN url
|
||||||
# will be added to all media resources (site avatar, posts' images, audio and video files) paths starting with '/'
|
# will be added to all image (site avatar & posts' images) paths starting with '/'
|
||||||
#
|
#
|
||||||
# e.g. 'https://cdn.com'
|
# e.g. 'https://cdn.com'
|
||||||
cdn:
|
img_cdn: ''
|
||||||
|
|
||||||
# the avatar on sidebar, support local or CORS resources
|
# the avatar on sidebar, support local or CORS resources
|
||||||
avatar:
|
avatar: https://cdn.jsdelivr.net/gh/cotes2020/chirpy-images/commons/avatar.jpg
|
||||||
|
|
||||||
# The URL of the site-wide social preview image used in SEO `og:image` meta tag.
|
# boolean type, the global switch for ToC in posts.
|
||||||
# It can be overridden by a customized `page.image` in front matter.
|
|
||||||
social_preview_image: # string, local or CORS resources
|
|
||||||
|
|
||||||
# boolean type, the global switch for TOC in posts.
|
|
||||||
toc: true
|
toc: true
|
||||||
|
|
||||||
comments:
|
|
||||||
# Global switch for the post-comment system. Keeping it empty means disabled.
|
|
||||||
provider: # [disqus | utterances | giscus]
|
|
||||||
# The provider options are as follows:
|
|
||||||
disqus:
|
disqus:
|
||||||
shortname: # fill with the Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname
|
comments: false # boolean type, the global switch for posts comments.
|
||||||
# utterances settings › https://utteranc.es/
|
shortname: '' # Fill with your Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname
|
||||||
utterances:
|
|
||||||
repo: # <gh-username>/<repo>
|
|
||||||
issue_term: # < url | pathname | title | ...>
|
|
||||||
# Giscus options › https://giscus.app
|
|
||||||
giscus:
|
|
||||||
repo: # <gh-username>/<repo>
|
|
||||||
repo_id:
|
|
||||||
category:
|
|
||||||
category_id:
|
|
||||||
mapping: # optional, default to 'pathname'
|
|
||||||
strict: # optional, default to '0'
|
|
||||||
input_position: # optional, default to 'bottom'
|
|
||||||
lang: # optional, default to the value of `site.lang`
|
|
||||||
reactions_enabled: # optional, default to the value of `1`
|
|
||||||
|
|
||||||
# Self-hosted static assets, optional › https://github.com/cotes2020/chirpy-static-assets
|
|
||||||
assets:
|
|
||||||
self_host:
|
|
||||||
enabled: # boolean, keep empty means false
|
|
||||||
# specify the Jekyll environment, empty means both
|
|
||||||
# only works if `assets.self_host.enabled` is 'true'
|
|
||||||
env: # [development | production]
|
|
||||||
|
|
||||||
pwa:
|
|
||||||
enabled: true # The option for PWA feature (installable)
|
|
||||||
cache:
|
|
||||||
enabled: true # The option for PWA offline cache
|
|
||||||
# Paths defined here will be excluded from the PWA cache.
|
|
||||||
# Usually its value is the `baseurl` of another website that
|
|
||||||
# shares the same domain name as the current website.
|
|
||||||
deny_paths:
|
|
||||||
# - "/example" # URLs match `<SITE_URL>/example/*` will not be cached by the PWA
|
|
||||||
|
|
||||||
paginate: 10
|
paginate: 10
|
||||||
|
|
||||||
# The base URL of your site
|
|
||||||
baseurl: ""
|
|
||||||
|
|
||||||
# ------------ The following options are not recommended to be modified ------------------
|
# ------------ The following options are not recommended to be modified ------------------
|
||||||
|
|
||||||
kramdown:
|
kramdown:
|
||||||
footnote_backlink: "↩︎"
|
|
||||||
syntax_highlighter: rouge
|
syntax_highlighter: rouge
|
||||||
syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options
|
syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options
|
||||||
css_class: highlight
|
css_class: highlight
|
||||||
@ -166,32 +105,38 @@ kramdown:
|
|||||||
line_numbers: true
|
line_numbers: true
|
||||||
start_line: 1
|
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:
|
collections:
|
||||||
tabs:
|
tabs:
|
||||||
output: true
|
output: true
|
||||||
sort_by: order
|
sort_by: order
|
||||||
|
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
- scope:
|
-
|
||||||
path: "" # An empty string here means all files in the project
|
scope:
|
||||||
|
path: '' # An empty string here means all files in the project
|
||||||
type: posts
|
type: posts
|
||||||
values:
|
values:
|
||||||
layout: post
|
layout: post
|
||||||
comments: true # Enable comments in posts.
|
comments: true # Enable comments in posts.
|
||||||
toc: true # Display TOC column in posts.
|
toc: true # Display TOC column in posts.
|
||||||
# DO NOT modify the following parameter unless you are confident enough
|
-
|
||||||
# to update the code of all other post links in this project.
|
scope:
|
||||||
permalink: /posts/:title/
|
|
||||||
- scope:
|
|
||||||
path: _drafts
|
path: _drafts
|
||||||
values:
|
values:
|
||||||
comments: false
|
comments: false
|
||||||
- scope:
|
-
|
||||||
path: ""
|
scope:
|
||||||
|
path: ''
|
||||||
type: tabs # see `site.collections`
|
type: tabs # see `site.collections`
|
||||||
values:
|
values:
|
||||||
layout: page
|
layout: page
|
||||||
permalink: /:title/
|
permalink: /:title/
|
||||||
|
dynamic_title: true # Hide title in mobile screens.
|
||||||
|
|
||||||
sass:
|
sass:
|
||||||
style: compressed
|
style: compressed
|
||||||
@ -206,15 +151,19 @@ compress_html:
|
|||||||
envs: [development]
|
envs: [development]
|
||||||
|
|
||||||
exclude:
|
exclude:
|
||||||
- "*.gem"
|
- vendor
|
||||||
- "*.gemspec"
|
- Gemfile
|
||||||
- docs
|
- Gemfile.lock
|
||||||
|
- '*.gem'
|
||||||
|
- '*.gemspec'
|
||||||
- tools
|
- tools
|
||||||
|
- docs
|
||||||
- README.md
|
- README.md
|
||||||
- LICENSE
|
- LICENSE
|
||||||
- purgecss.js
|
- gulpfile.js
|
||||||
- rollup.config.js
|
- node_modules
|
||||||
- "package*.json"
|
- package.json
|
||||||
|
- package-lock.json
|
||||||
|
|
||||||
jekyll-archives:
|
jekyll-archives:
|
||||||
enabled: [categories, tags]
|
enabled: [categories, tags]
|
||||||
|
@ -1,40 +1,30 @@
|
|||||||
# The contact options.
|
# The contact options.
|
||||||
|
|
||||||
- type: github
|
-
|
||||||
icon: "fab fa-github"
|
type: github
|
||||||
|
icon: 'fab fa-github-alt'
|
||||||
- type: twitter
|
-
|
||||||
icon: "fa-brands fa-x-twitter"
|
type: twitter
|
||||||
|
icon: 'fab fa-twitter'
|
||||||
- type: email
|
-
|
||||||
icon: "fas fa-envelope"
|
type: email
|
||||||
|
icon: 'fas fa-envelope'
|
||||||
noblank: true # open link in current tab
|
noblank: true # open link in current tab
|
||||||
|
-
|
||||||
- type: rss
|
type: rss
|
||||||
icon: "fas fa-rss"
|
icon: 'fas fa-rss'
|
||||||
noblank: true
|
noblank: true
|
||||||
|
|
||||||
# Uncomment and complete the url below to enable more contact options
|
# Uncomment and complete the url below to enable more contact options
|
||||||
#
|
# -
|
||||||
# - type: mastodon
|
# type: mastodon
|
||||||
# icon: 'fab fa-mastodon' # icons powered by <https://fontawesome.com/>
|
# icon: 'fab fa-mastodon' # icons powered by <https://fontawesome.com/>
|
||||||
# url: '' # Fill with your Mastodon account page, rel="me" will be applied for verification
|
# url: '' # Fill with your mastodon account page
|
||||||
#
|
# -
|
||||||
# - type: linkedin
|
# type: linkedin
|
||||||
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
|
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
|
||||||
# url: '' # Fill with your Linkedin homepage
|
# url: '' # Fill with your Linkedin homepage
|
||||||
#
|
# -
|
||||||
# - type: stack-overflow
|
# type: stack-overflow
|
||||||
# icon: 'fab fa-stack-overflow'
|
# icon: 'fab fa-stack-overflow'
|
||||||
# url: '' # Fill with your stackoverflow homepage
|
# url: '' # Fill with your stackoverflow homepage
|
||||||
#
|
|
||||||
# - type: bluesky
|
|
||||||
# icon: 'fa-brands fa-bluesky'
|
|
||||||
# url: '' # Fill with your Bluesky profile link
|
|
||||||
#
|
|
||||||
# - type: reddit
|
|
||||||
# icon: 'fa-brands fa-reddit'
|
|
||||||
# url: '' # Fill with your Reddit profile link
|
|
||||||
#
|
|
||||||
# - type: threads
|
|
||||||
# icon: 'fa-brands fa-threads'
|
|
||||||
# url: '' # Fill with your Threads profile link
|
|
||||||
|
7
_data/date_format.yml
Normal file
7
_data/date_format.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# The date format
|
||||||
|
|
||||||
|
tooltip: "%a, %b %e, %Y, %l:%M %p %z"
|
||||||
|
|
||||||
|
post:
|
||||||
|
long: "%b %e, %Y"
|
||||||
|
short: "%b %e"
|
19
_data/label.yml
Normal file
19
_data/label.yml
Normal file
@ -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
|
11
_data/rights.yml
Normal file
11
_data/rights.yml
Normal file
@ -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.
|
@ -2,49 +2,26 @@
|
|||||||
# Icons from <https://fontawesome.com/>
|
# Icons from <https://fontawesome.com/>
|
||||||
|
|
||||||
platforms:
|
platforms:
|
||||||
- type: Twitter
|
-
|
||||||
icon: "fa-brands fa-square-x-twitter"
|
type: Twitter
|
||||||
|
icon: "fab fa-twitter"
|
||||||
link: "https://twitter.com/intent/tweet?text=TITLE&url=URL"
|
link: "https://twitter.com/intent/tweet?text=TITLE&url=URL"
|
||||||
|
-
|
||||||
- type: Facebook
|
type: Facebook
|
||||||
icon: "fab fa-facebook-square"
|
icon: "fab fa-facebook-square"
|
||||||
link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL"
|
link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL"
|
||||||
|
-
|
||||||
- type: Telegram
|
type: Telegram
|
||||||
icon: "fab fa-telegram"
|
icon: "fab fa-telegram"
|
||||||
link: "https://t.me/share/url?url=URL&text=TITLE"
|
link: "https://telegram.me/share?text=TITLE&url=URL"
|
||||||
|
|
||||||
# Uncomment below if you need to.
|
# Uncomment below if you need to.
|
||||||
#
|
# -
|
||||||
# - type: Linkedin
|
# type: Linkedin
|
||||||
# icon: "fab fa-linkedin"
|
# icon: "fab fa-linkedin"
|
||||||
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
|
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
|
||||||
#
|
#
|
||||||
# - type: Weibo
|
# -
|
||||||
|
# type: Weibo
|
||||||
# icon: "fab fa-weibo"
|
# icon: "fab fa-weibo"
|
||||||
# link: "https://service.weibo.com/share/share.php?title=TITLE&url=URL"
|
# link: "http://service.weibo.com/share/share.php?title=TITLE&url=URL"
|
||||||
#
|
|
||||||
# - type: Mastodon
|
|
||||||
# icon: "fa-brands fa-mastodon"
|
|
||||||
# # See: https://github.com/justinribeiro/share-to-mastodon#properties
|
|
||||||
# instances:
|
|
||||||
# - label: mastodon.social
|
|
||||||
# link: "https://mastodon.social/"
|
|
||||||
# - label: mastodon.online
|
|
||||||
# link: "https://mastodon.online/"
|
|
||||||
# - label: fosstodon.org
|
|
||||||
# link: "https://fosstodon.org/"
|
|
||||||
# - label: photog.social
|
|
||||||
# link: "https://photog.social/"
|
|
||||||
#
|
|
||||||
# - type: Bluesky
|
|
||||||
# icon: "fa-brands fa-bluesky"
|
|
||||||
# link: "https://bsky.app/intent/compose?text=TITLE%20URL"
|
|
||||||
#
|
|
||||||
# - type: Reddit
|
|
||||||
# icon: "fa-brands fa-square-reddit"
|
|
||||||
# link: "https://www.reddit.com/submit?url=URL&title=TITLE"
|
|
||||||
#
|
|
||||||
# - type: Threads
|
|
||||||
# icon: "fa-brands fa-square-threads"
|
|
||||||
# link: "https://www.threads.net/intent/post?text=TITLE%20URL"
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
---
|
---
|
||||||
# the default layout is 'page'
|
title: About
|
||||||
icon: fas fa-info-circle
|
icon: fas fa-info
|
||||||
order: 4
|
order: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
> Add Markdown syntax content to file `_tabs/about.md`{: .filepath } and it will show up on this page.
|
|
||||||
{: .prompt-tip }
|
> **Note**: Add Markdown syntax content to file `_tabs/about.md` and it will show up on this page.
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
---
|
---
|
||||||
layout: archives
|
layout: archives
|
||||||
|
title: Archives
|
||||||
icon: fas fa-archive
|
icon: fas fa-archive
|
||||||
order: 3
|
order: 3
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
layout: categories
|
layout: categories
|
||||||
|
title: Categories
|
||||||
icon: fas fa-stream
|
icon: fas fa-stream
|
||||||
order: 1
|
order: 1
|
||||||
---
|
---
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
layout: tags
|
layout: tags
|
||||||
|
title: Tags
|
||||||
icon: fas fa-tags
|
icon: fas fa-tags
|
||||||
order: 2
|
order: 2
|
||||||
---
|
---
|
||||||
|
8
app.js
Normal file
8
app.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
layout: compress
|
||||||
|
---
|
||||||
|
|
||||||
|
/* Registering Service Worker */
|
||||||
|
if('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.register('{{ "/sw.js" | relative_url }}');
|
||||||
|
};
|
@ -1 +0,0 @@
|
|||||||
Subproject commit b9e18a1510e3be5de250ed34205da318b76474e0
|
|
60
feed.xml
Normal file
60
feed.xml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
layout: compress
|
||||||
|
# Atom Feed, reference: https://validator.w3.org/feed/docs/atom.html
|
||||||
|
---
|
||||||
|
|
||||||
|
{% capture source %}
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<id>{{ "/" | absolute_url }}</id>
|
||||||
|
<title>{{ site.title }}</title>
|
||||||
|
<subtitle>{{ site.description }}</subtitle>
|
||||||
|
<updated>{{ site.time | date_to_xmlschema }}</updated>
|
||||||
|
<author>
|
||||||
|
<name>{{ site.author }}</name>
|
||||||
|
<uri>{{ "/" | absolute_url }}</uri>
|
||||||
|
</author>
|
||||||
|
<link rel="self" type="application/atom+xml" href="{{ page.url | absolute_url }}"/>
|
||||||
|
<link rel="alternate" type="text/html" hreflang="{{ site.lang | default: 'en' }}"
|
||||||
|
href="{{ '/' | absolute_url }}"/>
|
||||||
|
<generator uri="https://jekyllrb.com/" version="{{ jekyll.version }}">Jekyll</generator>
|
||||||
|
<rights> © {{ 'now' | date: '%Y' }} {{ site.author }} </rights>
|
||||||
|
<icon>{{ site.baseurl }}/assets/img/favicons/favicon.ico</icon>
|
||||||
|
<logo>{{ site.baseurl }}/assets/img/favicons/favicon-96x96.png</logo>
|
||||||
|
|
||||||
|
{% for post in site.posts limit: 5 %}
|
||||||
|
{% assign post_absolute_url = post.url | absolute_url %}
|
||||||
|
<entry>
|
||||||
|
<title>{{ post.title }}</title>
|
||||||
|
<link href="{{ post_absolute_url }}" rel="alternate" type="text/html" title="{{ post.title }}" />
|
||||||
|
<published>{{ post.date | date_to_xmlschema }}</published>
|
||||||
|
{% if post.last_modified_at %}
|
||||||
|
<updated>{{ post.last_modified_at | date_to_xmlschema }}</updated>
|
||||||
|
{% else %}
|
||||||
|
<updated>{{ post.date | date_to_xmlschema }}</updated>
|
||||||
|
{% endif %}
|
||||||
|
<id>{{ post_absolute_url }}</id>
|
||||||
|
<content src="{{ post_absolute_url }}" />
|
||||||
|
<author>
|
||||||
|
<name>{{ site.author }}</name>
|
||||||
|
</author>
|
||||||
|
|
||||||
|
{% if post.categories %}
|
||||||
|
{% for category in post.categories %}
|
||||||
|
<category term="{{ category }}" />
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if post.summary %}
|
||||||
|
<summary>{{ post.summary | strip }}</summary>
|
||||||
|
{% else %}
|
||||||
|
<summary>
|
||||||
|
{% include no-linenos.html content=post.content %}
|
||||||
|
{{ content | strip_html | truncate: 400 }}
|
||||||
|
</summary>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</entry>
|
||||||
|
{% endfor %}
|
||||||
|
</feed>
|
||||||
|
{% endcapture %}
|
||||||
|
{{ source | replace: '&', '&' }}
|
10
robots.txt
Normal file
10
robots.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
permalink: robots.txt
|
||||||
|
# The robots rules
|
||||||
|
---
|
||||||
|
|
||||||
|
User-agent: *
|
||||||
|
|
||||||
|
Disallow: /norobots/
|
||||||
|
|
||||||
|
Sitemap: {{ '/sitemap.xml' | absolute_url }}
|
61
sw.js
Normal file
61
sw.js
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
73
tools/deploy.sh
Executable file
73
tools/deploy.sh
Executable file
@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Deploy the content of _site to 'origin/<pages_branch>'
|
||||||
|
|
||||||
|
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
|
54
tools/run.sh
54
tools/run.sh
@ -1,54 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Run jekyll serve and then launch the site
|
|
||||||
|
|
||||||
prod=false
|
|
||||||
command="bundle exec jekyll s -l"
|
|
||||||
host="127.0.0.1"
|
|
||||||
|
|
||||||
help() {
|
|
||||||
echo "Usage:"
|
|
||||||
echo
|
|
||||||
echo " bash /path/to/run [options]"
|
|
||||||
echo
|
|
||||||
echo "Options:"
|
|
||||||
echo " -H, --host [HOST] Host to bind to."
|
|
||||||
echo " -p, --production Run Jekyll in 'production' mode."
|
|
||||||
echo " -h, --help Print this help information."
|
|
||||||
}
|
|
||||||
|
|
||||||
while (($#)); do
|
|
||||||
opt="$1"
|
|
||||||
case $opt in
|
|
||||||
-H | --host)
|
|
||||||
host="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-p | --production)
|
|
||||||
prod=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-h | --help)
|
|
||||||
help
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "> Unknown option: '$opt'\n"
|
|
||||||
help
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
command="$command -H $host"
|
|
||||||
|
|
||||||
if $prod; then
|
|
||||||
command="JEKYLL_ENV=production $command"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e /proc/1/cgroup ] && grep -q docker /proc/1/cgroup; then
|
|
||||||
command="$command --force_polling"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "\n> $command\n"
|
|
||||||
eval "$command"
|
|
@ -1,76 +1,45 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# Build and test the site content
|
# Using HTML-proofer to test site.
|
||||||
#
|
#
|
||||||
# Requirement: html-proofer, jekyll
|
# Requirement: https://github.com/gjtorikian/html-proofer
|
||||||
#
|
#
|
||||||
# Usage: See help information
|
# Usage: bash /path/to/test.sh [indicated path]
|
||||||
|
|
||||||
set -eu
|
DEST=_site
|
||||||
|
URL_IGNORE=cdn.jsdelivr.net
|
||||||
|
|
||||||
SITE_DIR="_site"
|
_build=false
|
||||||
|
|
||||||
_config="_config.yml"
|
|
||||||
|
|
||||||
_baseurl=""
|
|
||||||
|
|
||||||
help() {
|
help() {
|
||||||
echo "Build and test the site content"
|
|
||||||
echo
|
|
||||||
echo "Usage:"
|
echo "Usage:"
|
||||||
echo
|
echo
|
||||||
echo " bash $0 [options]"
|
echo " bash ./tools/test.sh [options]"
|
||||||
echo
|
echo
|
||||||
echo "Options:"
|
echo "Options:"
|
||||||
echo ' -c, --config "<config_a[,config_b[...]]>" Specify config file(s)'
|
echo " --build Run Jekyll build before test."
|
||||||
|
echo " -d, --dir <path> Specify the test path."
|
||||||
echo " -h, --help Print this information."
|
echo " -h, --help Print this information."
|
||||||
}
|
}
|
||||||
|
|
||||||
read_baseurl() {
|
if [[ -n $1 && -d $1 ]]; then
|
||||||
if [[ $_config == *","* ]]; then
|
DEST=$1
|
||||||
# multiple config
|
|
||||||
IFS=","
|
|
||||||
read -ra config_array <<<"$_config"
|
|
||||||
|
|
||||||
# reverse loop the config files
|
|
||||||
for ((i = ${#config_array[@]} - 1; i >= 0; i--)); do
|
|
||||||
_tmp_baseurl="$(grep '^baseurl:' "${config_array[i]}" | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
|
|
||||||
|
|
||||||
if [[ -n $_tmp_baseurl ]]; then
|
|
||||||
_baseurl="$_tmp_baseurl"
|
|
||||||
break
|
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
|
|
||||||
else
|
|
||||||
# single config
|
|
||||||
_baseurl="$(grep '^baseurl:' "$_config" | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
|
||||||
# clean up
|
|
||||||
if [[ -d $SITE_DIR ]]; then
|
|
||||||
rm -rf "$SITE_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
read_baseurl
|
|
||||||
|
|
||||||
# build
|
|
||||||
JEKYLL_ENV=production bundle exec jekyll b \
|
|
||||||
-d "$SITE_DIR$_baseurl" -c "$_config"
|
|
||||||
|
|
||||||
# test
|
|
||||||
bundle exec htmlproofer "$SITE_DIR" \
|
|
||||||
--disable-external \
|
|
||||||
--ignore-urls "/^http:\/\/127.0.0.1/,/^http:\/\/0.0.0.0/,/^http:\/\/localhost/"
|
|
||||||
}
|
|
||||||
|
|
||||||
while (($#)); do
|
while (($#)); do
|
||||||
opt="$1"
|
opt="$1"
|
||||||
case $opt in
|
case $opt in
|
||||||
-c | --config)
|
--build)
|
||||||
_config="$2"
|
_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
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
@ -86,4 +55,13 @@ while (($#)); do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
main
|
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user