--- # https://taskfile.dev version: "3" vars: COVERAGE_FILE: "{{.OUT_DIR}}/coverage.out" BENCH_FILE: "{{.OUT_DIR}}/bench.out" TEST_FILE: "{{.OUT_DIR}}/test.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}} )) # 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 perf: vars: NUM_RESULTS: 5 cmds: - | GOMAXPROCS={{.TEST_PARALLEL}} go test -count=1 -parallel {{.TEST_PARALLEL}} -json ./... \ > {{.TEST_FILE}} - | echo -e "🐢 TOP {{.NUM_RESULTS}} SLOWEST INDIVIDUAL PACKAGE RUNS:" jq -r 'select(.Action == "pass" and .Test == null) | "\(.Elapsed)s \(.Package)"' "{{.TEST_FILE}}" | \ sort -rn | head -n {{.NUM_RESULTS}} echo -e "\nšŸ“‰ TOP {{.NUM_RESULTS}} SLOWEST TESTS:" jq -r 'select(.Action == "pass" and .Test != null) | "\(.Elapsed)s \(.Test) (\(.Package))"' "{{.TEST_FILE}}" | \ sort -rn | head -n {{.NUM_RESULTS}} SLOWEST_PKG=$(jq -r 'select(.Action == "pass") | [.Package, .Elapsed] | @tsv' "{{.TEST_FILE}}" | awk '{pkg[$1] += $2} END {for (p in pkg) print pkg[p] "s " p}' | sort -rn | head -n 1 | awk '{print $2}') echo -e "\nšŸ”Ž TOP {{.NUM_RESULTS}} SLOWEST TESTS IN SLOWEST PACKAGE ($SLOWEST_PKG):" jq -r --arg pkg "$SLOWEST_PKG" \ 'select(.Action == "pass" and .Test != null and .Package == $pkg) | "\(.Elapsed)s \(.Test)"' "{{.TEST_FILE}}" | sort -rn | head -n {{.NUM_RESULTS}} 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 $NF}' | sed 's/%//') echo "Coverage Threshold: {{.COVERAGE_THRESHOLD}}%" echo "Total Coverage: $COVERAGE%" FAIL=false 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}}%" awk -v threshold="{{.FUNCTION_COVERAGE_THRESHOLD}}" ' !/total:/ { line = $0; coverage = $NF; gsub(/%/, "", coverage); if (coverage + 0 < threshold + 0) { if (!printed_header) { print "āŒ Error: The following functions have coverage below " threshold "%:"; printed_header = 1; } print line; exit_code = 1; } } END { exit exit_code; } ' {{.TMP_FILE}} if [ $? -eq 1 ]; then FAIL=true fi if [ "$FAIL" = true ]; then exit 1 fi echo "āœ… All coverage checks passed!"