Merge pull request #664 from GriceTurrble/patch-1
Build and deploy via GH actions only (no deploy script)
This commit is contained in:
commit
45c58d8f4c
6 changed files with 129 additions and 179 deletions
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
2
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -22,7 +22,7 @@ Please select the desired item checkbox and change it to "[x]", then delete opti
|
||||||
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
|
Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
|
||||||
-->
|
-->
|
||||||
|
|
||||||
- [ ] I have run `bash ./tools/deploy.sh --dry-run` (at the root of the project) locally and passed
|
- [ ] I have run `bash ./tools/test.sh` (at the root of the project) locally and passed
|
||||||
- [ ] I have tested this feature in the browser
|
- [ ] I have tested this feature in the browser
|
||||||
|
|
||||||
### Test Configuration
|
### Test Configuration
|
||||||
|
|
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
|
@ -20,18 +20,22 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
ruby: [2.5, 2.6, 2.7, 3]
|
ruby: [2.5, 2.6, 2.7, 3]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # for posts's lastmod
|
fetch-depth: 0 # for posts's lastmod
|
||||||
|
|
||||||
- name: Setup Ruby
|
- name: Setup Ruby
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
ruby-version: ${{ matrix.ruby }}
|
ruby-version: ${{ matrix.ruby }}
|
||||||
bundler-cache: true
|
bundler-cache: true
|
||||||
|
|
||||||
- name: Test Site
|
- name: Test Site
|
||||||
run: bash tools/deploy.sh --dry-run
|
run: bash tools/test.sh
|
||||||
|
|
59
.github/workflows/pages-deploy.yml.hook
vendored
59
.github/workflows/pages-deploy.yml.hook
vendored
|
@ -1,29 +1,72 @@
|
||||||
name: 'Automatic build'
|
name: "Build and deploy"
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
- main
|
||||||
- master
|
- master
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- .gitignore
|
- .gitignore
|
||||||
- README.md
|
- README.md
|
||||||
- LICENSE
|
- LICENSE
|
||||||
|
|
||||||
jobs:
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
continuous-delivery:
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
# Allow one concurrent deployment
|
||||||
|
concurrency:
|
||||||
|
group: "pages"
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0 # for posts's lastmod
|
fetch-depth: 0
|
||||||
|
# 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@v1
|
||||||
|
|
||||||
- name: Setup Ruby
|
- name: Setup Ruby
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
ruby-version: 2.7
|
ruby-version: 3 # reads from a '.ruby-version' or '.tools-version' file if 'ruby-version' is omitted
|
||||||
bundler-cache: true
|
bundler-cache: true
|
||||||
|
|
||||||
- name: Deploy
|
- name: Build site
|
||||||
run: bash tools/deploy.sh
|
run: bundle exec jekyll b -d "_site${{ steps.pages.outputs.base_path }}"
|
||||||
|
env:
|
||||||
|
JEKYLL_ENV: "production"
|
||||||
|
|
||||||
|
- name: Test site
|
||||||
|
run: |
|
||||||
|
bundle exec htmlproofer _site --disable-external --check-html --allow_hash_href
|
||||||
|
|
||||||
|
- name: Upload site artifact
|
||||||
|
uses: actions/upload-pages-artifact@v1
|
||||||
|
with:
|
||||||
|
path: "_site${{ steps.pages.outputs.base_path }}"
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
name: "Deploy site"
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v1
|
||||||
|
|
|
@ -113,8 +113,6 @@ Quickly check the files needed for GitHub Actions build:
|
||||||
|
|
||||||
- Ensure your Jekyll site has the file `.github/workflows/pages-deploy.yml`{: .filepath}. Otherwise, create a new one and fill in the contents of the [sample file][workflow], and the value of the `on.push.branches` should be the same as your repo's default branch name.
|
- Ensure your Jekyll site has the file `.github/workflows/pages-deploy.yml`{: .filepath}. Otherwise, create a new one and fill in the contents of the [sample file][workflow], and the value of the `on.push.branches` should be the same as your repo's default branch name.
|
||||||
|
|
||||||
- Ensure your Jekyll site has file `tools/deploy.sh`{: .filepath}. Otherwise, copy it from here to your Jekyll site.
|
|
||||||
|
|
||||||
- Furthermore, if you have committed `Gemfile.lock`{: .filepath} to the repo, and your runtime system is not Linux, don't forget to update the platform list in the lock file:
|
- Furthermore, if you have committed `Gemfile.lock`{: .filepath} to the repo, and your runtime system is not Linux, don't forget to update the platform list in the lock file:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
|
@ -123,13 +121,11 @@ Quickly check the files needed for GitHub Actions build:
|
||||||
|
|
||||||
After the above steps, rename your repository to `<GH_USERNAME>.github.io` on GitHub.
|
After the above steps, rename your repository to `<GH_USERNAME>.github.io` on GitHub.
|
||||||
|
|
||||||
Now publish your Jekyll site by:
|
Now publish your Jekyll site:
|
||||||
|
|
||||||
1. Push any commit to remote to trigger the GitHub Actions workflow. Once the build is complete and successful, a new remote branch named `gh-pages` will appear to store the built site files.
|
1. Browse to your repository on GitHub. Select the tab _Settings_, then click _Pages_ in the left navigation bar. Then, in the **Source** section (under _Build and deployment_), select [**GitHub Actions**][pages-workflow-src] from the dropdown menu.
|
||||||
|
|
||||||
2. Browse to your repository on GitHub. Select the tab _Settings_, then click _Pages_ in the left navigation bar, and then in the section **Source** of _GitHub Pages_, select the `/(root)` directory of branch `gh-pages` as the [publishing source][pages-src]. Remember to click <kbd>Save</kbd> before leaving.
|
2. Push any commit to remote to trigger the GitHub Actions workflow. In the _Actions_ tab of your repository, you should see the "Automatic build and deploy" workflow with at least one job running. Once the build is complete and successful, the site should be deployed automatically.
|
||||||
|
|
||||||
![gh-pages-sources](/posts/20190809/gh-pages-sources.png){: width="1580" height="250" }
|
|
||||||
|
|
||||||
3. Visit your website at the address indicated by GitHub.
|
3. Visit your website at the address indicated by GitHub.
|
||||||
|
|
||||||
|
@ -182,5 +178,5 @@ The merge is likely to conflict with your local modifications. Please be patient
|
||||||
[use-starter]: https://github.com/cotes2020/chirpy-starter/generate
|
[use-starter]: https://github.com/cotes2020/chirpy-starter/generate
|
||||||
[workflow]: https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/.github/workflows/pages-deploy.yml.hook
|
[workflow]: https://github.com/cotes2020/jekyll-theme-chirpy/blob/master/.github/workflows/pages-deploy.yml.hook
|
||||||
[chirpy-4.1.0]: https://github.com/cotes2020/jekyll-theme-chirpy/releases/tag/v4.1.0
|
[chirpy-4.1.0]: https://github.com/cotes2020/jekyll-theme-chirpy/releases/tag/v4.1.0
|
||||||
[pages-src]: https://docs.github.com/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site
|
[pages-workflow-src]: https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflowconfiguring-a-publishing-source-for-your-github-pages-site
|
||||||
[latest-tag]: https://github.com/cotes2020/jekyll-theme-chirpy/tags
|
[latest-tag]: https://github.com/cotes2020/jekyll-theme-chirpy/tags
|
||||||
|
|
160
tools/deploy.sh
160
tools/deploy.sh
|
@ -1,160 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# Build, test and then deploy the site content to 'origin/<pages_branch>'
|
|
||||||
#
|
|
||||||
# Requirement: html-proofer, jekyll
|
|
||||||
#
|
|
||||||
# Usage: See help information
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
PAGES_BRANCH="gh-pages"
|
|
||||||
|
|
||||||
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/<pages_branch>'"
|
|
||||||
echo
|
|
||||||
echo "Usage:"
|
|
||||||
echo
|
|
||||||
echo " bash ./tools/deploy.sh [options]"
|
|
||||||
echo
|
|
||||||
echo "Options:"
|
|
||||||
echo ' -c, --config "<config_a[,config_b[...]]>" 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} && $_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_pages_branch=true
|
|
||||||
git checkout -b "$PAGES_BRANCH"
|
|
||||||
else
|
|
||||||
git checkout -f "$PAGES_BRANCH"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
backup() {
|
|
||||||
mv "$SITE_DIR"/* "$_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"/* .
|
|
||||||
[[ -f ".nojekyll" ]] || echo "" >".nojekyll"
|
|
||||||
}
|
|
||||||
|
|
||||||
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_pages_branch; then
|
|
||||||
git push -u origin "$PAGES_BRANCH"
|
|
||||||
else
|
|
||||||
git push -f
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
67
tools/test.sh
Executable file
67
tools/test.sh
Executable file
|
@ -0,0 +1,67 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Build and test the site content
|
||||||
|
#
|
||||||
|
# Requirement: html-proofer, jekyll
|
||||||
|
#
|
||||||
|
# Usage: See help information
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
SITE_DIR="_site"
|
||||||
|
|
||||||
|
_config="_config.yml"
|
||||||
|
|
||||||
|
help() {
|
||||||
|
echo "Build and test the site content"
|
||||||
|
echo
|
||||||
|
echo "Usage:"
|
||||||
|
echo
|
||||||
|
echo " bash ./tools/test.sh [options]"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo ' -c, --config "<config_a[,config_b[...]]>" Specify config file(s)'
|
||||||
|
echo " -h, --help Print this information."
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
# clean up
|
||||||
|
if [[ -d $SITE_DIR ]]; then
|
||||||
|
rm -rf "$SITE_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
_baseurl="$(grep '^baseurl:' "$_config" | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
|
||||||
|
|
||||||
|
# build
|
||||||
|
JEKYLL_ENV=production bundle exec jekyll build \
|
||||||
|
--destination "$SITE_DIR$_baseurl" \
|
||||||
|
--config "$_config"
|
||||||
|
|
||||||
|
# test
|
||||||
|
bundle exec htmlproofer "$SITE_DIR" \
|
||||||
|
--disable-external \
|
||||||
|
--check-html \
|
||||||
|
--allow_hash_href
|
||||||
|
}
|
||||||
|
|
||||||
|
while (($#)); do
|
||||||
|
opt="$1"
|
||||||
|
case $opt in
|
||||||
|
-c | --config)
|
||||||
|
_config="$2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h | --help)
|
||||||
|
help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# unknown option
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
main
|
Loading…
Reference in a new issue