From 53e6e70fcfe3a547629b5b5dae5f7506115a664f Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Tue, 11 Jul 2023 13:11:22 +0200 Subject: [PATCH 1/2] fix(ci): flaky unit test --- .github/workflows/coverage-report.yml | 8 ++++---- pkg/cmd/source/util_test.go | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/coverage-report.yml b/.github/workflows/coverage-report.yml index 96371e9553..f87fb187f9 100644 --- a/.github/workflows/coverage-report.yml +++ b/.github/workflows/coverage-report.yml @@ -12,7 +12,7 @@ # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and -# limitations under the License. +# limitations under the License. # --------------------------------------------------------------------------- # test name: coverage-report @@ -67,18 +67,18 @@ jobs: new_coverage="$(grep -o -P '(?<=\(statements\))(.+)(?=%)' coverage.out | xargs)" echo "NEW_COV=$new_coverage" >> $GITHUB_ENV - + coverage_difference=`echo "$new_coverage-${{env.OLD_COV}}" | bc` echo "COV_DIFF=$coverage_difference" >> $GITHUB_ENV if (( $(echo "$coverage_difference > 0" |bc -l) )); then - echo "POS_DIFF=POS" >> $GITHUB_ENV + echo "POS_DIFF=POS" >> $GITHUB_ENV elif (( $(echo "$coverage_difference < 0" |bc -l) )); then echo "POS_DIFF=NEG" >> $GITHUB_ENV else echo "POS_DIFF=ZERO" >> $GITHUB_ENV fi - + - name: Save env variables run: | mkdir -p ./pr diff --git a/pkg/cmd/source/util_test.go b/pkg/cmd/source/util_test.go index 586743d2ba..d04e8fd252 100644 --- a/pkg/cmd/source/util_test.go +++ b/pkg/cmd/source/util_test.go @@ -45,13 +45,12 @@ func isWindows() bool { } func TestPermissionDenied(t *testing.T) { - dir := "/tmp/filedir" if isWindows() { t.Skip("Test not reliably producing a result on a windows OS") } - err := os.Mkdir(dir, 0700) + dir, err := os.MkdirTemp("/tmp", "camel-k-") assert.Nil(t, err) filename := filepath.Join(dir, "file.txt") From 5bfab8e1b86a32f510e811317b75b01ebec968d3 Mon Sep 17 00:00:00 2001 From: Pasquale Congiusti Date: Wed, 12 Jul 2023 08:24:27 +0200 Subject: [PATCH 2/2] fix(ci): revert coverage report to comment Closes #4555 --- .github/workflows/coverage-report-comment.yml | 86 ------------ .github/workflows/coverage-report.yml | 126 +++++++++++++----- 2 files changed, 89 insertions(+), 123 deletions(-) delete mode 100644 .github/workflows/coverage-report-comment.yml diff --git a/.github/workflows/coverage-report-comment.yml b/.github/workflows/coverage-report-comment.yml deleted file mode 100644 index a9c42d792b..0000000000 --- a/.github/workflows/coverage-report-comment.yml +++ /dev/null @@ -1,86 +0,0 @@ -# --------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# --------------------------------------------------------------------------- - -name: coverage-report-comment - -on: - workflow_run: - workflows: ["coverage-report"] - types: - - completed - -jobs: - comment: - runs-on: ubuntu-latest - if : ${{ github.event.workflow_run.conclusion == 'success' }} - steps: - - name: 'Download 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 Coverage - uses: actions/github-script@v6 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - script: | - var fs = require('fs'); - var issue_number = Number(fs.readFileSync('./NR')); - var POS_DIFF = Number(fs.readFileSync('./POS_DIFF')); - var OLD_COV = Number(fs.readFileSync('./OLD_COV')); - var NEW_COV = Number(fs.readFileSync('./NEW_COV')); - var COV_DIFF = Number(fs.readFileSync('./COV_DIFF')); - - if( POS_DIFF == 'POS'){ - github.rest.issues.createComment({ - issue_number: issue_number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `:camel: **Thank you for contributing!** :camel: \n\n **Code Coverage Report** :heavy_check_mark:\n - Coverage changed from: **${OLD_COV}%** -> **${NEW_COV}%**\n- Coverage difference: +**${COV_DIFF}%**` - }) - }else if(POS_DIFF == 'NEG'){ - github.rest.issues.createComment({ - issue_number: issue_number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `:camel: **Thank you for contributing!** :camel: \n\n **Code Coverage Report** :warning:\n - Coverage changed from: **${OLD_COV}%** -> **${NEW_COV}%**\n- Coverage difference: **${COV_DIFF}%**` - }) - }else{ - github.rest.issues.createComment({ - issue_number: issue_number, - owner: context.repo.owner, - repo: context.repo.repo, - body: `:camel: **Thank you for contributing!** :camel: \n\n **Code Coverage Report** :heavy_check_mark:\n - Coverage unchanged.` - }) - } \ No newline at end of file diff --git a/.github/workflows/coverage-report.yml b/.github/workflows/coverage-report.yml index f87fb187f9..ddbbb0bc07 100644 --- a/.github/workflows/coverage-report.yml +++ b/.github/workflows/coverage-report.yml @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # --------------------------------------------------------------------------- -# test -name: coverage-report + +name: Coverage report on: pull_request_target: @@ -36,58 +36,110 @@ jobs: go-version: '1.18' check-latest: true - - name: Checkout apache repo - uses: actions/checkout@v3 - with: - fetch-depth: 0 - repository: apache/camel-k - path: old - - - name: Get Old Coverage + - name: Prepare repo configuration shell: bash + env: + CI_USER: "github-actions[bot]" + CI_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com" run: | - cd old - old_coverage="$(grep -o -P '(?<=Coverage-)(.*)(?=%)' README.adoc)" - cd .. - echo "OLD_COV=$old_coverage" >> $GITHUB_ENV + git clone ${{ github.event.pull_request.head.repo.clone_url }} + cd ${{ github.event.pull_request.head.repo.name }} + git checkout ${{ github.event.pull_request.head.ref }} - - name: Checkout - uses: actions/checkout@v3 - with: - persist-credentials: false - fetch-depth: 0 - path: new + git config --local user.email "$CI_EMAIL" + git config --local user.name "$CI_USER" + git remote add upstream ${{ github.event.pull_request.base.repo.clone_url }} + git fetch upstream + + - name: Rebase + shell: bash + working-directory: ./${{ github.event.pull_request.head.repo.name }} + env: + CI_USER: "github-actions[bot]" + CI_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com" + CI_TOKEN: ${{ inputs.secretGithubToken }} + run: | + git pull --rebase upstream ${{ github.event.pull_request.base.ref }} && echo "rebaseAborted=0" >> $GITHUB_ENV || echo "rebaseAborted=1" >> $GITHUB_ENV - name: Get New Coverage shell: bash + working-directory: ./${{ github.event.pull_request.head.repo.name }} + if: env.rebaseAborted != 1 run: | - cd new go test -v ./... -covermode=count -coverprofile=coverage.out go tool cover -func=coverage.out -o=coverage.out new_coverage="$(grep -o -P '(?<=\(statements\))(.+)(?=%)' coverage.out | xargs)" echo "NEW_COV=$new_coverage" >> $GITHUB_ENV - coverage_difference=`echo "$new_coverage-${{env.OLD_COV}}" | bc` - echo "COV_DIFF=$coverage_difference" >> $GITHUB_ENV + - name: Get Old Coverage + shell: bash + working-directory: ./${{ github.event.pull_request.head.repo.name }} + if: env.rebaseAborted != 1 + run: | + git checkout upstream/${{ github.event.pull_request.base.ref }} + go test -v ./... -covermode=count -coverprofile=coverage_old.out + go tool cover -func=coverage_old.out -o=coverage_old.out + + old_coverage="$(grep -o -P '(?<=\(statements\))(.+)(?=%)' coverage_old.out | xargs)" + echo "OLD_COV=$old_coverage" >> $GITHUB_ENV + - name: Process results + shell: bash + working-directory: ./${{ github.event.pull_request.head.repo.name }} + if: env.rebaseAborted != 1 + run: | + echo "OLD - $OLD_COV" + echo "NEW - $NEW_COV" + coverage_difference=$(bc <<< $NEW_COV-$OLD_COV) if (( $(echo "$coverage_difference > 0" |bc -l) )); then - echo "POS_DIFF=POS" >> $GITHUB_ENV + echo "POS_DIFF=POS" >> $GITHUB_ENV elif (( $(echo "$coverage_difference < 0" |bc -l) )); then - echo "POS_DIFF=NEG" >> $GITHUB_ENV + echo "POS_DIFF=NEG" >> $GITHUB_ENV else - echo "POS_DIFF=ZERO" >> $GITHUB_ENV + echo "POS_DIFF=ZERO" >> $GITHUB_ENV fi + echo "COV_DIFF=$coverage_difference" >> $GITHUB_ENV - - name: Save env variables - run: | - mkdir -p ./pr - echo ${{ github.event.number }} > ./pr/NR - echo ${{env.OLD_COV}} > ./pr/OLD_COV - echo ${{env.NEW_COV}} > ./pr/NEW_COV - echo ${{env.COV_DIFF}} > ./pr/COV_DIFF - echo ${{env.POS_DIFF}} > ./pr/POS_DIFF - - uses: actions/upload-artifact@v2 + - name: Comment Coverage + if: env.rebaseAborted != 1 + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + + if(${{env.POS_DIFF == 'POS'}}){ + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: ':camel: **Thank you for contributing!**\n\nCode Coverage Report :heavy_check_mark: - Coverage changed: ${{env.OLD_COV}}% --> ${{env.NEW_COV}}% (Coverage difference: **+${{env.COV_DIFF}}%**)' + }) + }else if(${{env.POS_DIFF == 'NEG'}}){ + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: ':camel: **Thank you for contributing!**\n\nCode Coverage Report :warning: - Coverage changed: ${{env.OLD_COV}}% --> ${{env.NEW_COV}}% (Coverage difference: **${{env.COV_DIFF}}%**)' + }) + }else{ + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: ':camel: **Thank you for contributing!**\n\nCode Coverage Report :heavy_check_mark: - Coverage unchanged.' + }) + } + + - name: Comment Merge Conflicts + if: env.rebaseAborted == 1 + uses: actions/github-script@v6 with: - name: pr - path: pr/ + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: ':camel: **Thank you for contributing!** :camel: \n\n Unable to create **Coverage Report** :warning:. \n Merge conflicts found.' + })