/
gbuild.sh
executable file
·129 lines (106 loc) · 3.26 KB
/
gbuild.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env bash
# GAZE
# Turnkey Open Media Center
# __ .-.
# .-"` .`'. /\\|
# _(\-/)_" , . ,\ /\\\/ =o O=
# {(=o^O=)} . ./, |/\\\/
# `-.(Y).-` , | , |\.-`
# /~/,_/~~~\,__.-` =O o=
# ////~ // ~\\
# ==`==` ==` ==`
# gaze.monokal.io
set -e
function print_usage {
cat <<EOF
usage: gbuild [-h] {build,test,push,all} ...
GAZE build tool.
positional arguments:
{build,test,push,all}
build build the gazectl Docker Image and documentation
test test gazectl functionality
push push the gazectl Docker Image, documentation and code
all do all of the above in that order
optional arguments:
-h, --help show this help message and exit
EOF
}
function check_deps {
# Dependencies which should be in PATH.
# TODO: Run mkdocs in the container to remove the local dependency.
DEPS=( 'docker' 'mkdocs' )
for i in "${DEPS[@]}"; do
if ! hash "${i}" 2>/dev/null; then
echo -e "${RED}GBUILD > "${i}" is required to build GAZE. Please install it then try again.${NONE}"
exit 1
fi
done
}
function run_build {
# Build Docker Image.
echo -e "${MAGENTA}GBUILD > Building the ${NAMESPACE}/${IMAGE}:${TAG} Docker Image...${NONE}"
docker build -t "${NAMESPACE}/${IMAGE}:${TAG}" .
echo -e "${GREEN}GBUILD > OK.${NONE}"
# Copy docs/index.md to README.md
echo -e "${MAGENTA}GBUILD > Copying docs/index.md to README.md...${NONE}"
cp -v docs/index.md README.md
echo -e "${GREEN}GBUILD > OK.${NONE}"
# Build docs.
echo -e "${MAGENTA}GBUILD > Building documentation...${NONE}"
mkdocs build --clean
echo -e "${GREEN}GBUILD > OK.${NONE}"
}
function run_test {
echo -e "${MAGENTA}GBUILD > Running tests...${NONE}"
GAZECTL_COMMANDS=( \
'bootstrap' \
)
for i in "${GAZECTL_COMMANDS[@]}"; do
GAZECTL_VERSION="${TAG}" GAZECTL_UPDATE=${UPDATE} ./wrapper.sh ${i}
done
echo -e "${GREEN}GBUILD > OK.${NONE}"
}
function run_push {
# Push Docker Image.
echo -e "${MAGENTA}GBUILD > Pushing the ${NAMESPACE}/${IMAGE}:${TAG} Docker Image...${NONE}"
docker push "${NAMESPACE}/${IMAGE}:${TAG}"
echo -e "${GREEN}GBUILD > OK.${NONE}"
# Push docs.
echo -e "${MAGENTA}GBUILD > Pushing documentation...${NONE}"
mkdocs gh-deploy
echo -e "${GREEN}GBUILD > OK.${NONE}"
# Push everything else.
echo -e "${MAGENTA}GBUILD > Pushing all changes to Git...${NONE}"
git add -A && git commit -m "Pushed by gbuild." && git push
echo -e "${GREEN}GBUILD > OK.${NONE}"
}
# Environment variable overrides.
export NAMESPACE=${GAZECTL_NAMESPACE:='monokal'}
export IMAGE=${GAZECTL_IMAGE:='gazectl'}
export TAG=${GAZECTL_VERSION:='latest'}
export UPDATE=${GAZECTL_UPDATE:=false} # Default false as we're probably building locally.
MAGENTA=$(tput setaf 5)
GREEN=$(tput setaf 2)
RED=$(tput setaf 1)
NONE=$(tput sgr 0)
check_deps
case $1 in
build)
run_build
;;
test)
run_test
;;
push)
run_push
;;
all)
run_build
run_test
run_push
;;
*)
print_usage
exit 1
esac
echo -e "${GREEN}GBUILD > Finished.${NONE}"