@@ -22,6 +22,7 @@ if [ "$#" -lt 1 ]; then
2222fi
2323
2424HOME_IN_IMAGE=/home/sleeper
25+ ALL_IMAGES=(sleeper-local sleeper-builder)
2526
2627# Allow use of runner Dockerfile in source directory or in home install
2728THIS_DIR=$( cd " $( dirname " $0 " ) " && pwd)
@@ -110,22 +111,88 @@ get_version() {
110111 run_in_docker sleeper-local:current cat /sleeper/version.txt
111112}
112113
113- pull_docker_images (){
114- echo " Updating CLI runner Dockerfile"
114+ pull_docker_images () {
115+ echo " Downloading CLI runner Dockerfile"
115116 mkdir -p " $HOME_RUNNER_PATH "
116117 curl " https://raw.githubusercontent.com/gchq/sleeper/develop/scripts/cli/runner/Dockerfile" --output " $HOME_RUNNER_PATH /Dockerfile"
117- pull_and_tag sleeper-local
118- pull_and_tag sleeper-builder
118+
119+ echo " Pulling CLI Docker images"
120+ for IMAGE_NAME in " ${ALL_IMAGES[@]} " ; do
121+ echo " Pulling image: $IMAGE_NAME "
122+ REMOTE_IMAGE=" ghcr.io/gchq/$IMAGE_NAME :latest"
123+ LOCAL_IMAGE=" $IMAGE_NAME :current"
124+
125+ docker pull " $REMOTE_IMAGE "
126+ docker tag " $REMOTE_IMAGE " " $LOCAL_IMAGE "
127+ done
128+ }
129+
130+ find_docker_image_digests () {
131+ echo " Checking CLI image digests"
132+ declare -ga IMAGE_DIGESTS
133+ for IMAGE_NAME in " ${ALL_IMAGES[@]} " ; do
134+ IMAGE=" $IMAGE_NAME :current"
135+ DIGEST=" $( docker images -q " $IMAGE " 2> /dev/null) "
136+ if [ -n " $DIGEST " ]; then
137+ echo " Found digest for $IMAGE_NAME : $DIGEST "
138+ IMAGE_DIGESTS+=(" $DIGEST " )
139+ fi
140+ done
141+ }
142+
143+ find_runner_image_digests () {
144+ echo " Checking runner image digests"
145+ declare -ga RUNNER_DIGESTS
146+ local LINES=$( docker images -q sleeper-runner 2> /dev/null)
147+ while read -r LINE
148+ do
149+ DUPLICATE=false
150+ for DIGEST in " ${RUNNER_DIGESTS[@]} " ; do
151+ if [[ " $DIGEST " == " $LINE " ]]; then
152+ DUPLICATE=true
153+ break
154+ fi
155+ done
156+ if [[ " $DUPLICATE " == " false" ]]; then
157+ echo " Found runner digest for cleanup: $LINE "
158+ RUNNER_DIGESTS+=(" $LINE " )
159+ fi
160+ done <<< " $LINES"
161+ }
162+
163+ remove_old_images () {
164+ OLD_DIGESTS=(" ${IMAGE_DIGESTS[@]} " )
165+ find_docker_image_digests
166+ echo " Cleaning up old CLI images"
167+ for OLD_DIGEST in " ${OLD_DIGESTS[@]} " ; do
168+ UPDATED=true
169+ for NEW_DIGEST in " ${IMAGE_DIGESTS[@]} " ; do
170+ if [[ " $OLD_DIGEST " == " $NEW_DIGEST " ]]; then
171+ UPDATED=false
172+ break
173+ fi
174+ done
175+ if [[ " $UPDATED " == " true" ]]; then
176+ docker image rm " $OLD_DIGEST "
177+ fi
178+ done
179+ find_runner_image_digests
180+ echo " Cleaning up old runner images"
181+ for DIGEST in " ${RUNNER_DIGESTS[@]} " ; do
182+ docker image rm -f " $DIGEST "
183+ done
119184}
120185
121186upgrade_cli () {
187+ find_docker_image_digests
122188 echo " Updating CLI command"
123189 EXECUTABLE_PATH=" ${BASH_SOURCE[0]} "
124190 local TEMP_DIR=$( mktemp -d)
125191 TEMP_PATH=" $TEMP_DIR /sleeper"
126192 curl " https://raw.githubusercontent.com/gchq/sleeper/develop/scripts/cli/runInDocker.sh" --output " $TEMP_PATH "
127193 chmod a+x " $TEMP_PATH "
128194 " $TEMP_PATH " cli pull-images
195+ remove_old_images
129196 mv " $TEMP_PATH " " $EXECUTABLE_PATH "
130197 rmdir " $TEMP_DIR "
131198 echo " Updated"
@@ -137,15 +204,6 @@ upgrade_cli() {
137204 exit
138205}
139206
140- pull_and_tag () {
141- IMAGE_NAME=$1
142- REMOTE_IMAGE=" ghcr.io/gchq/$IMAGE_NAME :latest"
143- LOCAL_IMAGE=" $IMAGE_NAME :current"
144-
145- docker pull " $REMOTE_IMAGE "
146- docker tag " $REMOTE_IMAGE " " $LOCAL_IMAGE "
147- }
148-
149207COMMAND=$1
150208shift
151209
0 commit comments