Skip to content

feat: fix workflow's coverage report #87

feat: fix workflow's coverage report

feat: fix workflow's coverage report #87

Workflow file for this run

name: EinoTests
on:
pull_request:
push:
branches:
- main
env:
DEFAULT_GO_VERSION: "1.18"
jobs:
unit-test:
name: eino-unit-test
runs-on: ubuntu-latest
env:
COVERAGE_FILE: coverage.out
BREAKDOWN_FILE: main.breakdown
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.DEFAULT_GO_VERSION }}
- name: Exec Go Test
run: |
modules=`find . -name "go.mod" -exec dirname {} \;`
echo $modules
list=""
coverpkg=""
if [[ ! -f "go.work" ]];then go work init;fi
for module in $modules; do go work use $module; list=$module"/... "$list; coverpkg=$module"/...,"$coverpkg; done
go work sync
go test -race -v -coverprofile=${{ env.COVERAGE_FILE }} -gcflags="all=-l -N" -coverpkg=$coverpkg $list
- name: Download Artifact (main.breakdown)
id: download-main-breakdown
uses: actions/download-artifact@v4
continue-on-error: true
with:
name: ${{ env.BREAKDOWN_FILE }}
fail-not-found: false
- name: Create main.breakdown If Not Exist
run: |
if [ ! -f ${{ env.BREAKDOWN_FILE }} ]; then
echo "${{ env.BREAKDOWN_FILE }} not found. Creating an empty file."
touch ${{ env.BREAKDOWN_FILE }}
else
echo "${{ env.BREAKDOWN_FILE }} found."
fi
- name: Calculate Coverage
id: coverage
uses: vladopajic/go-test-coverage@v2
with:
config: ./.testcoverage.yml
profile: ${{ env.COVERAGE_FILE}}
breakdown-file-name: ${{ github.ref_name == 'main' && env.BREAKDOWN_FILE || '' }}
diff-base-breakdown-file-name: ${{ env.BREAKDOWN_FILE }}
# to generate and embed coverage badges in markdown files
git-token: ${{ github.ref_name == 'main' && secrets.GITHUB_TOKEN || '' }}
git-branch: badges
- name: Upload Artifact (main.breakdown)
uses: actions/upload-artifact@v4
if: github.ref_name == 'main'
with:
name: ${{ env.BREAKDOWN_FILE }}
path: ${{ env.BREAKDOWN_FILE }}
if-no-files-found: error
- name: Find If coverage Report Exist
if: ${{ github.event.pull_request.number != null }}
uses: peter-evans/find-comment@v3
id: fc
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: '📊 Coverage Report'
- name: Send Coverage Report
if: ${{ github.event.pull_request.number != null }}
uses: peter-evans/create-or-update-comment@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.pull_request.number }}
comment-id: ${{ steps.fc.outputs.comment-id || '' }}
edit-mode: replace
body: |
## 📊 Coverage Report:
```
${{ steps.coverage.outputs.report && fromJSON(steps.coverage.outputs.report) || 'No coverage report available' }}
```
- name: Check Coverage
if: steps.coverage.outcome == 'failure'
shell: bash
run: echo "coverage check failed" && exit 1
benchmark-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ env.DEFAULT_GO_VERSION }}
- name: Run Benchmark Tests
run: go test -bench=. -benchmem -run=none ./...
compatibility-test:
strategy:
matrix:
go: [ "1.19", "1.20", "1.21", "1.22" ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go }}
cache: true
- name: Compatibility Test
run: |
# just basic unit test, no coverage report
go test -race ./...