web/tools/deploy.sh

74 lines
1.4 KiB
Bash
Raw Normal View History

2021-01-25 01:20:51 +03:00
#!/usr/bin/env bash
2020-07-28 21:27:40 +03:00
#
# Deploy the content of _site to 'origin/<pages_branch>'
set -eu
PAGES_BRANCH="gh-pages"
_no_branch=false
2020-09-01 06:53:14 +03:00
_backup_dir="$(mktemp -d)"
2020-07-28 21:27:40 +03:00
2020-09-01 06:53:14 +03:00
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
2021-01-26 18:26:03 +03:00
if [[ -n $(git ls-files | grep Gemfile.lock) && -n \
$(git status Gemfile.lock --porcelain) ]]; then
git checkout -- Gemfile.lock
fi
2020-09-01 06:53:14 +03:00
if [[ -z $(git branch -av | grep "$PAGES_BRANCH") ]]; then
_no_branch=true
git checkout -b "$PAGES_BRANCH"
else
git checkout "$PAGES_BRANCH"
fi
}
2020-07-28 21:27:40 +03:00
2020-09-01 06:53:14 +03:00
backup() {
mv _site/* "$_backup_dir"
2020-09-01 06:53:14 +03:00
mv .git "$_backup_dir"
2020-07-28 21:27:40 +03:00
2020-09-01 09:54:29 +03:00
# When adding custom domain from Github website,
2020-09-01 06:53:14 +03:00
# the CANME only exist on `gh-pages` branch
2020-09-01 09:54:29 +03:00
if [[ -f CNAME ]]; then
2020-09-01 06:53:14 +03:00
mv CNAME "$_backup_dir"
2020-09-01 09:54:29 +03:00
fi
2020-09-01 06:53:14 +03:00
}
2020-07-28 21:27:40 +03:00
2020-09-01 06:53:14 +03:00
flush() {
rm -rf ./*
rm -rf .[^.] .??*
2020-07-28 21:27:40 +03:00
2020-09-01 06:53:14 +03:00
shopt -s dotglob nullglob
mv "$_backup_dir"/* .
}
2020-07-28 21:27:40 +03:00
deploy() {
2020-09-01 06:53:14 +03:00
git config --global user.name "GitHub Actions"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
2020-07-28 21:27:40 +03:00
2020-09-01 06:53:14 +03:00
git update-ref -d HEAD
git add -A
git commit -m "[Automation] Site update No.${GITHUB_RUN_NUMBER}"
2020-09-01 09:54:29 +03:00
if $_no_branch; then
2020-09-01 06:53:14 +03:00
git push -u origin "$PAGES_BRANCH"
else
git push -f
fi
}
main() {
init
backup
flush
deploy
2020-09-01 06:53:14 +03:00
}
main