Replace Cypher export with vendor-neutral JSON-LD + GraphML #1242
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Coverage | |
| on: | |
| pull_request: | |
| push: | |
| branches: [main] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| actions: read | |
| jobs: | |
| coverage: | |
| name: Coverage | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| with: | |
| persist-credentials: false | |
| - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 | |
| with: | |
| go-version-file: go.mod | |
| check-latest: true | |
| cache: true | |
| - name: Generate unit test coverage (exclude e2e) | |
| run: | | |
| set -euo pipefail | |
| make sync-schemas sync-controls | |
| # Exclude ./e2e from unit coverage: that suite invokes the built | |
| # stave binary per fixture and can exceed the default 10m global | |
| # timeout even with a per-case bound. E2E runs in its own CI job. | |
| pkgs="$(go list ./... | grep -vE '^github\.com/sufield/stave/e2e$')" | |
| go test $pkgs -covermode=atomic -coverprofile=unit.out | |
| - name: Generate testscript integration coverage | |
| run: | | |
| go test ./cmd/stave/... -run TestScripts -covermode=atomic -coverpkg=./... -coverprofile=testscript.out -count=1 -timeout 120s | |
| - name: Merge coverage profiles | |
| run: | | |
| head -1 unit.out > coverage.out | |
| tail -n +2 unit.out >> coverage.out | |
| tail -n +2 testscript.out >> coverage.out | |
| - name: Enforce core package coverage policy | |
| run: | | |
| set -euo pipefail | |
| check_coverage() { | |
| local pkg="$1" | |
| local min="$2" | |
| local out="$3" | |
| go test "$pkg" -covermode=atomic -coverpkg="$pkg" -coverprofile="$out" | |
| local got | |
| got="$(go tool cover -func="$out" | awk '/^total:/ {gsub("%","",$3); print $3}')" | |
| echo "$pkg coverage: ${got}% (minimum: ${min}%)" | |
| awk -v got="$got" -v min="$min" 'BEGIN { exit (got+0 < min+0) ? 1 : 0 }' || { | |
| echo "::error::$pkg coverage ${got}% is below minimum ${min}%" | |
| exit 1 | |
| } | |
| } | |
| check_coverage ./internal/app/... 25 coverage-app.out | |
| check_coverage ./internal/core/predicate/... 40 coverage-predicate.out | |
| check_coverage ./internal/core/kernel/... 50 coverage-kernel.out | |
| check_coverage ./internal/core/evaluation/... 45 coverage-evaluation.out | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: coverage.out | |
| disable_search: true | |
| flags: unit | |
| fail_ci_if_error: false |