diff --git a/.zshrc b/.zshrc index 3d3ffbf..a69732d 100644 --- a/.zshrc +++ b/.zshrc @@ -201,18 +201,33 @@ __docker__() { local local_digest local_digest=$(docker image inspect "$image" --format '{{index .RepoDigests 0}}' 2>/dev/null) + # If no local digest exists, force check if [[ -z "$local_digest" ]]; then - echo -e "${YELLOW}Image not present or digest unavailable. Update needed.${NC}" + echo -e "${YELLOW}Image not present locally. Update needed.${NC}" updated=true continue fi - # Get remote image digest using manifest inspect + # Get remote digest using pull --dry-run local remote_digest - remote_digest=$(DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect -v "$image" 2>/dev/null | jq -r '.Descriptor.digest' 2>/dev/null) + remote_digest=$(docker pull --quiet --dry-run "$image" 2>/dev/null | awk '/Digest:/{print $2}') + + # Fallback to manifest inspect if dry-run fails + if [[ -z "$remote_digest" ]]; then + remote_digest=$(DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect -v "$image" 2>/dev/null | jq -r '.Descriptor.digest' 2>/dev/null) + fi if [[ -z "$remote_digest" ]]; then - echo -e "${RED}Failed to retrieve remote digest. Skipping.${NC}" + echo -e "${RED}Failed to retrieve remote digest. Performing forced check...${NC}" + # Fallback method: Pull image and compare before/after digests + local pre_pull_digest=$(docker image inspect "$image" --format '{{index .RepoDigests 0}}' 2>/dev/null) + docker pull --quiet "$image" >/dev/null + local post_pull_digest=$(docker image inspect "$image" --format '{{index .RepoDigests 0}}' 2>/dev/null) + + if [[ "$pre_pull_digest" != "$post_pull_digest" ]]; then + echo -e "${GREEN}Update found during forced pull${NC}" + updated=true + fi continue fi