Skip to content

Instantly share code, notes, and snippets.

@mhvelplund
Created February 26, 2021 20:21
Show Gist options
  • Save mhvelplund/3877a5f7a57ee059f1b282a5e1892749 to your computer and use it in GitHub Desktop.
Save mhvelplund/3877a5f7a57ee059f1b282a5e1892749 to your computer and use it in GitHub Desktop.
Scan a Terraform module for dependencies that can be upgraded.
#!/usr/bin/env bash
set -euo pipefail
modules=($(grep -r --exclude-dir={examples,.terraform} --include '*.tf' '\"git@github.com:' | cut -d ":" -f3 | cut -d "\"" -f1 | sort -u))
declare -A latest_versions needs_upgrade
for module in ${modules[@]}; do
if [[ $module =~ ([^\/]+)\/([^\.]+)[^?]+\?ref=(.+) ]]; then
repo="${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"
version=${BASH_REMATCH[3]}
if [[ -z ${latest_versions["${repo}"]:-} ]]; then
latest_versions["${repo}"]=$(
git ls-remote --refs --tags "git@github.com:${repo}.git" | cut --delimiter='/' --fields=3 |
tr '-' '~' | sort --version-sort | tail --lines=1
)
fi
latest=${latest_versions["${repo}"]}
[[ "${version}" != "${latest}" ]] && needs_upgrade["${repo} ${version}"]=${latest}
fi
done
IFS=$'\n'
for old in ${!needs_upgrade[@]}; do
echo -e "${old} needs upgrade to ${needs_upgrade["${old}"]}"
done
unset IFS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment