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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 86 additions and 38 deletions

3
.github/CODEOWNERS vendored
View File

@ -522,7 +522,8 @@ cypress.config.js @grafana/grafana-frontend-platform
/scripts/trigger_windows_build.sh @grafana/grafana-release-guild
/scripts/cleanup-husky.sh @grafana/frontend-ops
/scripts/verify-repo-update/ @grafana/grafana-release-guild
scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/grafana-frontend-platform
/scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/grafana-frontend-platform
/scripts/levitate-parse-json-report.js @grafana/plugins-platform-frontend
/scripts/docs/generate-transformations.ts @grafana/grafana-bi-squad
/scripts/webpack/ @grafana/frontend-ops

View File

@ -96,6 +96,22 @@ jobs:
return doesExist ? 1 : 0;
# put the markdown into a variable
- name: Levitate Markdown
id: levitate-markdown
if: steps.levitate-run.outputs.shouldSkip != 'true'
run: |
if [ -f "${ARTIFACT_FOLDER}/levitate.md" ]; then
{
echo 'levitate_markdown<<EOF'
cat ${ARTIFACT_FOLDER}/levitate.md
echo EOF
} >> $GITHUB_OUTPUT
else
echo "levitate_markdown=No breaking changes detected" >> $GITHUB_OUTPUT
fi
# Comment on the PR
- name: Comment on PR
if: steps.levitate-run.outputs.exit_code == 1 && steps.levitate-run.outputs.shouldSkip != 'true'
@ -103,11 +119,9 @@ jobs:
with:
number: ${{ steps.levitate-run.outputs.pr_number }}
message: |
⚠️ &nbsp;&nbsp;**Possible breaking changes**
⚠️ &nbsp;&nbsp;**Possible breaking changes (md version)**
_(Open the links below in a new tab to go to the correct steps)_
${{ steps.levitate-run.outputs.message }}
${{ steps.levitate-markdown.outputs.levitate_markdown }}
[Console output](${{ steps.levitate-run.outputs.job_link }})
[Read our guideline](https://github.com/grafana/grafana/blob/main/contribute/breaking-changes-guide/breaking-changes-guide.md)

View File

@ -32,18 +32,21 @@ while IFS=" " read -r -a package; do
echo ""
echo "${PACKAGE_PATH}"
echo "================================================="
npm exec -- @grafana/levitate compare --prev "$PREV" --current "$CURRENT"
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=$?
CURRENT_REPORT=$(node ./scripts/levitate-parse-json-report.js)
echo $CURRENT_REPORT
# Final exit code
# (non-zero if any of the packages failed the checks)
if [ $STATUS -gt 0 ]
then
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"
@ -51,6 +54,8 @@ 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"
mkdir -p ./levitate
echo $GITHUB_LEVITATE_MARKDOWN >./levitate/levitate.md
# We will exit the workflow accordingly at another step
exit 0

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);