You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2024/01/11 14:59:22 UTC
(camel-k) branch main updated: feat(ci): new coverage flow
This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new c22dfcdef feat(ci): new coverage flow
c22dfcdef is described below
commit c22dfcdef2c332985f179a11f582de3f40b2ed57
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu Jan 11 12:54:00 2024 +0100
feat(ci): new coverage flow
As suggested in https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
---
.github/actions/automatic-updates/action.yml | 3 +-
.github/actions/e2e-build/action.yml | 16 ++++++-
.github/workflows/comment-pr.yaml | 67 ++++++++++++++++++++++++++++
.gitignore | 5 ++-
coverage | 1 +
script/Makefile | 6 +--
6 files changed, 89 insertions(+), 9 deletions(-)
diff --git a/.github/actions/automatic-updates/action.yml b/.github/actions/automatic-updates/action.yml
index 21c8ea1d7..04da33940 100644
--- a/.github/actions/automatic-updates/action.yml
+++ b/.github/actions/automatic-updates/action.yml
@@ -69,6 +69,7 @@ runs:
run: |
go test -v ./... -covermode=count -coverprofile=coverage.out
go tool cover -func=coverage.out -o=coverage.out
+ grep -o -P '(?<=\(statements\))(.+)(?=%)' coverage.out | xargs > coverage
touch badge.out
- name: Go Coverage Badge
uses: ./.github/actions/coverage-badge
@@ -89,7 +90,7 @@ runs:
run: |
git config --local user.email "$CI_EMAIL"
git config --local user.name "$CI_USER"
- git add -A && git commit -m 'chore: nightly coverage badge update' && echo "badge=1" >> $GITHUB_ENV || echo "No changes to coverage badge"
+ git add -A -f && git commit -m 'chore: nightly coverage changed' && echo "badge=1" >> $GITHUB_ENV || echo "No changes to coverage"
# Git push
- name: Push changes
diff --git a/.github/actions/e2e-build/action.yml b/.github/actions/e2e-build/action.yml
index d3ac7dfeb..a5a976ff5 100644
--- a/.github/actions/e2e-build/action.yml
+++ b/.github/actions/e2e-build/action.yml
@@ -29,4 +29,18 @@ runs:
- name: Test
shell: bash
- run: make
+ run: |
+ COVERAGE_OPTS="-covermode=count -coverprofile=coverage.out" make build
+
+ - name: Save coverage PR value
+ shell: bash
+ run: |
+ mkdir -p ./pr
+ go tool cover -func=coverage.out -o=coverage.out
+ grep -o -P '(?<=\(statements\))(.+)(?=%)' coverage.out | xargs > ./pr/coverage
+ echo ${{ github.event.number }} > ./pr/id
+
+ - uses: actions/upload-artifact@v2
+ with:
+ name: pr
+ path: pr/
\ No newline at end of file
diff --git a/.github/workflows/comment-pr.yaml b/.github/workflows/comment-pr.yaml
new file mode 100644
index 000000000..22bc3f61b
--- /dev/null
+++ b/.github/workflows/comment-pr.yaml
@@ -0,0 +1,67 @@
+name: Comment on the pull request
+
+env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+on:
+ workflow_run:
+ workflows: ["build"]
+ types:
+ - completed
+
+jobs:
+ upload:
+ runs-on: ubuntu-latest
+ if: >
+ github.event.workflow_run.event == 'pull_request' &&
+ github.event.workflow_run.conclusion == 'success'
+ steps:
+ - name: 'Download coverage artifact'
+ uses: actions/github-script@v3.1.0
+ with:
+ script: |
+ var artifacts = await github.actions.listWorkflowRunArtifacts({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: ${{github.event.workflow_run.id }},
+ });
+ var matchArtifact = artifacts.data.artifacts.filter((artifact) => {
+ return artifact.name == "pr"
+ })[0];
+ var download = await github.actions.downloadArtifact({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: matchArtifact.id,
+ archive_format: 'zip',
+ });
+ var fs = require('fs');
+ fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data));
+ - run: unzip pr.zip
+
+ - name: 'Comment on PR'
+ uses: actions/github-script@v3
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ var fs = require('fs');
+ const coverage = Number(fs.readFileSync('./coverage'));
+ const issue_number = Number(fs.readFileSync('./id'));
+ const main_coverage_result = await github.request('https://raw.githubusercontent.com/' + context.repo.owner + '/' + context.repo.repo + '/main/coverage')
+ const main_cov_num = Number(main_coverage_result.data)
+ diff = Math.round((coverage - main_cov_num + Number.EPSILON) * 100) / 100
+
+ if(diff > 0){
+ await github.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issue_number,
+ body: ':heavy_check_mark: Unit test coverage report - coverage increased from ' + main_cov_num + '% to ' + coverage + '% (**+' + diff + '%**)'
+ })
+ }else if(diff < 0){
+ await github.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issue_number,
+ body: ':warning: Unit test coverage report - coverage decreased from ' + main_cov_num + '% to ' + coverage + '% (**' + diff + '%**)'
+ })
+ }
diff --git a/.gitignore b/.gitignore
index 1e5a72168..6896b7685 100644
--- a/.gitignore
+++ b/.gitignore
@@ -141,8 +141,9 @@ anaconda-mode/
# Test binary, build with 'go test -c'
*.test
-# Output of the go coverage tool, specifically when used with LiteIDE
-*.out
+# Output of the go coverage tool
+coverage.out
+coverage
### Vim ###
# swap
diff --git a/coverage b/coverage
new file mode 100644
index 000000000..d193c0ba8
--- /dev/null
+++ b/coverage
@@ -0,0 +1 @@
+34.2
diff --git a/script/Makefile b/script/Makefile
index 24dff1e4f..817a65d61 100644
--- a/script/Makefile
+++ b/script/Makefile
@@ -243,11 +243,7 @@ endif
test: do-build
@echo "####### Running unit test..."
- go test ./...
-
-test-fmt: do-build
- @echo "####### Running unit test..."
- go test -v ./... -json 2>&1 | gotestfmt
+ go test ./... $(COVERAGE_OPTS)
#
# Common tests that do not require any customized operator setting. They can leverage a unique namespaced operator installation to reduce