diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index a55211a33..291490f7e 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -1,38 +1,43 @@
name: CI Coverage for PR
-on: [ pull_request, pull_request_target ]
+on:
+ pull_request:
+ types:
+ - opened
+ - synchronize
jobs:
coverage:
+ env:
+ PY_VER: ''
runs-on: ubuntu-latest
- permissions:
- contents: read
- pull-requests: write
steps:
- - uses: actions/checkout@v3
+ - name: Checkout
+ uses: actions/checkout@v4
with:
fetch-depth: '0'
-
+ - name: Setup
+ run: |
+ sudo apt-get -qq update
+ sudo apt-get -qq install -y gdb-multiarch python3-dev python3-pip python3-wheel python3-setuptools git cmake gcc g++ pkg-config libglib2.0-dev gdbserver qemu-user curl
+ sudo python3 -m pip install --upgrade pip --quiet
- name: Run test coverage
id: get_coverage
env:
ALLOWED_MARGIN: 0.01
MIN_COVERAGE: 70
run: |
- sudo apt-get update
- sudo apt-get install -y gdb-multiarch python3-dev python3-pip python3-wheel python3-setuptools git cmake gcc g++ pkg-config libglib2.0-dev gdbserver qemu-user curl
- sudo python3 -m pip install --upgrade pip
echo PY_VER=`gdb -q -nx -ex "pi print('.'.join(map(str, sys.version_info[:2])))" -ex quit` >> $GITHUB_ENV
echo GEF_CI_NB_CPU=`grep -c ^processor /proc/cpuinfo` >> $GITHUB_ENV
echo GEF_CI_ARCH=`uname --processor` >> $GITHUB_ENV
- python${{ env.PY_VER }} -m pip install --user --upgrade -r tests/requirements.txt
+ python${{ env.PY_VER }} -m pip install --user --upgrade -r tests/requirements.txt --quiet
current_score=$(curl --silent https://hugsy.github.io/gef/coverage/gef_py.html | grep pc_cov | sed 's?.*\([^%]*\)%?\1?g')
bash scripts/generate-coverage-docs.sh
new_score=$(cat docs/coverage/gef_py.html | grep pc_cov | sed 's?.*\([^%]*\)%?\1?g')
diff_score=$(python -c "print(${new_score} - ${current_score})")
- commit=$(git rev-parse HEAD)
- include_tests=$(git diff ${{ github.event.before }} ${{ github.event.after }} --compact-summary | egrep --count '^ tests/' || true)
- include_docs=$(git diff ${{ github.event.before }} ${{ github.event.after }} --compact-summary | egrep --count '^ docs/' || true)
+ commit=${{ github.event.pull_request.head.sha }}
+ include_tests=$(git diff ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} --compact-summary | egrep --count '^ tests/' || 0)
+ include_docs=$(git diff ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} --compact-summary | egrep --count '^ docs/' || 0)
echo "commit=${commit}" >> $GITHUB_OUTPUT
echo "new_coverage_score=${new_score}" >> $GITHUB_OUTPUT
echo "current_coverage_score=${current_score}" >> $GITHUB_OUTPUT
@@ -48,7 +53,8 @@ jobs:
done
echo "words_found=${WORDS_FOUND}" >> $GITHUB_OUTPUT
- - uses: actions/github-script@v6
+ - name: Post comment
+ uses: actions/github-script@v7
env:
COMMIT: ${{ steps.get_coverage.outputs.commit }}
SCORE_OLD: ${{ steps.get_coverage.outputs.current_coverage_score }}
@@ -57,20 +63,20 @@ jobs:
WORDS_FOUND: ${{ steps.get_coverage.outputs.words_found }}
with:
script: |
+ const diff_score = ${{ steps.get_coverage.outputs.diff_score }};
const tests_changes = ${{ steps.get_coverage.outputs.include_tests }};
const docs_changes = ${{ steps.get_coverage.outputs.include_docs }};
const forbiddenWordsString = process.env.WORDS_FOUND || '';
const forbidden_words = forbiddenWordsString.split(" ").filter(word => word.trim() !== '');
- const comment = `## 🤖 Coverage Update
+ const comment = `## 🤖 Coverage update for ${process.env.COMMIT}
- * Commit: ${process.env.COMMIT}
- * Current Coverage: ${process.env.SCORE_OLD}%
- * New Coverage: ${process.env.SCORE_NEW}%
- * Diff: ${process.env.SCORE_DIFF}
+ * Diff Commit: ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}
+ * Current vs New Coverage Score: ${process.env.SCORE_OLD}% / ${process.env.SCORE_NEW}%
+ * Difference: ${process.env.SCORE_DIFF} ${(diff_score >= 0) ? "🟢" : "🔴"}
To this point, this PR:
- * ${(tests_changes == 0) ? "**does not** include" : "includes"} changes to tests
- * ${(docs_changes == 0) ? "**does not** include" : "includes"} changes to documentation
+ * ${(tests_changes > 0) ? "includes" : "**does not** include" } changes to tests
+ * ${(docs_changes > 0) ? "includes" : "**does not** include" } changes to documentation
* ${(forbidden_words.length === 0 || forbidden_words[0] === '') ? "**does not** include forbidden words" : "includes the forbidden words:" + forbidden_words.join(", ")}
`;
@@ -85,15 +91,10 @@ jobs:
issue_number: number,
labels: ['documentation']
});
- } else {
- await github.rest.issues.removeLabel({
- owner: owner,
- repo: repo,
- issue_number: number,
- name: 'documentation'
- });
}
+ } catch (err) { console.log(err); }
+ try {
if(tests_changes > 0) {
await github.rest.issues.addLabels({
owner: owner,
@@ -101,12 +102,5 @@ jobs:
issue_number: number,
labels: ['automation/ci']
});
- } else {
- await github.rest.issues.removeLabel({
- owner: owner,
- repo: repo,
- issue_number: number,
- name: 'automation/ci'
- });
}
- } catch (err) {}
+ } catch (err) { console.log(err); }