rspec/ci/validate_metadata.sh
Marco Borgeaud e035587614 Improve validate_metadata.sh
Address shellcheck issues and visually separate outputs
2024-08-22 09:59:26 +02:00

34 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
set -ueo pipefail
shopt -s lastpipe # To pipe command result into mapfile and have the array variable available in the main shell process.
git fetch --quiet "${CIRRUS_DEFAULT_ORIGIN:-origin}" "${CIRRUS_DEFAULT_BRANCH:-master}"
base="$(git merge-base FETCH_HEAD HEAD)"
echo "Comparing against the merge-base: ${base}"
if ! git diff --name-only --exit-code "${base}" -- rspec-tools/
then
basename --multiple rules/* | mapfile -t affected_rules
echo "Change in the tools, revalidating all rules"
else
git diff --name-only "${base}" -- rules/ | # Get all the changes in rules
sed -Ee 's#(rules/S[0-9]+)/.*#\1#' | # extract the rule directories
sort -u | # deduplicate
while IFS= read -r rule; do if [[ -d "$rule" ]]; then echo "$rule"; fi done | # filter out deleted rules
sed 's#rules/##' | # get rule ids
mapfile -t affected_rules # store them in the `affected_rules` array
echo "Validating ${affected_rules[*]}"
fi
printf '\n\n\n'
# Validate metadata
if [[ "${#affected_rules[@]}" -gt 0 ]]
then
cd rspec-tools
pipenv install
printf '\n\n\n'
pipenv run rspec-tools validate-rules-metadata "${affected_rules[@]}"
else
echo "No rule changed or added"
fi