# Copyright 2021 Google LLC # # Licensed 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: code coverage on: pull_request: pull_request_target: types: [labeled] # Declare default permissions as read only. permissions: read-all jobs: build: if: "${{ github.event.action != 'labeled' || github.event.label.name == 'tests: run' }}" runs-on: ubuntu-latest permissions: issues: write pull-requests: write steps: - name: Remove PR Label if: "${{ github.event.action == 'labeled' && github.event.label.name == 'tests: run' }}" uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | try { await github.rest.issues.removeLabel({ name: 'tests: run', owner: context.repo.owner, repo: context.repo.repo, issue_number: context.payload.pull_request.number }); } catch (e) { console.log('Failed to remove label. Another job may have already removed it!'); } - name: Setup Go uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1 with: go-version: "1.22" - name: Checkout base branch uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ github.base_ref }} - name: Calculate base code coverage run: | go test -short -coverprofile current_cover.out ./... || true export CUR_COVER=$(go tool cover -func current_cover.out | grep total | awk '{print substr($3, 1, length($3)-1)}') echo "CUR_COVER=$CUR_COVER" >> $GITHUB_ENV - name: Checkout PR branch uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5 with: ref: ${{ github.event.pull_request.head.sha }} repository: ${{ github.event.pull_request.head.repo.full_name }} - name: Calculate PR code coverage run: | go test -short -coverprofile pr_cover.out ./... || true export PR_COVER=$(go tool cover -func pr_cover.out | grep total | awk '{print substr($3, 1, length($3)-1)}') echo "PR_COVER=$PR_COVER" >> $GITHUB_ENV - name: Verify code coverage. If your reading this and the step has failed, please add tests to cover your changes. run: | go tool cover -func pr_cover.out if [ "${{ env.PR_COVER }}" -lt "${{ env.CUR_COVER }}" ]; then exit 1; fi