6d622023ef
Apt installs more packages than just those explicitly listed. This can lead to issues of missing files when the cache is restored.
76 lines
2 KiB
Bash
Executable file
76 lines
2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Directory that holds the cached packages.
|
|
cache_dir="${1}"
|
|
|
|
# Version of the cache to create or load.
|
|
cache_version="${2}"
|
|
|
|
# List of the packages to use.
|
|
packages="${@:3}"
|
|
|
|
# Sort these packages by name and split on commas.
|
|
packages=$(echo "${packages}" | sed 's/[\s,]+/ /g' | tr ' ' '\n' | sort | tr '\n' ' ')
|
|
|
|
# Create cache directory so artifacts can be saved.
|
|
mkdir -p "${cache_dir}"
|
|
|
|
echo -n "Validating action arguments (version='${cache_version}', packages='${packages}')...";
|
|
|
|
if echo "${cache_version}" | grep -q " " > /dev/null; then
|
|
echo "aborted."
|
|
echo "Version value '${cache_version}' cannot contain spaces." >&2
|
|
exit 1
|
|
fi
|
|
if [ "${packages}" == "" ]; then
|
|
echo "aborted."
|
|
echo "Packages argument cannot be empty." >&2
|
|
exit 2
|
|
fi
|
|
echo "done."
|
|
|
|
echo -n "Updating APT package list..."
|
|
sudo apt-get update > /dev/null
|
|
echo "done."
|
|
|
|
echo -n "Verifying packages..."
|
|
for package in ${packages}; do
|
|
if echo "${package}" | grep -q "="; then
|
|
package_name=$(echo "${package}" | cut -d "=" -f1)
|
|
package_ver=$(echo "${package}" | cut -d "=" -f2)
|
|
else
|
|
package_name="${package}"
|
|
fi
|
|
apt_show=$(apt show "${package}")
|
|
if echo ${apt_show} | grep -qi "No packages found" > /dev/null; then
|
|
echo "aborted."
|
|
echo "Package '${package}' not found." >&2
|
|
exit 3
|
|
fi
|
|
if [ -z "${package_ver}" ]; then
|
|
package_ver=$(echo "${apt_show}" | grep -Po "(?<=Version: )[^\s]+")
|
|
fi
|
|
package_list="${package_list} ${package_name}=${package_ver}"
|
|
done
|
|
echo "done."
|
|
|
|
# Abort on any failure at this point.
|
|
set -e
|
|
|
|
echo "Creating cache key..."
|
|
|
|
# Remove extraneous spaces
|
|
package_list="$(echo "${package_list}" | sed 's/\s\+/ /g;s/^\s\+//g;s/\s\+$//g')"
|
|
echo "- Normalized package list is '$package_list'."
|
|
|
|
value=$(echo "${package_list} @ ${cache_version}")
|
|
echo "- Value to hash is '${value}'."
|
|
|
|
key=$(echo "${value}" | md5sum | /bin/cut -f1 -d' ')
|
|
echo "- Value hashed as '$key'."
|
|
|
|
echo "done."
|
|
|
|
key_filepath="${cache_dir}/cache_key.md5"
|
|
echo "${key}" > "${key_filepath}"
|
|
echo "Hash value written to ${key_filepath}"
|