diff --git a/.github/workflows/test-coverage-local.yaml b/.github/workflows/test-coverage-local.yaml new file mode 100644 index 0000000..226ffe8 --- /dev/null +++ b/.github/workflows/test-coverage-local.yaml @@ -0,0 +1,107 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# also derived from https://github.com/we-cli/coverage-badge-action +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +name: test-coverage-local + +jobs: + test-coverage: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::covr + needs: coverage + + - name: Cache C++ and R dependencies + uses: actions/cache@v2 + with: + path: | + ~/.cache/R + ~/.local/share/R + key: dependencies-${{ runner.os }}-${{ hashFiles('**/DESCRIPTION') }} + restore-keys: | + dependencies-${{ runner.os }}- + + - name: Test coverage + run: > + Rscript -e + "covd<-covr::coverage_to_list()$totalcoverage; + write.table(covd[length(covd)], file = '${{ github.workspace }}/local_cov.Rout', row.names = F, col.names = F)" + shell: bash + + - name: Get Values + id: get-values + shell: bash + run: | + COV=$(cat ${{ github.workspace }}/local_cov.Rout) + echo "Patch coverage read from local_cov.Rout: $COV" + echo "coverage=$COV" >> $GITHUB_OUTPUT + + - name: Checkout gh-pages + uses: actions/checkout@v4 + with: + ref: gh-pages + + - name: Patch comparison + id: patch-comparison + shell: bash + run: | + cov_patch="${{ steps.get-values.outputs.coverage }}" + cov_current=$(cat cov_current.Rout) + echo "Current coverage: $cov_current" + + if (( $(echo "$cov_patch >= $cov_current" | bc -l) )); then + echo "Patch coverage ($cov_patch) is greater than or equal to current coverage ($cov_current)." + echo "cov_update=$cov_patch" >> $GITHUB_OUTPUT + else + echo "Patch coverage ($cov_patch) is less than current coverage ($cov_current)." + exit 1 + fi + + - name: Overwrite cov_current.Rout + if: ${{ github.event_name == 'push' }} + shell: bash + run: | + cov_update="${{ steps.patch-comparison.outputs.cov_update }}" + touch cov_current.Rout + echo "$cov_update" > cov_current.Rout + + - name: Create Badges + shell: bash + run: | + npm i -g badgen-cli + export COV=${{ steps.get-values.outputs.coverage }} + COLOR=$(node -p '+process.env.COV >= 95 ? `green` : `orange`') + mkdir -p badges + badgen -j coverage -s $COV% -c $COLOR > badges/coverage.svg + + - name: Deploy Badges + uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: "Update badges [skip ci] & cov_current.Rout" + branch: gh-pages + skip_fetch: true + skip_checkout: true + + # Without this, will get Error: + # Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/work/coverage-badge-action/coverage-badge-action/action.yml'. + # Did you forget to run actions/checkout before running your local action? + - name: Checkout Back + uses: actions/checkout@v4 + with: + ref: ${{ github.ref }}