From 5eb4fd727962fc514c84831ec6933bf85ef4b119 Mon Sep 17 00:00:00 2001 From: Tim Marston Date: Thu, 11 Jun 2026 23:09:45 +0100 Subject: [PATCH 1/5] fixed typo in make args in scripts/init.mk --- scripts/init.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/init.mk b/scripts/init.mk index 885d2d33..0164db32 100644 --- a/scripts/init.mk +++ b/scripts/init.mk @@ -84,7 +84,7 @@ list-variables: # List all the variables available to make @Others .NOTPARALLEL: .ONESHELL: .PHONY: * # Please do not change this line! The alternative usage of it introduces unnecessary complexity and is considered an anti-pattern. -MAKEFLAGS := --no-print-director +MAKEFLAGS := --no-print-directory SHELL := /bin/bash ifeq (true, $(shell [[ "${VERBOSE}" =~ ^(true|yes|y|on|1|TRUE|YES|Y|ON)$$ ]] && echo true)) .SHELLFLAGS := -cex From 18512cde75d2a4c9b3faad45f04d08f847d130c5 Mon Sep 17 00:00:00 2001 From: Tim Marston Date: Thu, 11 Jun 2026 23:14:00 +0100 Subject: [PATCH 2/5] Handle missing ${name} in .tool-versions (fallback to "lastest") With set -euo pipefail, this grep | ... | grep pipeline will terminate the script when there is no matching docker/${name} entry in .tool-versions (a normal case). The command substitution should tolerate no matches and fall back to latest. --- scripts/docker/docker.lib.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docker/docker.lib.sh b/scripts/docker/docker.lib.sh index 4227ef1b..492f90b1 100644 --- a/scripts/docker/docker.lib.sh +++ b/scripts/docker/docker.lib.sh @@ -188,7 +188,7 @@ function docker-get-image-version-and-pull() { local versions_file="${TOOL_VERSIONS:=$(git rev-parse --show-toplevel)/.tool-versions}" local version="latest" if [[ -f "$versions_file" ]]; then - line=$(grep "docker/${name} " "$versions_file" | sed "s/^#\s*//; s/\s*#.*$//" | grep "${match_version:-".*"}") + line=$(grep "docker/${name} " "$versions_file" | sed "s/^#\s*//; s/\s*#.*$//" | grep "${match_version:-".*"}" || true) [ -n "$line" ] && version=$(echo "$line" | awk '{print $2}') fi From b050843fac77f9dc15bb2ba069d77accbd233fdc Mon Sep 17 00:00:00 2001 From: Tim Marston Date: Thu, 11 Jun 2026 23:19:34 +0100 Subject: [PATCH 3/5] fix pipefail and || precedence in content= pipeline content=$(grep ...; grep -v ... ||: | grep -v ...) has two issues under set -euo pipefail: (1) the first grep will exit non-zero when there are no Docker- specific entries, which will abort the script; and (2) due to ||/| precedence, the grep -v "^#" filter is not applied when the second grep -v succeeds. This can break Docker builds in repos without docker/ entries in .tool-versions. --- scripts/docker/docker.lib.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docker/docker.lib.sh b/scripts/docker/docker.lib.sh index 492f90b1..bec02239 100644 --- a/scripts/docker/docker.lib.sh +++ b/scripts/docker/docker.lib.sh @@ -248,7 +248,7 @@ function _replace-image-latest-by-specific-version() { if [[ -f "$versions_file" ]]; then # First, list the entries specific for Docker to take precedence, then the rest but exclude comments - content=$(grep " docker/" "$versions_file"; grep -v " docker/" "$versions_file" ||: | grep -v "^#") + content=$({ grep " docker/" "$versions_file" || true; grep -v " docker/" "$versions_file" || true; } | grep -v "^#" || true) echo "$content" | while IFS= read -r line; do [ -z "$line" ] && continue line=$(echo "$line" | sed "s/^#\s*//; s/\s*#.*$//" | sed "s;docker/;;") From ac7004a69ffe12713edd1ccf6bf96bf2a559412a Mon Sep 17 00:00:00 2001 From: Tim Marston Date: Thu, 11 Jun 2026 23:31:03 +0100 Subject: [PATCH 4/5] Unquote dangling image IDs to fix docker rmi cleanup docker rmi --force "$(...)" quotes the list of dangling image IDs, which can collapse multiple IDs into a single argument and prevent cleanup from working correctly. Collect the IDs and pass them as separate arguments. --- scripts/docker/docker.lib.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/docker/docker.lib.sh b/scripts/docker/docker.lib.sh index bec02239..6b8f977f 100644 --- a/scripts/docker/docker.lib.sh +++ b/scripts/docker/docker.lib.sh @@ -52,7 +52,8 @@ function docker-build() { for version in $(_get-all-effective-versions) latest; do docker tag "${DOCKER_IMAGE}:$(_get-effective-version)" "${DOCKER_IMAGE}:${version}" done - docker rmi --force "$(docker images | grep "" | awk '{print $3}')" 2> /dev/null ||: + local dangling_images="$(docker images -q -f dangling=true)" + [[ -n "$dangling_images" ]] && docker rmi --force $dangling_images 2> /dev/null ||: return 0 } From 0dcb525c8946a2d7a4fff8fc7cf4710153d1752b Mon Sep 17 00:00:00 2001 From: Tim Marston Date: Thu, 11 Jun 2026 23:49:22 +0100 Subject: [PATCH 5/5] tabs->spaces --- scripts/docker/docker.lib.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/docker/docker.lib.sh b/scripts/docker/docker.lib.sh index 6b8f977f..3122d813 100644 --- a/scripts/docker/docker.lib.sh +++ b/scripts/docker/docker.lib.sh @@ -249,7 +249,7 @@ function _replace-image-latest-by-specific-version() { if [[ -f "$versions_file" ]]; then # First, list the entries specific for Docker to take precedence, then the rest but exclude comments - content=$({ grep " docker/" "$versions_file" || true; grep -v " docker/" "$versions_file" || true; } | grep -v "^#" || true) + content=$({ grep " docker/" "$versions_file" || true; grep -v " docker/" "$versions_file" || true; } | grep -v "^#" || true) echo "$content" | while IFS= read -r line; do [ -z "$line" ] && continue line=$(echo "$line" | sed "s/^#\s*//; s/\s*#.*$//" | sed "s;docker/;;")