2
2
set -e
3
3
echoerr () { printf " %s\n" " $* " >&2 ; }
4
4
5
+ #
6
+ # Read environment variables from file if envrionment variable ${1}_FILE is set
7
+ #
5
8
file_env () {
6
9
local var=" "
7
10
local fileVar=" "
@@ -32,19 +35,15 @@ file_env() {
32
35
}
33
36
34
37
export SEMAPHORE_CONFIG_PATH=" ${SEMAPHORE_CONFIG_PATH:-/ etc/ semaphore} "
35
- export SEMAPHORE_TMP_PATH=" ${SEMAPHORE_TMP_PATH:-/ tmp/ semaphore} "
36
- export SEMAPHORE_DB_DIALECT=" ${SEMAPHORE_DB_DIALECT:- mysql} "
37
- export SEMAPHORE_DB_HOST=" ${SEMAPHORE_DB_HOST:- 0.0.0.0} "
38
38
export SEMAPHORE_DB_PATH=" ${SEMAPHORE_DB_PATH:-/ var/ lib/ semaphore} "
39
39
export SEMAPHORE_DB_PORT=" ${SEMAPHORE_DB_PORT:- } "
40
- export SEMAPHORE_DB=" ${SEMAPHORE_DB:- semaphore} "
41
40
42
- file_env ' SEMAPHORE_DB_USER' ' semaphore '
43
- file_env ' SEMAPHORE_DB_PASS' ' semaphore '
44
- file_env ' SEMAPHORE_ADMIN' ' admin '
41
+ file_env ' SEMAPHORE_DB_USER'
42
+ file_env ' SEMAPHORE_DB_PASS'
43
+ file_env ' SEMAPHORE_ADMIN'
45
44
export SEMAPHORE_ADMIN_EMAIL=" ${SEMAPHORE_ADMIN_EMAIL:- admin@ localhost} "
46
45
export SEMAPHORE_ADMIN_NAME=" ${SEMAPHORE_ADMIN_NAME:- Semaphore Admin} "
47
- file_env ' SEMAPHORE_ADMIN_PASSWORD' ' semaphorepassword '
46
+ file_env ' SEMAPHORE_ADMIN_PASSWORD'
48
47
export SEMAPHORE_LDAP_ACTIVATED=" ${SEMAPHORE_LDAP_ACTIVATED:- no} "
49
48
export SEMAPHORE_LDAP_HOST=" ${SEMAPHORE_LDAP_HOST:- } "
50
49
export SEMAPHORE_LDAP_PORT=" ${SEMAPHORE_LDAP_PORT:- } "
@@ -56,10 +55,6 @@ export SEMAPHORE_LDAP_MAPPING_FULLNAME="${SEMAPHORE_LDAP_MAPPING_FULLNAME:-cn}"
56
55
export SEMAPHORE_LDAP_MAPPING_EMAIL=" ${SEMAPHORE_LDAP_MAPPING_EMAIL:- mail} "
57
56
file_env ' SEMAPHORE_ACCESS_KEY_ENCRYPTION'
58
57
59
- [ -d " ${SEMAPHORE_TMP_PATH} " ] || mkdir -p " ${SEMAPHORE_TMP_PATH} " || {
60
- echo " Can't create Semaphore tmp path ${SEMAPHORE_TMP_PATH} ."
61
- exit 1
62
- }
63
58
64
59
[ -d " ${SEMAPHORE_CONFIG_PATH} " ] || mkdir -p " ${SEMAPHORE_CONFIG_PATH} " || {
65
60
echo " Can't create Semaphore config path ${SEMAPHORE_CONFIG_PATH} ."
@@ -71,7 +66,27 @@ file_env 'SEMAPHORE_ACCESS_KEY_ENCRYPTION'
71
66
exit 1
72
67
}
73
68
74
- # Check if $SEMAPHORE_DB_HOST contains port number.
69
+
70
+ #
71
+ # Extract database host and port from config.json if they are not set
72
+ #
73
+ if [ -f " ${SEMAPHORE_CONFIG_PATH} /config.json" ]; then
74
+ if [ -z " ${SEMAPHORE_DB_DIALECT} " ]; then
75
+ SEMAPHORE_DB_DIALECT=$( cat " ${SEMAPHORE_CONFIG_PATH} /config.json" | jq " .dialect" -r)
76
+ fi
77
+
78
+ if [ -z " ${SEMAPHORE_DB_HOST} " ]; then
79
+ SEMAPHORE_DB_HOST=$( cat " ${SEMAPHORE_CONFIG_PATH} /config.json" | jq " .${SEMAPHORE_DB_DIALECT} .host" -r)
80
+ fi
81
+ fi
82
+
83
+ export SEMAPHORE_DB_DIALECT=" ${SEMAPHORE_DB_DIALECT:- mysql} "
84
+ export SEMAPHORE_DB_HOST=" ${SEMAPHORE_DB_HOST:- 0.0.0.0} "
85
+
86
+
87
+ #
88
+ # Remove port number from SEMAPHORE_DB_HOST and put it to SEMAPHORE_DB_PORT
89
+ #
75
90
case " $SEMAPHORE_DB_HOST " in
76
91
* :* )
77
92
SEMAPHORE_DB_PORT=$( echo " $SEMAPHORE_DB_HOST " | cut -d ' :' -f 2)
@@ -80,6 +95,10 @@ case "$SEMAPHORE_DB_HOST" in
80
95
* )
81
96
esac
82
97
98
+
99
+ #
100
+ # Set SEMAPHORE_DB_PORT if it is not set
101
+ #
83
102
if [ -z " ${SEMAPHORE_DB_PORT} " ]; then
84
103
case ${SEMAPHORE_DB_DIALECT} in
85
104
mysql)
@@ -97,9 +116,12 @@ if [ -z "${SEMAPHORE_DB_PORT}" ]; then
97
116
esac
98
117
fi
99
118
119
+
120
+ #
100
121
# Ping database if it is not BoltDB
122
+ #
101
123
if [ " ${SEMAPHORE_DB_DIALECT} " != ' bolt' ]; then
102
- echoerr " Attempting to connect to database ${SEMAPHORE_DB} on ${SEMAPHORE_DB_HOST} : ${SEMAPHORE_DB_PORT} with user ${SEMAPHORE_DB_USER} ..."
124
+ echoerr " Pinging database on ${SEMAPHORE_DB_HOST} port ${SEMAPHORE_DB_PORT} ..."
103
125
TIMEOUT=30
104
126
105
127
@@ -116,47 +138,64 @@ if [ "${SEMAPHORE_DB_DIALECT}" != 'bolt' ]; then
116
138
done
117
139
fi
118
140
119
- if [ -n " ${SEMAPHORE_DB_PORT} " ]; then
120
- SEMAPHORE_DB_HOST=" ${SEMAPHORE_DB_HOST} :${SEMAPHORE_DB_PORT} "
121
- fi
122
141
123
- case ${SEMAPHORE_DB_DIALECT} in
124
- mysql)
125
- SEMAPHORE_DB_DIALECT_ID=1
126
- ;;
127
- bolt)
128
- SEMAPHORE_DB_DIALECT_ID=2
129
- SEMAPHORE_DB_HOST=${SEMAPHORE_DB_PATH} /database.boltdb
130
- ;;
131
- postgres)
132
- SEMAPHORE_DB_DIALECT_ID=3
133
- ;;
134
- * )
135
- echoerr " Unknown database dialect: ${SEMAPHORE_DB_DIALECT} "
142
+ #
143
+ # Generate new config.json if it does not exist
144
+ #
145
+ if [ ! -f " ${SEMAPHORE_CONFIG_PATH} /config.json" ]; then
146
+ echoerr " Generating setup file ${TMP_STDIN_CONFIG_FILE} ..."
147
+
148
+ TMP_STDIN_CONFIG_FILE=$( mktemp)
149
+
150
+
151
+ SEMAPHORE_TMP_PATH=${SEMAPHORE_TMP_PATH:-/ tmp/ semaphore}
152
+ [ -d " ${SEMAPHORE_TMP_PATH} " ] || mkdir -p " ${SEMAPHORE_TMP_PATH} " || {
153
+ echo " Can't create Semaphore tmp path ${SEMAPHORE_TMP_PATH} ."
136
154
exit 1
137
- ;;
138
- esac
155
+ }
139
156
140
- if [ ! -f " ${SEMAPHORE_CONFIG_PATH} /config.json" ]; then
141
- echoerr " Generating ${SEMAPHORE_TMP_PATH} /config.stdin ..."
142
- cat << EOF > "${SEMAPHORE_TMP_PATH} /config.stdin"
157
+
158
+ if [ -n " ${SEMAPHORE_DB_PORT} " ]; then
159
+ SEMAPHORE_DB_HOST=" ${SEMAPHORE_DB_HOST} :${SEMAPHORE_DB_PORT} "
160
+ fi
161
+
162
+
163
+ case ${SEMAPHORE_DB_DIALECT} in
164
+ mysql)
165
+ SEMAPHORE_DB_DIALECT_ID=1
166
+ ;;
167
+ bolt)
168
+ SEMAPHORE_DB_DIALECT_ID=2
169
+ SEMAPHORE_DB_HOST=${SEMAPHORE_DB_PATH} /database.boltdb
170
+ ;;
171
+ postgres)
172
+ SEMAPHORE_DB_DIALECT_ID=3
173
+ ;;
174
+ * )
175
+ echoerr " Unknown database dialect: ${SEMAPHORE_DB_DIALECT} "
176
+ exit 1
177
+ ;;
178
+ esac
179
+
180
+
181
+ cat << EOF > "${TMP_STDIN_CONFIG_FILE} "
143
182
${SEMAPHORE_DB_DIALECT_ID}
144
183
EOF
145
184
146
185
if [ " ${SEMAPHORE_DB_DIALECT} " = " bolt" ]; then
147
- cat << EOF >> "${SEMAPHORE_TMP_PATH} /config.stdin "
186
+ cat << EOF >> "${TMP_STDIN_CONFIG_FILE} "
148
187
${SEMAPHORE_DB_HOST}
149
188
EOF
150
189
else
151
- cat << EOF >> "${SEMAPHORE_TMP_PATH} /config.stdin "
190
+ cat << EOF >> "${TMP_STDIN_CONFIG_FILE} "
152
191
${SEMAPHORE_DB_HOST} :${SEMAPHORE_DB_PORT}
153
192
${SEMAPHORE_DB_USER}
154
193
${SEMAPHORE_DB_PASS}
155
- ${SEMAPHORE_DB}
194
+ ${SEMAPHORE_DB:- semaphore }
156
195
EOF
157
196
fi
158
197
159
- cat << EOF >> "${SEMAPHORE_TMP_PATH} /config.stdin "
198
+ cat << EOF >> "${TMP_STDIN_CONFIG_FILE} "
160
199
${SEMAPHORE_TMP_PATH}
161
200
${SEMAPHORE_WEB_ROOT:- }
162
201
no
@@ -168,7 +207,7 @@ ${SEMAPHORE_LDAP_ACTIVATED}
168
207
EOF
169
208
170
209
if [ " ${SEMAPHORE_LDAP_ACTIVATED} " = " yes" ]; then
171
- cat << EOF >> "${SEMAPHORE_TMP_PATH} /config.stdin "
210
+ cat << EOF >> "${TMP_STDIN_CONFIG_FILE} "
172
211
${SEMAPHORE_LDAP_HOST} :${SEMAPHORE_LDAP_PORT}
173
212
${SEMAPHORE_LDAP_NEEDTLS:- no}
174
213
${SEMAPHORE_LDAP_DN_BIND}
@@ -182,22 +221,29 @@ ${SEMAPHORE_LDAP_MAPPING_EMAIL}
182
221
EOF
183
222
fi ;
184
223
185
- cat << EOF >> "${SEMAPHORE_TMP_PATH} /config.stdin "
224
+ cat << EOF >> "${TMP_STDIN_CONFIG_FILE} "
186
225
${SEMAPHORE_CONFIG_PATH}
187
226
${SEMAPHORE_ADMIN}
188
227
${SEMAPHORE_ADMIN_EMAIL}
189
228
${SEMAPHORE_ADMIN_NAME}
190
229
${SEMAPHORE_ADMIN_PASSWORD}
191
230
EOF
192
231
232
+
193
233
echoerr " Executing semaphore setup"
194
234
if test " $# " -ne 1; then
195
- /usr/local/bin/semaphore setup - < " ${SEMAPHORE_TMP_PATH} /config.stdin "
235
+ /usr/local/bin/semaphore setup - < " ${TMP_STDIN_CONFIG_FILE} "
196
236
else
197
- " $1 " setup - < " ${SEMAPHORE_TMP_PATH} /config.stdin "
237
+ " $1 " setup - < " ${TMP_STDIN_CONFIG_FILE} "
198
238
fi
239
+
240
+ rm -f " ${TMP_STDIN_CONFIG_FILE} "
199
241
fi
200
242
243
+
244
+ #
245
+ # Install additional python dependencies
246
+ #
201
247
if test -f " ${SEMAPHORE_CONFIG_PATH} /requirements.txt" ; then
202
248
echoerr " Installing additional python dependencies"
203
249
pip3 install --upgrade \
@@ -206,6 +252,10 @@ else
206
252
echoerr " No additional python dependencies to install"
207
253
fi
208
254
255
+
256
+ #
257
+ # Start Semaphore server
258
+ #
209
259
echoerr " Starting semaphore server"
210
260
if test " $# " -ne 1; then
211
261
exec /usr/local/bin/semaphore server --config " ${SEMAPHORE_CONFIG_PATH} /config.json"
0 commit comments