72 lines
2.5 KiB
Bash
72 lines
2.5 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
|
||
|
|
# Print which dts2repl commits are being compared
|
||
|
|
OLD_COMMIT="$(<ci-output/dts2repl.version)"
|
||
|
|
echo "Dashboard repls were generated by dts2repl $OLD_COMMIT, commits since then are:"
|
||
|
|
git log --oneline --graph --color=always "$OLD_COMMIT..HEAD"
|
||
|
|
|
||
|
|
cd ci-output
|
||
|
|
|
||
|
|
(
|
||
|
|
echo "Generating repls for comparison"
|
||
|
|
cd repls/generated
|
||
|
|
|
||
|
|
# shellcheck disable=SC2317
|
||
|
|
# shellcheck disable=SC2329
|
||
|
|
generate() {
|
||
|
|
file=$1
|
||
|
|
|
||
|
|
NAME=$(basename "$file" .dts)
|
||
|
|
CMDLINE=()
|
||
|
|
CONFIG=../dashboard/"$NAME"-config.json
|
||
|
|
|
||
|
|
# Assemble cmdline based on config
|
||
|
|
if [ -f "$CONFIG" ]; then
|
||
|
|
while IFS= read -r key; do
|
||
|
|
value=$(jq -c --arg k "$key" '.[$k]' "$CONFIG")
|
||
|
|
if [[ "$value" =~ ^\[.*\]$ ]]; then
|
||
|
|
# List handling
|
||
|
|
# { item: [value1, value 2] } -> --item value1 --item value2
|
||
|
|
for item in $(jq -r --arg k "$key" '.[$k][]' "$CONFIG"); do
|
||
|
|
CMDLINE+=("--$key" "$item")
|
||
|
|
done
|
||
|
|
else
|
||
|
|
# Scalar handling:
|
||
|
|
# { item: value } -> --item=value
|
||
|
|
CMDLINE+=("--$key" "$(jq -r --arg k "$key" '.[$k]' "$CONFIG")")
|
||
|
|
fi
|
||
|
|
done < <(jq -r 'keys[]' "$CONFIG")
|
||
|
|
fi
|
||
|
|
echo -n "Generating for $NAME"
|
||
|
|
if [ ${#CMDLINE[@]} -eq 0 ]; then
|
||
|
|
echo
|
||
|
|
dts2repl ../../dts/"$NAME".dts --output "$NAME".repl
|
||
|
|
else
|
||
|
|
echo " with custom command-line ${CMDLINE[*]}"
|
||
|
|
dts2repl ../../dts/"$NAME".dts --output "$NAME".repl "${CMDLINE[@]}"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
export -f generate
|
||
|
|
parallel generate ::: $(ls ../../dts/*)
|
||
|
|
echo "All files generated"
|
||
|
|
)
|
||
|
|
|
||
|
|
# Save diffs for repls that are different
|
||
|
|
# diff returns 0 on no difference which we use to delete diff files if the
|
||
|
|
# generated repl is identical (+/- blank lines) to the dashboard one
|
||
|
|
echo "Generating diffs"
|
||
|
|
|
||
|
|
pushd repls/diffs
|
||
|
|
ls -1 ../generated | parallel 'diff -u --new-file --ignore-blank-lines "../dashboard/{}" "../generated/{}" > "{}.diff" && rm "{}.diff" || true'
|
||
|
|
popd
|
||
|
|
|
||
|
|
if [ "$(ls -A repls/diffs | wc -l)" != 0 ]; then
|
||
|
|
echo "Found differences, running Renode"
|
||
|
|
RENODE_LOCATION=$(cat ${CI_PROJECT_DIR}/renode-location)
|
||
|
|
echo "Renode should be at ${RENODE_LOCATION}"
|
||
|
|
export PATH=$(find ${RENODE_LOCATION} -type f -name renode-test | xargs realpath | xargs dirname):$PATH
|
||
|
|
renode-test --results-dir robot-results "$PWD/../ci/load_repls_with_diffs.robot"
|
||
|
|
fi
|