1212set -Eeuo pipefail
1313trap cleanup SIGINT SIGTERM ERR EXIT
1414
15- script_dir=$( cd " $( dirname " ${BASH_SOURCE[0]} " ) " & > /dev/null && pwd -P)
16-
1715usage () {
1816 cat << EOF
1917Usage: $( basename " ${BASH_SOURCE[0]} " ) [-h] [-v] [-df Dockerfile] [-p] [Docker tag]
@@ -34,11 +32,13 @@ Environment variables:
3432- CR_OWNER - optional - owner of the container registry
3533- CR_PASSWORD - optional - password to log into the container registry
3634- 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
3737- GHCR_OWNER - optional - owner of the GitHub Container Registry (defaults to GHCR_USER)
3838- GHCR_PAT - optional - GitHub Container Registry Personal Access Token
3939- GHCR_USER - optional - username to log in to the GitHub Container Registry
4040
41- Version 1.1 .0 released 2021 -12-02
41+ Version 1.2 .0 released 2022 -12-13
4242EOF
4343 exit
4444}
@@ -70,27 +70,27 @@ die() {
7070parse_params () {
7171 dockerfile=' '
7272 publish=0
73-
73+
7474 while : ; do
7575 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
8282 ;;
83- -p | --publish)
84- publish=1
83+ -p | --publish)
84+ publish=1
8585 ;;
86- -?* ) die " Unknown option: $1 " ;;
87- * ) break ;;
86+ -?* ) die " Unknown option: $1 " ;;
87+ * ) break ;;
8888 esac
8989 shift
9090 done
91-
91+
9292 readonly dockertag=" ${1-} "
93-
93+
9494 return 0
9595}
9696
@@ -110,6 +110,37 @@ BLD_RELEASE_VERSION=''
110110
111111readonly BLD_STARTAT=$SECONDS
112112
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+
113144# Try getting branch from Azure DevOps
114145readonly AZURE_BRANCH=${BUILD_SOURCEBRANCH-}
115146BLD_BRANCH=' '
@@ -128,13 +159,13 @@ if [[ -z ${BLD_BRANCH} ]]; then
128159fi
129160
130161if [[ $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
134165 BLD_DOCKER_TAG=$BLD_BRANCH
135166 BLD_VERSION=${BLD_BRANCH} -${BLD_VERSION_DATE}
136167 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
138169 BLD_RELEASE_VERSION=${BASH_REMATCH[1]}
139170 BLD_DOCKER_TAG=v${BLD_RELEASE_VERSION}
140171 BLD_VERSION=v${BLD_RELEASE_VERSION}
@@ -201,12 +232,12 @@ if [[ $BLD_PUSH = true ]]; then
201232 --build-arg IMAGE_CREATED=" $BLD_VERSION_DATE " \
202233 --build-arg IMAGE_REVISION=" $BLD_COMMIT " \
203234 --build-arg IMAGE_VERSION=" $BLD_VERSION " .
204-
235+
205236 msg " ${GREEN} ===${NOFORMAT} Docker image built"
206-
237+
207238 dockeruser=${CR_USER-}
208239 dockerpass=${CR_PASSWORD-}
209-
240+
210241 if [[ -z $dockeruser || -z $dockerpass ]]; then
211242 msg " ${ORANGE} ===${NOFORMAT} Not pushing Docker image: username or password not specified"
212243 else
@@ -218,28 +249,28 @@ if [[ $BLD_PUSH = true ]]; then
218249 echo " $dockerpass " | \
219250 docker login -u " $dockeruser " --password-stdin " ${CR_HOST-} " || exit $?
220251 fi
221-
252+
222253 msg " ${BLUE} ===${NOFORMAT} Pushing image $BLD_FULL_DOCKER_IMAGE "
223254 docker push " $BLD_FULL_DOCKER_IMAGE "
224-
255+
225256 if [[ $BLD_RELEASE = " true" ]]; then
226257 msg " ${BLUE} ===${NOFORMAT} Tagging and pushing $BLD_FULL_DOCKER_LATEST "
227258 docker tag " $BLD_FULL_DOCKER_IMAGE " " $BLD_FULL_DOCKER_LATEST "
228259 docker push " $BLD_FULL_DOCKER_LATEST "
229260 fi
230-
261+
231262 msg " ${GREEN} ===${NOFORMAT} Docker image pushed"
232-
263+
233264 msg " ${BLUE} ===${NOFORMAT} Executing logout"
234265 if [[ -z ${CR_HOST-} ]]; then
235266 docker logout
236267 else
237268 docker logout " ${CR_HOST-} "
238269 fi
239270 fi
240-
271+
241272 ghcruser=${GHCR_USER-}
242-
273+
243274 if [[ -n $ghcruser ]]; then
244275 ghcrowner=${GHCR_OWNER-}
245276 if [[ -z $ghcrowner ]]; then
@@ -250,20 +281,20 @@ if [[ $BLD_PUSH = true ]]; then
250281 echo " $GHCR_PAT " | \
251282 docker login ghcr.io -u " ${ghcruser} " --password-stdin || exit $?
252283 docker push " ghcr.io/${ghcrowner} /${BLD_DOCKER_IMAGE} "
253-
284+
254285 if [[ $BLD_RELEASE = " true" ]]; then
255286 msg " ${BLUE} ===${NOFORMAT} Tagging and pushing ghcr.io/${ghcrowner} /${BLD_DOCKER_LATEST} "
256287 docker tag " ${BLD_FULL_DOCKER_IMAGE} " " ghcr.io/${ghcrowner} /${BLD_DOCKER_LATEST} "
257288 docker push " ghcr.io/${ghcrowner} /${BLD_DOCKER_LATEST} "
258289 fi
259-
290+
260291 docker logout ghcr.io
261-
292+
262293 msg " ${GREEN} ===${NOFORMAT} Docker image pushed to ghcr.io"
263294 fi
264-
295+
265296 # Perform release publish in the Docker machine if configuration is present
266-
297+
267298 if [[ $BLD_RELEASE = " true" && -f " release-publish.bash" && publish -eq 1 ]]; then
268299 msg " ${BLUE} ===${NOFORMAT} Publishing release package for $BLD_RELEASE_VERSION "
269300 mkdir -p publish
0 commit comments