Skip to content

Commit

Permalink
[docker-outside-of-docker] compose-switch can fallback to previous ve…
Browse files Browse the repository at this point in the history
…rsion (#901)

* compose-switch fallback previous version

* changes required
  • Loading branch information
gauravsaini04 authored Mar 11, 2024
1 parent 965e120 commit 8af4ce3
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/docker-outside-of-docker/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"id": "docker-outside-of-docker",
"version": "1.4.2",
"version": "1.4.3",
"name": "Docker (docker-outside-of-docker)",
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/docker-outside-of-docker",
"description": "Re-use the host docker socket, adding the Docker CLI to a container. Feature invokes a script to enable using a forwarded Docker socket within a container to run Docker commands.",
Expand Down
18 changes: 17 additions & 1 deletion src/docker-outside-of-docker/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,22 @@ find_version_from_git_tags() {
echo "${variable_name}=${!variable_name}"
}

# Function to fetch the previous version of the plugin
get_previous_version() {
repo_url=$1
# this would del the assets key and then get the second encountered tag_name's value from the filtered array of objects
curl -s "$repo_url" | jq -r 'del(.[].assets) | .[0].tag_name'
}


install_compose_switch_fallback() {
echo -e "\n(!) Failed to fetch the latest artifacts for compose-switch v${compose_switch_version}..."
previous_version=$(get_previous_version "https://api.github.com/repos/docker/compose-switch/releases")
echo -e "\nAttempting to install ${previous_version}"
compose_switch_version=${previous_version#v}
curl -fsSL "https://github.com/docker/compose-switch/releases/download/v${compose_switch_version}/docker-compose-linux-${architecture}" -o /usr/local/bin/docker-compose
}

# Ensure apt is in non-interactive to avoid prompts
export DEBIAN_FRONTEND=noninteractive

Expand Down Expand Up @@ -255,7 +271,7 @@ if [ "${DOCKER_DASH_COMPOSE_VERSION}" != "none" ]; then
echo "(*) Installing compose-switch as docker-compose..."
compose_switch_version="latest"
find_version_from_git_tags compose_switch_version "https://github.com/docker/compose-switch"
curl -fsSL "https://github.com/docker/compose-switch/releases/download/v${compose_switch_version}/docker-compose-linux-${architecture}" -o /usr/local/bin/docker-compose
curl -fsSL "https://github.com/docker/compose-switch/releases/download/v${compose_switch_version}/docker-compose-linux-${architecture}" -o /usr/local/bin/docker-compose || install_compose_switch_fallback
chmod +x /usr/local/bin/docker-compose
# TODO: Verify checksum once available: https://github.com/docker/compose-switch/issues/11
fi
Expand Down
36 changes: 36 additions & 0 deletions test/docker-outside-of-docker/docker_build_compose_fallback.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash

# Optional: Import test library
source dev-container-features-test-lib

check "installs compose-switch as docker-compose" bash -c "[[ -f /usr/local/bin/docker-compose ]]"

# Fetch host/container arch.
architecture="$(dpkg --print-architecture)"

repo_url="https://api.github.com/repos/docker/compose-switch/releases"

# Function to fetch the previous version of the plugin
get_previous_version() {
sudo curl -s "$repo_url" | jq -r 'del(.[].assets) | .[0].tag_name' # this would del the assets key and then get the second encountered tag_name's value from the filtered array of objects
}

install_compose_switch_fallback() {
echo -e "\n(!) Failed to fetch the latest artifacts for compose-switch ${test_compose_switch_version}..."
previous_version=$(get_previous_version)
echo -e "\nAttempting to install ${previous_version}"
compose_switch_version=${previous_version}
sudo curl -fsSL "https://github.com/docker/compose-switch/releases/download/${compose_switch_version}/docker-compose-linux-${architecture}" -o /usr/local/bin/docker-compose
}

install_compose-switch_as_docker-compose() {
echo "(*) Installing compose-switch as docker-compose..."
test_compose_switch_version="1.2.xyz"
echo -e "\nTesting with $test_compose_switch_version..."
sudo curl -fsSL "https://github.com/docker/compose-switch/releases/download/${test_compose_switch_version}/docker-compose-linux-${architecture}" -o /usr/local/bin/docker-compose || install_compose_switch_fallback
sudo chmod +x /usr/local/bin/docker-compose
}

install_compose-switch_as_docker-compose

check "installs compose-switch as docker-compose" bash -c "[[ -f /usr/local/bin/docker-compose ]]"
10 changes: 10 additions & 0 deletions test/docker-outside-of-docker/scenarios.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
{
"docker_build_compose_fallback": {
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-20.04",
"features": {
"docker-outside-of-docker": {
"moby": false,
"dockerDashComposeVersion": "latest"
}
},
"containerUser": "vscode"
},
"docker_init_moby": {
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-20.04",
"features": {
Expand Down

0 comments on commit 8af4ce3

Please sign in to comment.