forked from alshedivat/al-folio
-
Notifications
You must be signed in to change notification settings - Fork 1
/
deploy
executable file
·116 lines (95 loc) · 2.65 KB
/
deploy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env bash
# Run this script to deploy the app to Github Pages
# Parse cmd arguments
SRC_BRANCH="master"
DEPLOY_BRANCH="gh-pages"
USAGE_MSG="usage: deploy [-h|--help] [-u|--user] [-s|--src SRC_BRANCH] [-d|--deploy DEPLOY_BRANCH] [--verbose] [--no-push]"
while [[ $# > 0 ]]; do
key="$1"
case $key in
-h|--help)
echo $USAGE_MSG
exit 0
;;
-u|--user)
;;
-s|--src)
SRC_BRANCH="$2"
shift
;;
-d|--deploy)
DEPLOY_BRANCH="$2"
shift
;;
--verbose)
set -x
;;
--no-push)
NO_PUSH="--no-push"
;;
*)
echo "Option $1 is unknown." >&2
echo $USAGE_MSG >&2
exit 1
;;
esac
shift
done
# Exit if any subcommand fails
set -e
echo "Deploying..."
echo "Source branch: $SRC_BRANCH"
echo "Deploy branch: $DEPLOY_BRANCH"
read -r -p "Do you want to proceed? [y/N] " response
if [[ ! $response =~ ^([yY][eE][sS]|[yY])+$ ]]
then
echo "Aborting."
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
fi
# Check if there are any uncommitted changes
if ! git diff-index --quiet HEAD --; then
echo "Changes to the following files are uncommitted:"
git diff-index --name-only HEAD --
echo "Please commit the changes before proceeding."
echo "Aborting."
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
fi
# Check if there are any untracked files
if ! test -z "$(git ls-files --exclude-standard --others)"; then
echo "There are untracked files:"
git ls-files --exclude-standard --others
echo "Please commit those files or stash them before proceeding."
echo "Aborting."
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
fi
# Switch to source branch (creates it if necessary from the current branch)
if [ `git branch | grep $SRC_BRANCH | tr ' ' '\n' | tail -1` ]
then
git checkout $SRC_BRANCH
else
git checkout -b $SRC_BRANCH
fi
# Checkout DEPLOY_BRANCH branch
if [ `git branch | grep $DEPLOY_BRANCH` ]
then
git branch -D $DEPLOY_BRANCH
fi
git checkout -b $DEPLOY_BRANCH
# Export JEKYLL_ENV=production
export JEKYLL_ENV=production
# Build site
bundle exec jekyll build
# Delete and move files
find . -maxdepth 1 ! -name '_site' ! -name '.git' ! -name 'CNAME' ! -name '.gitignore' -exec rm -rf {} \;
mv _site/* .
rm -R _site/
# Create `.nojekyll` file (bypass GitHub Pages Jekyll processing)
touch .nojekyll
# Push to DEPLOY_BRANCH
git add -fA
git commit --allow-empty -m "$(git log -1 --pretty=%B) [ci skip]"
[[ ${NO_PUSH} ]] || git push -f -q origin $DEPLOY_BRANCH
# Move back to SRC_BRANCH
git checkout $SRC_BRANCH
echo "Deployed successfully!"
exit 0