--- # https://taskfile.dev version: "3" vars: COVERAGE_FILE: "{{.OUT_DIR}}/coverage.out" BENCH_FILE: "{{.OUT_DIR}}/bench.out" INTERNAL: "./internal/..." API: "./api/..." PKG: "./pkg/..." CMD: "./cmd/..." CPU_COUNT: sh: | # First try nproc (Linux) if command -v nproc >/dev/null 2>&1; then nproc # Fall back to sysctl (macOS) elif [ "$(uname)" = "Darwin" ]; then sysctl -n hw.ncpu # Fall back to Windows approach elif [ "$(uname)" = "Windows" ] || [ "$(uname)" = "MINGW"* ]; then echo "$NUMBER_OF_PROCESSORS" else echo "4" # Default fallback value fi TEST_PARALLEL: sh: echo $(( {{.CPU_COUNT}} * 2)) # yamllint disable-line rule:line-length EXCLUDED_FILES: ".gen.go|internal/serviceconfig/observability/prometheus/generator/main.go|internal/cognitoauth/middleware.go|internal/cognitoauth/token.go|internal/cognitoauth/auth.go|internal/cognitoauth/handler.go|internal/cognitoauth/models.go|api/queryAPI/authHandlers.go|api/queryAPI/homehandler.go" tasks: mocks:generate: run: once cmds: - rm -rf mocks/* - go tool mockery --log-level="" functional: cmds: - mkdir -p {{.OUT_DIR}} - | GOMAXPROCS={{.TEST_PARALLEL}} go test -count=1 -parallel {{.CPU_COUNT}} \ -coverpkg={{.INTERNAL}},{{.API}},{{.PKG}} \ -coverprofile={{.COVERAGE_FILE}} \ ./... - task: coverage bench: vars: TMP_FILE: "{{.OUT_DIR}}/coverage.tmp" FILTER_COVERAGE_FILE: "{{.OUT_DIR}}/filtered_coverage.out" cmds: - go test -run ^Benchmark -bench=. ./... > {{.BENCH_FILE}} - benchstat {{.BENCH_FILE}} unit:short: deps: - mocks:generate cmds: - mkdir -p {{.OUT_DIR}} - | go test -parallel {{.TEST_PARALLEL}} -short \ {{.INTERNAL}} {{.API}} {{.CLI_ARGS}} coverage: internal: true vars: TMP_FILE: "{{.OUT_DIR}}/coverage.tmp" FILTER_COVERAGE_FILE: "{{.OUT_DIR}}/filtered_coverage.out" cmds: - | grep -v -E "{{.EXCLUDED_FILES}}" {{.COVERAGE_FILE}} \ > {{.FILTER_COVERAGE_FILE}} - go tool cover -func={{.FILTER_COVERAGE_FILE}} > {{.TMP_FILE}} - | COVERAGE=$(grep total: {{.TMP_FILE}} \ | awk '{print $3}' | sed 's/%//' | bc) echo "Coverage Threshold: {{.COVERAGE_THRESHOLD}}%" echo "Total Coverage: $COVERAGE%" if (( $(echo "$COVERAGE < {{.COVERAGE_THRESHOLD}}" | bc -l) )); then echo "❌ Error: Total Coverage below Coverage Threshold" FAIL=true fi echo "Function Coverage Threshold: {{.FUNCTION_COVERAGE_THRESHOLD}}%" FAIL_FUNC=false grep -v total: {{.TMP_FILE}} | while read -r line; do FUNC_COV=$(echo "$line" | awk '{print $3}' | sed 's/%//' | bc) if (( $(echo "$FUNC_COV < \ {{.FUNCTION_COVERAGE_THRESHOLD}}" | bc -l) )); then if [ "$FAIL_FUNC" = false ]; then echo "❌ Error: The following functions have coverage below "\ "{{.FUNCTION_COVERAGE_THRESHOLD}}%:" FAIL_FUNC=true FAIL=true fi echo "$line" fi done if [ "$FAIL" = true ]; then exit 1 fi echo "✅ All coverage checks passed!"