-
Notifications
You must be signed in to change notification settings - Fork 0
/
deploy.sh
executable file
·96 lines (77 loc) · 2.52 KB
/
deploy.sh
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
#!/usr/bin/env bash
set -o errexit #abort if any command fails
deploy_directory=dist
deploy_branch=gh-pages
#if no user identity is already set in the current git environment, use this:
default_username=deploy.sh
#repository to deploy to. must be readable and writable.
#using https url instead of ssh to avoid issues with host authenticity checks
repo=https://[email protected]/X1011/verge-mobile-bingo.git
if [[ $1 = "-v" || $1 = "--verbose" ]]; then
verbose=true
fi
#echo expanded commands as they are executed (for debugging)
function enable_expanded_output {
if [ $verbose ]; then
set -o xtrace
set +o verbose
fi
}
#this is used to avoid outputting the repo URL, which may contain a secret token
function disable_expanded_output {
if [ $verbose ]; then
set +o xtrace
set -o verbose
fi
}
enable_expanded_output
commit_title=`git log -n 1 --format="%s" HEAD`
commit_hash=`git log -n 1 --format="%H" HEAD`
function set_user_id {
if [[ -z `git config user.name` ]]; then
git config user.name "$default_username"
fi
if [[ -z `git config user.email` ]]; then
git config user.email "$default_email"
fi
}
previous_branch=`git rev-parse --abbrev-ref HEAD`
if ! git diff --exit-code --quiet --cached; then
echo Aborting due to uncommitted changes in the index
exit 1
fi
disable_expanded_output
git fetch --force $repo $deploy_branch:$deploy_branch
enable_expanded_output
#make deploy_branch the current branch
git symbolic-ref HEAD refs/heads/$deploy_branch
#put the previously committed contents of deploy_branch branch into the index
git --work-tree "$deploy_directory" reset --mixed --quiet
git --work-tree "$deploy_directory" add --all
set +o errexit
diff=$(git --work-tree "$deploy_directory" diff --exit-code --quiet HEAD)$?
set -o errexit
case $diff in
0) echo No changes to files in $deploy_directory. Skipping commit.;;
1)
set_user_id
git --work-tree "$deploy_directory" commit -m \
"publish: $commit_title"$'\n\n'"generated from commit $commit_hash"
disable_expanded_output
#--quiet is important here to avoid outputting the repo URL, which may contain a secret token
git push --quiet $repo $deploy_branch
enable_expanded_output
;;
*)
echo git diff exited with code $diff. Aborting.
exit $diff
;;
esac
if [[ $previous_branch = "HEAD" ]]; then
#we weren't on any branch before, so just set HEAD back to the commit it was on
git update-ref --no-deref HEAD $commit_hash $deploy_branch
else
git symbolic-ref HEAD refs/heads/$previous_branch
fi
git reset --mixed