Skip to content

Commit

Permalink
[Tools] Add tool to update third party cookbooks.
Browse files Browse the repository at this point in the history
Signed-off-by: Giacomo Marciani <mgiacomo@amazon.com>
  • Loading branch information
gmarciani committed Jul 5, 2022
1 parent 1e787cf commit b6c0474
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions util/update-cookbook-dependency.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/usr/bin/env sh
set -e

# This script updates Cookbook dependencies.
# Usage: update-cookbook-dependencies.sh [PACKAGE] [VERSION]
# Example: update-cookbook-dependencies.sh apt 7.4.0

PACKAGE=$1
VERSION=$2

[[ -z ${PACKAGE} ]] && echo "[ERROR] Missing required argument PACKAGE. Usage: update-cookbook-dependencies.sh [PACKAGE] [VERSION]" && exit 1
[[ -z ${VERSION} ]] && echo "[ERROR] Missing required argument VERSION. Usage: update-cookbook-dependencies.sh [PACKAGE] [VERSION]" && exit 1

# On Mac OS, the default implementation of sed is BSD sed, but this script requires GNU sed.
if [ "$(uname)" == "Darwin" ]; then
command -v gsed >/dev/null 2>&1 || { echo >&2 "[ERROR] Mac OS detected: please install GNU sed with 'brew install gnu-sed'"; exit 1; }
PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
fi

echo "[INFO] Updating dependency: ${PACKAGE} ${VERSION}..."

PARALLEL_CLUSTER_COOKBOOK_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd )
BERKS_FILE="${PARALLEL_CLUSTER_COOKBOOK_DIR}/Berksfile"
METADATA_FILE="${PARALLEL_CLUSTER_COOKBOOK_DIR}/metadata.rb"
THIRD_PARTY_DIR="${PARALLEL_CLUSTER_COOKBOOK_DIR}/third-party"
DEPENDENCY_DIR="${THIRD_PARTY_DIR}/${PACKAGE}-${VERSION}"
DEPENDENCY_ZIP="${DEPENDENCY_DIR}.tar.gz"
CHEF_REPO_URL="https://github.com/sous-chefs/${PACKAGE}/archive/refs/tags/${VERSION}.tar.gz"

echo "[INFO] Detecting current version of ${PACKAGE}"
CURRENT_VERSION=$(ls ${THIRD_PARTY_DIR} | grep ${PACKAGE} | cut -d '-' -f 2)
if [[ -z ${CURRENT_VERSION} ]]; then
echo "[ERROR] Cannot find current version of ${PACKAGE}"
exit 1
else
echo "[INFO] Current version of ${PACKAGE} is: ${CURRENT_VERSION}"
if [[ ${VERSION} == ${CURRENT_VERSION} ]]; then
echo "[WARN] Current version of ${PACKAGE} ${VERSION} already installed. No update required."
exit 0
fi
fi

echo "[INFO] Downloading ${PACKAGE} ${VERSION} from Chef Marketplace"
wget -O ${DEPENDENCY_ZIP} ${CHEF_REPO_URL}
mkdir -p ${DEPENDENCY_DIR}
tar xzf ${DEPENDENCY_ZIP} -C ${DEPENDENCY_DIR} --strip-components 1
rm ${DEPENDENCY_ZIP}

METADATA_FILES=(
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/metadata.rb"
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/cookbooks/aws-parallelcluster-awsbatch/metadata.rb"
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/cookbooks/aws-parallelcluster-config/metadata.rb"
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/cookbooks/aws-parallelcluster-install/metadata.rb"
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/cookbooks/aws-parallelcluster-scheduler-plugin/metadata.rb"
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/cookbooks/aws-parallelcluster-slurm/metadata.rb"
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/cookbooks/aws-parallelcluster-scheduler-plugin/metadata.rb"
"${PARALLEL_CLUSTER_COOKBOOK_DIR}/cookbooks/aws-parallelcluster-test/metadata.rb"
)

for metadata_file in ${METADATA_FILES[@]}; do
echo "[INFO] Updating metadata: ${metadata_file}"
sed -i "s/depends '${PACKAGE}', '~> ${CURRENT_VERSION}'/depends '${PACKAGE}', '~> ${VERSION}'/" ${metadata_file}
done

echo "[INFO] Updating Berksfile: ${BERKS_FILE}"
sed -i "s/${PACKAGE}-${VERSION}/${PACKAGE}-${VERSION}/" ${BERKS_FILE}

echo "[INFO] Removing previous version of ${PACKAGE} ${CURRENT_VERSION}"
rm -rf "${THIRD_PARTY_DIR}/${PACKAGE}-${CURRENT_VERSION}"

echo "[INFO] Dependency updated: ${PACKAGE} ${VERSION}"

0 comments on commit b6c0474

Please sign in to comment.