first commit
This commit is contained in:
131
tools/init.sh
Executable file
131
tools/init.sh
Executable file
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Init the environment for new user.
|
||||
|
||||
set -eu
|
||||
|
||||
# CLI Dependencies
|
||||
CLI=("git" "npm")
|
||||
|
||||
ACTIONS_WORKFLOW=pages-deploy.yml
|
||||
|
||||
RELEASE_HASH=$(git log --grep="chore(release):" -1 --pretty="%H")
|
||||
|
||||
# temporary file suffixes that make `sed -i` compatible with BSD and Linux
|
||||
TEMP_SUFFIX="to-delete"
|
||||
|
||||
_no_gh=false
|
||||
|
||||
help() {
|
||||
echo "Usage:"
|
||||
echo
|
||||
echo " bash /path/to/init [options]"
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " --no-gh Do not deploy to Github."
|
||||
echo " -h, --help Print this help information."
|
||||
}
|
||||
|
||||
# BSD and GNU compatible sed
|
||||
_sedi() {
|
||||
regex=$1
|
||||
file=$2
|
||||
sed -i.$TEMP_SUFFIX -E "$regex" "$file"
|
||||
rm -f "$file".$TEMP_SUFFIX
|
||||
}
|
||||
|
||||
_check_cli() {
|
||||
for i in "${!CLI[@]}"; do
|
||||
cli="${CLI[$i]}"
|
||||
if ! command -v "$cli" &>/dev/null; then
|
||||
echo "Command '$cli' not found! Hint: you should install it."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
_check_status() {
|
||||
if [[ -n $(git status . -s) ]]; then
|
||||
echo "Error: Commit unstaged files first, and then run this tool again."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
_check_init() {
|
||||
if [[ $(git rev-parse HEAD^1) == "$RELEASE_HASH" ]]; then
|
||||
echo "Already initialized."
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
check_env() {
|
||||
_check_cli
|
||||
_check_status
|
||||
_check_init
|
||||
}
|
||||
|
||||
reset_latest() {
|
||||
git reset --hard "$RELEASE_HASH"
|
||||
git clean -fd
|
||||
git submodule update --init --recursive
|
||||
}
|
||||
|
||||
init_files() {
|
||||
if $_no_gh; then
|
||||
rm -rf .github
|
||||
else
|
||||
## Change the files of `.github/`
|
||||
temp="$(mktemp -d)"
|
||||
find .github/workflows -type f -name "*$ACTIONS_WORKFLOW*" -exec mv {} "$temp/$ACTIONS_WORKFLOW" \;
|
||||
rm -rf .github && mkdir -p .github/workflows
|
||||
mv "$temp/$ACTIONS_WORKFLOW" .github/workflows/"$ACTIONS_WORKFLOW"
|
||||
rm -rf "$temp"
|
||||
fi
|
||||
|
||||
# Cleanup image settings in site config
|
||||
_sedi "s/(^timezone:).*/\1/;s/(^.*cdn:).*/\1/;s/(^avatar:).*/\1/" _config.yml
|
||||
|
||||
# remove the other files
|
||||
rm -rf tools/init.sh tools/release.sh _posts/*
|
||||
|
||||
# build assets
|
||||
npm i && npm run build
|
||||
|
||||
# track the CSS/JS output
|
||||
_sedi "/^_sass\/vendors/d" .gitignore
|
||||
_sedi "/^assets\/js\/dist/d" .gitignore
|
||||
}
|
||||
|
||||
commit() {
|
||||
git add -A
|
||||
git commit -m "chore: initialize the environment" -q
|
||||
echo -e "\n> Initialization successful!\n"
|
||||
}
|
||||
|
||||
main() {
|
||||
check_env
|
||||
reset_latest
|
||||
init_files
|
||||
commit
|
||||
}
|
||||
|
||||
while (($#)); do
|
||||
opt="$1"
|
||||
case $opt in
|
||||
--no-gh)
|
||||
_no_gh=true
|
||||
shift
|
||||
;;
|
||||
-h | --help)
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
# unknown option
|
||||
help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
main
|
||||
Reference in New Issue
Block a user