2021-10-21 20:57:52 -07:00
|
|
|
#!/bin/bash
|
|
|
|
|
2022-03-26 12:42:40 -07:00
|
|
|
# Include library.
|
|
|
|
script_dir="$(dirname -- "$(realpath -- "${0}")")"
|
2022-03-26 12:48:16 -07:00
|
|
|
source "${script_dir}/lib.sh"
|
2022-03-26 12:42:40 -07:00
|
|
|
|
2021-10-21 20:57:52 -07:00
|
|
|
# Directory that holds the cached packages.
|
2022-03-16 10:15:25 -07:00
|
|
|
cache_dir="${1}"
|
2021-10-21 20:57:52 -07:00
|
|
|
|
|
|
|
# Version of the cache to create or load.
|
2022-03-16 13:36:54 -07:00
|
|
|
cache_version="${2}"
|
2021-10-21 20:57:52 -07:00
|
|
|
|
|
|
|
# List of the packages to use.
|
2022-03-26 12:42:40 -07:00
|
|
|
input_packages="${@:3}"
|
2022-03-16 10:15:25 -07:00
|
|
|
|
2022-03-26 12:42:40 -07:00
|
|
|
# Trim commas, excess spaces, and sort.
|
|
|
|
packages="$(normalize_package_list "${input_packages}")"
|
2021-10-21 20:57:52 -07:00
|
|
|
|
2021-10-21 21:12:42 -07:00
|
|
|
# Create cache directory so artifacts can be saved.
|
2022-03-16 10:15:25 -07:00
|
|
|
mkdir -p "${cache_dir}"
|
|
|
|
|
2022-03-16 13:36:54 -07:00
|
|
|
echo -n "Validating action arguments (version='${cache_version}', packages='${packages}')...";
|
2021-10-21 21:12:42 -07:00
|
|
|
|
2022-03-26 12:42:40 -07:00
|
|
|
if grep -q " " <<< "${cache_version}"; then
|
2021-10-21 20:57:52 -07:00
|
|
|
echo "aborted."
|
2022-03-16 13:36:54 -07:00
|
|
|
echo "Version value '${cache_version}' cannot contain spaces." >&2
|
2021-10-21 20:57:52 -07:00
|
|
|
exit 1
|
|
|
|
fi
|
2022-03-26 12:42:40 -07:00
|
|
|
# Is length of string zero?
|
|
|
|
if test -z "${packages}"; then
|
2021-10-21 20:57:52 -07:00
|
|
|
echo "aborted."
|
|
|
|
echo "Packages argument cannot be empty." >&2
|
|
|
|
exit 2
|
|
|
|
fi
|
|
|
|
echo "done."
|
|
|
|
|
2022-03-16 10:15:25 -07:00
|
|
|
echo -n "Updating APT package list..."
|
|
|
|
sudo apt-get update > /dev/null
|
|
|
|
echo "done."
|
|
|
|
|
2022-03-26 12:42:40 -07:00
|
|
|
versioned_packages=""
|
2021-10-21 20:57:52 -07:00
|
|
|
echo -n "Verifying packages..."
|
2022-03-26 12:42:40 -07:00
|
|
|
for package in ${packages}; do
|
|
|
|
if test ! "$(apt show "${package}")"; then
|
2021-10-21 20:57:52 -07:00
|
|
|
echo "aborted."
|
2022-03-16 10:15:25 -07:00
|
|
|
echo "Package '${package}' not found." >&2
|
2021-10-21 20:57:52 -07:00
|
|
|
exit 3
|
|
|
|
fi
|
2022-03-26 12:42:40 -07:00
|
|
|
get_package_name_ver "${package}" # -> package_name, package_ver
|
|
|
|
versioned_packages="${versioned_packages} ${package_name}=${package_ver}"
|
2021-10-21 20:57:52 -07:00
|
|
|
done
|
|
|
|
echo "done."
|
|
|
|
|
|
|
|
# Abort on any failure at this point.
|
|
|
|
set -e
|
|
|
|
|
|
|
|
echo "Creating cache key..."
|
|
|
|
|
2022-03-26 12:42:40 -07:00
|
|
|
# TODO Can we prove this will happen again?
|
|
|
|
normalized_versioned_packages="$(normalize_package_list "${versioned_packages}")"
|
|
|
|
echo "- Normalized package list is '${normalized_versioned_packages}'."
|
2021-10-21 20:57:52 -07:00
|
|
|
|
2022-03-26 12:42:40 -07:00
|
|
|
value="$(echo "${normalized_versioned_packages} @ ${cache_version}")"
|
2022-03-16 10:15:25 -07:00
|
|
|
echo "- Value to hash is '${value}'."
|
2021-10-21 20:57:52 -07:00
|
|
|
|
2022-03-26 12:42:40 -07:00
|
|
|
key="$(echo "${value}" | md5sum | /bin/cut -f1 -d' ')"
|
|
|
|
echo "- Value hashed as '${key}'."
|
2021-10-21 20:57:52 -07:00
|
|
|
|
|
|
|
echo "done."
|
|
|
|
|
2022-03-16 10:15:25 -07:00
|
|
|
key_filepath="${cache_dir}/cache_key.md5"
|
|
|
|
echo "${key}" > "${key_filepath}"
|
|
|
|
echo "Hash value written to ${key_filepath}"
|