Chore: Improve levitate CI PR messaage (#79679)

* Chore: Improve levitate CI PR messaage

* Temporary disable the skip

* Remove ignore

* Add an artificial breaking change

* Restore

* Restore

* Trigger breaking change (maybe?)

* --wip-- [skip ci]

* Empty commit

* Keep trying

* Breaking change maybe?

* Add levitate markdown to persistent output

* Move markdown output

* no skipping

* Force run

* remove skip

* Try

* Fix workflow

* tryu

* fix typo

* remove duplicated id

* Test

* Invert commands

* Fix script

* Do not output the markdown directly

* Try 2

* Try with base64

* Update message

* Update message

* Fix base64 encoding

* Update report

* Fix

* test file

* Try without base64

* Fix report to not use base64

* restore skip file

* revert breaking changes

* Empty commit
This commit is contained in:
Esteban Beltran
2023-12-20 10:09:58 +01:00
committed by GitHub
parent b312f48c10
commit 5fd5a8e385
4 changed files with 86 additions and 38 deletions
+38 -33
View File
@@ -9,48 +9,53 @@ SKIP_PACKAGES=("grafana-eslint-rules" "grafana-plugin-configs")
# Loop through the packages
while IFS=" " read -r -a package; do
# shellcheck disable=SC2128
PACKAGE_PATH=$(basename "$package")
# shellcheck disable=SC2128
PACKAGE_PATH=$(basename "$package")
# Calculate current and previous package paths / names
PREV="./base/$PACKAGE_PATH"
CURRENT="./pr/$PACKAGE_PATH"
# Calculate current and previous package paths / names
PREV="./base/$PACKAGE_PATH"
CURRENT="./pr/$PACKAGE_PATH"
# Temporarily skipping these packages as they don't have any exposed static typing
if [[ ${SKIP_PACKAGES[@]} =~ "$PACKAGE_PATH" ]]; then
continue
fi
# Temporarily skipping these packages as they don't have any exposed static typing
if [[ ${SKIP_PACKAGES[@]} =~ "$PACKAGE_PATH" ]]; then
continue
fi
# Extract the npm package tarballs into separate directories e.g. ./base/@grafana-data.tgz -> ./base/grafana-data/
mkdir "$PREV"
tar -xf "./base/@$PACKAGE_PATH.tgz" --strip-components=1 -C "$PREV"
mkdir "$CURRENT"
tar -xf "./pr/@$PACKAGE_PATH.tgz" --strip-components=1 -C "$CURRENT"
# Extract the npm package tarballs into separate directories e.g. ./base/@grafana-data.tgz -> ./base/grafana-data/
mkdir "$PREV"
tar -xf "./base/@$PACKAGE_PATH.tgz" --strip-components=1 -C "$PREV"
mkdir "$CURRENT"
tar -xf "./pr/@$PACKAGE_PATH.tgz" --strip-components=1 -C "$CURRENT"
# Run the comparison and record the exit code
echo ""
echo ""
echo "${PACKAGE_PATH}"
echo "================================================="
npm exec -- @grafana/levitate compare --prev "$PREV" --current "$CURRENT"
# Run the comparison and record the exit code
echo ""
echo ""
echo "${PACKAGE_PATH}"
echo "================================================="
npm exec -- @grafana/levitate compare --prev "$PREV" --current "$CURRENT" --json >data.json
# Check if the comparison returned with a non-zero exit code
# Record the output, maybe with some additional information
STATUS=$?
# Check if the comparison returned with a non-zero exit code
# Record the output, maybe with some additional information
STATUS=$?
# Final exit code
# (non-zero if any of the packages failed the checks)
if [ $STATUS -gt 0 ]
then
EXIT_CODE=1
GITHUB_MESSAGE="${GITHUB_MESSAGE}**\\\`${PACKAGE_PATH}\\\`** has possible breaking changes ([more info](${GITHUB_JOB_LINK}#step:${GITHUB_STEP_NUMBER}:1))<br />"
fi
CURRENT_REPORT=$(node ./scripts/levitate-parse-json-report.js)
echo $CURRENT_REPORT
done <<< "$PACKAGES"
# Final exit code
# (non-zero if any of the packages failed the checks)
if [ $STATUS -gt 0 ]; then
EXIT_CODE=1
GITHUB_MESSAGE="${GITHUB_MESSAGE}**\\\`${PACKAGE_PATH}\\\`** has possible breaking changes ([more info](${GITHUB_JOB_LINK}#step:${GITHUB_STEP_NUMBER}:1))<br />"
GITHUB_LEVITATE_MARKDOWN+="##${PACKAGE_PATH}\n${CURRENT_REPORT}\n"
fi
done <<<"$PACKAGES"
# "Export" the message to an environment variable that can be used across Github Actions steps
echo "is_breaking=$EXIT_CODE" >> "$GITHUB_OUTPUT"
echo "message=$GITHUB_MESSAGE" >> "$GITHUB_OUTPUT"
echo "is_breaking=$EXIT_CODE" >>"$GITHUB_OUTPUT"
echo "message=$GITHUB_MESSAGE" >>"$GITHUB_OUTPUT"
mkdir -p ./levitate
echo $GITHUB_LEVITATE_MARKDOWN >./levitate/levitate.md
# We will exit the workflow accordingly at another step
exit 0
+28
View File
@@ -0,0 +1,28 @@
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('data.json', 'utf8'));
const stripAnsi = (string) => string.replace(/\u001b\[.*?m/g, '');
const printSection = (title, items) => {
let output = `### ${title}\n\n`;
items.forEach((item) => {
output += `**${item.name}**\n`;
output += `<sub>${item.location}</sub>\n\n`;
output += '```' + (item.declaration ? 'typescript' : 'diff typescript') + '\n';
output += item.declaration ? item.declaration : stripAnsi(item.diff);
output += '\n```\n\n';
});
return output;
};
let markdown = '';
if (data.removals.length > 0) {
markdown += printSection('Removals', data.removals);
}
if (data.changes.length > 0) {
markdown += printSection('Changes', data.changes);
}
console.log(markdown);