12
12
set -Eeuo pipefail
13
13
trap cleanup SIGINT SIGTERM ERR EXIT
14
14
15
- script_dir=$( cd " $( dirname " ${BASH_SOURCE[0]} " ) " & > /dev/null && pwd -P)
16
-
17
15
usage () {
18
16
cat << EOF
19
17
Usage: $( basename " ${BASH_SOURCE[0]} " ) [-h] [-v] [-df Dockerfile] [-p] [Docker tag]
@@ -34,11 +32,13 @@ Environment variables:
34
32
- CR_OWNER - optional - owner of the container registry
35
33
- CR_PASSWORD - optional - password to log into the container registry
36
34
- CR_USER - optional - username to log in to the container registry
35
+ - DOCKER_LOCK_VERSION - optional - a version of docker-lock to use (e.g. 0.8.10), can also be
36
+ specified in docker-lock-version.txt
37
37
- GHCR_OWNER - optional - owner of the GitHub Container Registry (defaults to GHCR_USER)
38
38
- GHCR_PAT - optional - GitHub Container Registry Personal Access Token
39
39
- GHCR_USER - optional - username to log in to the GitHub Container Registry
40
40
41
- Version 1.1 .0 released 2021 -12-02
41
+ Version 1.2 .0 released 2022 -12-13
42
42
EOF
43
43
exit
44
44
}
@@ -70,27 +70,27 @@ die() {
70
70
parse_params () {
71
71
dockerfile=' '
72
72
publish=0
73
-
73
+
74
74
while : ; do
75
75
case " ${1-} " in
76
- -h | --help) usage ;;
77
- -v | --verbose) set -x ;;
78
- --no-color) NO_COLOR=1 ;;
79
- -df | --dockerfile)
80
- dockerfile=" ${2-} "
81
- shift
76
+ -h | --help) usage ;;
77
+ -v | --verbose) set -x ;;
78
+ --no-color) NO_COLOR=1 ;;
79
+ -df | --dockerfile)
80
+ dockerfile=" ${2-} "
81
+ shift
82
82
;;
83
- -p | --publish)
84
- publish=1
83
+ -p | --publish)
84
+ publish=1
85
85
;;
86
- -?* ) die " Unknown option: $1 " ;;
87
- * ) break ;;
86
+ -?* ) die " Unknown option: $1 " ;;
87
+ * ) break ;;
88
88
esac
89
89
shift
90
90
done
91
-
91
+
92
92
readonly dockertag=" ${1-} "
93
-
93
+
94
94
return 0
95
95
}
96
96
@@ -110,6 +110,37 @@ BLD_RELEASE_VERSION=''
110
110
111
111
readonly BLD_STARTAT=$SECONDS
112
112
113
+ SYSARCH=$( arch)
114
+ readonly SYSARCH
115
+
116
+ if [[ ${SYSARCH} = " i386" ]]; then
117
+ readonly ARCH=" x86_32"
118
+ elif [[ ${SYSARCH} = " aarch64" ]]; then
119
+ readonly ARCH=" armv7"
120
+ else
121
+ readonly ARCH=${SYSARCH}
122
+ fi
123
+
124
+ OS=$( uname -s)
125
+ readonly OS
126
+
127
+ if [[ -z ${DOCKER_LOCK_VERSION-} && -f " docker-lock-version.txt" ]]; then
128
+ BLD_DOCKER_LOCK_VERSION=$( cat docker-lock-version.txt)
129
+ readonly BLD_DOCKER_LOCK_VERSION
130
+ else
131
+ BLD_DOCKER_LOCK_VERSION=${DOCKER_LOCK_VERSION-}
132
+ readonly BLD_DOCKER_LOCK_VERSION
133
+ fi
134
+
135
+ if [[ -n ${BLD_DOCKER_LOCK_VERSION-} && -f " docker-lock.json" ]]; then
136
+ readonly DOCKER_LOCK_URL=" https://github.com/safe-waters/docker-lock/releases/download/v${BLD_DOCKER_LOCK_VERSION} /docker-lock_${BLD_DOCKER_LOCK_VERSION} _${OS} _${ARCH} .tar.gz"
137
+ msg " ${BLUE} ===${NOFORMAT} Using docker-lock.json version ${BLD_DOCKER_LOCK_VERSION} to pin Dockerfile(s)"
138
+ mkdir -p " .docker/cli-plugins"
139
+ curl -fsSL " ${DOCKER_LOCK_URL} " | tar -xz -C " .docker/cli-plugins" " docker-lock"
140
+ chmod +x " .docker/cli-plugins/docker-lock"
141
+ .docker/cli-plugins/docker-lock lock rewrite
142
+ fi
143
+
113
144
# Try getting branch from Azure DevOps
114
145
readonly AZURE_BRANCH=${BUILD_SOURCEBRANCH-}
115
146
BLD_BRANCH=' '
@@ -128,13 +159,13 @@ if [[ -z ${BLD_BRANCH} ]]; then
128
159
fi
129
160
130
161
if [[ $BLD_BRANCH = " develop"
131
- || $BLD_BRANCH = " main"
132
- || $BLD_BRANCH = " master"
133
- || $BLD_BRANCH = " test" ]]; then
162
+ || $BLD_BRANCH = " main"
163
+ || $BLD_BRANCH = " master"
164
+ || $BLD_BRANCH = " test" ]]; then
134
165
BLD_DOCKER_TAG=$BLD_BRANCH
135
166
BLD_VERSION=${BLD_BRANCH} -${BLD_VERSION_DATE}
136
167
BLD_PUSH=true
137
- elif [[ " $BLD_BRANCH " =~ release/([0-9]+\. [0-9]+\. [0-9]+.* ) ]]; then
168
+ elif [[ " $BLD_BRANCH " =~ release/([0-9]+\. [0-9]+\. [0-9]+.* ) ]]; then
138
169
BLD_RELEASE_VERSION=${BASH_REMATCH[1]}
139
170
BLD_DOCKER_TAG=v${BLD_RELEASE_VERSION}
140
171
BLD_VERSION=v${BLD_RELEASE_VERSION}
@@ -201,12 +232,12 @@ if [[ $BLD_PUSH = true ]]; then
201
232
--build-arg IMAGE_CREATED=" $BLD_VERSION_DATE " \
202
233
--build-arg IMAGE_REVISION=" $BLD_COMMIT " \
203
234
--build-arg IMAGE_VERSION=" $BLD_VERSION " .
204
-
235
+
205
236
msg " ${GREEN} ===${NOFORMAT} Docker image built"
206
-
237
+
207
238
dockeruser=${CR_USER-}
208
239
dockerpass=${CR_PASSWORD-}
209
-
240
+
210
241
if [[ -z $dockeruser || -z $dockerpass ]]; then
211
242
msg " ${ORANGE} ===${NOFORMAT} Not pushing Docker image: username or password not specified"
212
243
else
@@ -218,28 +249,28 @@ if [[ $BLD_PUSH = true ]]; then
218
249
echo " $dockerpass " | \
219
250
docker login -u " $dockeruser " --password-stdin " ${CR_HOST-} " || exit $?
220
251
fi
221
-
252
+
222
253
msg " ${BLUE} ===${NOFORMAT} Pushing image $BLD_FULL_DOCKER_IMAGE "
223
254
docker push " $BLD_FULL_DOCKER_IMAGE "
224
-
255
+
225
256
if [[ $BLD_RELEASE = " true" ]]; then
226
257
msg " ${BLUE} ===${NOFORMAT} Tagging and pushing $BLD_FULL_DOCKER_LATEST "
227
258
docker tag " $BLD_FULL_DOCKER_IMAGE " " $BLD_FULL_DOCKER_LATEST "
228
259
docker push " $BLD_FULL_DOCKER_LATEST "
229
260
fi
230
-
261
+
231
262
msg " ${GREEN} ===${NOFORMAT} Docker image pushed"
232
-
263
+
233
264
msg " ${BLUE} ===${NOFORMAT} Executing logout"
234
265
if [[ -z ${CR_HOST-} ]]; then
235
266
docker logout
236
267
else
237
268
docker logout " ${CR_HOST-} "
238
269
fi
239
270
fi
240
-
271
+
241
272
ghcruser=${GHCR_USER-}
242
-
273
+
243
274
if [[ -n $ghcruser ]]; then
244
275
ghcrowner=${GHCR_OWNER-}
245
276
if [[ -z $ghcrowner ]]; then
@@ -250,20 +281,20 @@ if [[ $BLD_PUSH = true ]]; then
250
281
echo " $GHCR_PAT " | \
251
282
docker login ghcr.io -u " ${ghcruser} " --password-stdin || exit $?
252
283
docker push " ghcr.io/${ghcrowner} /${BLD_DOCKER_IMAGE} "
253
-
284
+
254
285
if [[ $BLD_RELEASE = " true" ]]; then
255
286
msg " ${BLUE} ===${NOFORMAT} Tagging and pushing ghcr.io/${ghcrowner} /${BLD_DOCKER_LATEST} "
256
287
docker tag " ${BLD_FULL_DOCKER_IMAGE} " " ghcr.io/${ghcrowner} /${BLD_DOCKER_LATEST} "
257
288
docker push " ghcr.io/${ghcrowner} /${BLD_DOCKER_LATEST} "
258
289
fi
259
-
290
+
260
291
docker logout ghcr.io
261
-
292
+
262
293
msg " ${GREEN} ===${NOFORMAT} Docker image pushed to ghcr.io"
263
294
fi
264
-
295
+
265
296
# Perform release publish in the Docker machine if configuration is present
266
-
297
+
267
298
if [[ $BLD_RELEASE = " true" && -f " release-publish.bash" && publish -eq 1 ]]; then
268
299
msg " ${BLUE} ===${NOFORMAT} Publishing release package for $BLD_RELEASE_VERSION "
269
300
mkdir -p publish
0 commit comments