From 2e1e4e4b24835bab372a04b578e75e1feb5152f4 Mon Sep 17 00:00:00 2001 From: Eric Ribeiro Date: Tue, 3 May 2022 12:56:34 -0700 Subject: [PATCH] refactor: extract scripts from install-docker (#117) --- src/commands/install-docker.yml | 78 ++------------------------------- src/scripts/install-docker.sh | 76 ++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 74 deletions(-) create mode 100644 src/scripts/install-docker.sh diff --git a/src/commands/install-docker.yml b/src/commands/install-docker.yml index 711073f..be92c32 100644 --- a/src/commands/install-docker.yml +++ b/src/commands/install-docker.yml @@ -22,77 +22,7 @@ parameters: steps: - run: name: Install Docker CLI - command: | - if [[ $EUID == 0 ]]; then export SUDO=""; else export SUDO="sudo"; fi - - # grab Docker version - if [[ <> == "latest" ]]; then - # extract latest version from GitHub releases API - declare -i INDEX=0 - - while : - do - INDEX_VERSION=$(curl --silent --show-error --location --fail --retry 3 \ - https://api.github.com/repos/docker/cli/tags | \ - jq --argjson index "$INDEX" '.[$index].name') - - # filter out betas & release candidates - if [[ $(echo "$INDEX_VERSION" | grep -v beta | grep -v rc) ]]; then - - # can't use substring expression < 0 on macOS - DOCKER_VERSION="${INDEX_VERSION:1:$((${#INDEX_VERSION} - 1 - 1))}" - - echo "Latest stable version of Docker is $DOCKER_VERSION" - break - else - INDEX=INDEX+1 - fi - done - else - DOCKER_VERSION=<> - echo "Selected version of Docker is $DOCKER_VERSION" - fi - - # check if Docker needs to be installed - DOCKER_VERSION_NUMBER="${DOCKER_VERSION:1}" - - if command -v docker >> /dev/null 2>&1; then - if docker --version | grep "$DOCKER_VERSION_NUMBER" >> /dev/null 2>&1; then - echo "Docker $DOCKER_VERSION is already installed" - exit 0 - else - echo "A different version of Docker is installed ($(docker --version)); removing it" - $SUDO rm -f $(command -v docker) - fi - fi - - # get binary download URL for specified version - if uname -a | grep Darwin >> /dev/null 2>&1; then - PLATFORM=mac - else - PLATFORM=linux - fi - - DOCKER_BINARY_URL="https://download.docker.com/$PLATFORM/static/stable/x86_64/docker-$DOCKER_VERSION_NUMBER.tgz" - - # download binary tarball - DOWNLOAD_DIR="$(mktemp -d)" - DOWNLOAD_FILE="${DOWNLOAD_DIR}/docker.tgz" - curl --output "$DOWNLOAD_FILE" \ - --silent --show-error --location --fail --retry 3 \ - "$DOCKER_BINARY_URL" - - tar xf "$DOWNLOAD_FILE" -C "$DOWNLOAD_DIR" && rm -f "$DOWNLOAD_FILE" - - # install Docker binaries - BINARIES=$(ls "${DOWNLOAD_DIR}/docker") - $SUDO mv "$DOWNLOAD_DIR"/docker/* <> - $SUDO rm -rf "$DOWNLOAD_DIR" - - for binary in $BINARIES - do - $SUDO chmod +x "<>/$binary" - done - - # verify version - echo "$(docker --version) has been installed to $(which docker)" + environment: + PARAM_VERSION: << parameters.version >> + PARAM_INSTALL_DIR: << parameters.install-dir >> + command: << include(scripts/install-docker.sh) >> diff --git a/src/scripts/install-docker.sh b/src/scripts/install-docker.sh new file mode 100644 index 0000000..e7f8538 --- /dev/null +++ b/src/scripts/install-docker.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +if [[ $EUID == 0 ]]; then export SUDO=""; else export SUDO="sudo"; fi + +# grab Docker version +if [[ "$PARAM_VERSION" == "latest" ]]; then + # extract latest version from GitHub releases API + declare -i INDEX=0 + + while : + do + INDEX_VERSION=$(curl --silent --show-error --location --fail --retry 3 \ + https://api.github.com/repos/docker/cli/tags | \ + jq --argjson index "$INDEX" '.[$index].name') + + # filter out betas & release candidates + # shellcheck disable=SC2143 # Doesn't apply to this case. + if [[ $(echo "$INDEX_VERSION" | grep -v beta | grep -v rc) ]]; then + + # can't use substring expression < 0 on macOS + DOCKER_VERSION="${INDEX_VERSION:1:$((${#INDEX_VERSION} - 1 - 1))}" + + echo "Latest stable version of Docker is $DOCKER_VERSION" + break + else + INDEX=$((INDEX+1)) + fi + done +else + DOCKER_VERSION="$PARAM_VERSION" + echo "Selected version of Docker is $DOCKER_VERSION" +fi + +# check if Docker needs to be installed +DOCKER_VERSION_NUMBER="${DOCKER_VERSION:1}" + +if command -v docker >> /dev/null 2>&1; then + if docker --version | grep "$DOCKER_VERSION_NUMBER" >> /dev/null 2>&1; then + echo "Docker $DOCKER_VERSION is already installed" + exit 0 + else + echo "A different version of Docker is installed ($(docker --version)); removing it" + $SUDO rm -f "$(command -v docker)" + fi +fi + +# get binary download URL for specified version +if uname -a | grep Darwin >> /dev/null 2>&1; then + PLATFORM=mac +else + PLATFORM=linux +fi + +DOCKER_BINARY_URL="https://download.docker.com/$PLATFORM/static/stable/x86_64/docker-$DOCKER_VERSION_NUMBER.tgz" + +# download binary tarball +DOWNLOAD_DIR="$(mktemp -d)" +DOWNLOAD_FILE="${DOWNLOAD_DIR}/docker.tgz" +curl --output "$DOWNLOAD_FILE" \ + --silent --show-error --location --fail --retry 3 \ + "$DOCKER_BINARY_URL" + +tar xf "$DOWNLOAD_FILE" -C "$DOWNLOAD_DIR" && rm -f "$DOWNLOAD_FILE" + +# install Docker binaries +BINARIES=$(ls "${DOWNLOAD_DIR}/docker") +$SUDO mv "$DOWNLOAD_DIR"/docker/* "$PARAM_INSTALL_DIR" +$SUDO rm -rf "$DOWNLOAD_DIR" + +for binary in $BINARIES +do + $SUDO chmod +x "$PARAM_INSTALL_DIR/$binary" +done + +# verify version +echo "$(docker --version) has been installed to $(command -v docker)" \ No newline at end of file