2025-01-10 11:12:03 +00:00
|
|
|
---
|
2024-12-19 11:38:57 +00:00
|
|
|
# https://taskfile.dev
|
|
|
|
|
|
2025-03-04 15:51:03 +00:00
|
|
|
version: "3"
|
2024-12-19 11:38:57 +00:00
|
|
|
|
|
|
|
|
vars:
|
2025-01-10 11:12:03 +00:00
|
|
|
COVERAGE_FILE: "{{.OUT_DIR}}/coverage.out"
|
2025-04-29 17:13:09 +00:00
|
|
|
BENCH_FILE: "{{.OUT_DIR}}/bench.out"
|
2025-01-17 12:00:32 +00:00
|
|
|
INTERNAL: "./internal/..."
|
|
|
|
|
API: "./api/..."
|
|
|
|
|
PKG: "./pkg/..."
|
2025-02-12 19:00:25 +00:00
|
|
|
CMD: "./cmd/..."
|
2025-05-05 09:31:21 +00:00
|
|
|
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:
|
2025-05-06 13:49:49 +00:00
|
|
|
sh: echo $(( {{.CPU_COUNT}} ))
|
2025-03-05 16:59:01 +00:00
|
|
|
# yamllint disable-line rule:line-length
|
2025-04-22 10:01:37 -07:00
|
|
|
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"
|
2024-12-19 11:38:57 +00:00
|
|
|
|
|
|
|
|
tasks:
|
2025-01-16 18:25:30 +00:00
|
|
|
mocks:generate:
|
2025-03-10 11:03:00 +00:00
|
|
|
run: once
|
2025-01-10 11:12:03 +00:00
|
|
|
cmds:
|
2025-02-03 17:30:50 +00:00
|
|
|
- rm -rf mocks/*
|
2025-05-05 09:31:21 +00:00
|
|
|
- go tool mockery --log-level=""
|
2025-05-03 01:16:53 +00:00
|
|
|
functional:
|
2024-12-19 11:38:57 +00:00
|
|
|
cmds:
|
2025-01-13 17:37:20 +00:00
|
|
|
- mkdir -p {{.OUT_DIR}}
|
2025-04-22 14:40:16 +00:00
|
|
|
- |
|
2025-05-05 09:31:21 +00:00
|
|
|
GOMAXPROCS={{.TEST_PARALLEL}} go test -count=1 -parallel {{.CPU_COUNT}} \
|
2025-05-03 01:16:53 +00:00
|
|
|
-coverpkg={{.INTERNAL}},{{.API}},{{.PKG}} \
|
|
|
|
|
-coverprofile={{.COVERAGE_FILE}} \
|
|
|
|
|
./...
|
|
|
|
|
- task: coverage
|
|
|
|
|
bench:
|
2024-12-19 11:38:57 +00:00
|
|
|
vars:
|
2025-01-10 11:12:03 +00:00
|
|
|
TMP_FILE: "{{.OUT_DIR}}/coverage.tmp"
|
2025-01-15 19:45:51 +00:00
|
|
|
FILTER_COVERAGE_FILE: "{{.OUT_DIR}}/filtered_coverage.out"
|
2024-12-19 11:38:57 +00:00
|
|
|
cmds:
|
2025-05-03 01:16:53 +00:00
|
|
|
- go test -run ^Benchmark -bench=. ./... > {{.BENCH_FILE}}
|
|
|
|
|
- benchstat {{.BENCH_FILE}}
|
|
|
|
|
unit:short:
|
2025-04-24 13:31:47 +00:00
|
|
|
deps:
|
2025-05-03 01:16:53 +00:00
|
|
|
- mocks:generate
|
2025-04-24 13:31:47 +00:00
|
|
|
cmds:
|
2025-05-03 01:16:53 +00:00
|
|
|
- mkdir -p {{.OUT_DIR}}
|
|
|
|
|
- |
|
|
|
|
|
go test -parallel {{.TEST_PARALLEL}} -short \
|
|
|
|
|
{{.INTERNAL}} {{.API}} {{.CLI_ARGS}}
|
2025-04-24 13:31:47 +00:00
|
|
|
coverage:
|
2025-05-03 01:16:53 +00:00
|
|
|
internal: true
|
2025-04-24 13:31:47 +00:00
|
|
|
vars:
|
|
|
|
|
TMP_FILE: "{{.OUT_DIR}}/coverage.tmp"
|
|
|
|
|
FILTER_COVERAGE_FILE: "{{.OUT_DIR}}/filtered_coverage.out"
|
|
|
|
|
cmds:
|
2025-03-05 16:59:01 +00:00
|
|
|
- |
|
|
|
|
|
grep -v -E "{{.EXCLUDED_FILES}}" {{.COVERAGE_FILE}} \
|
|
|
|
|
> {{.FILTER_COVERAGE_FILE}}
|
2025-01-15 19:45:51 +00:00
|
|
|
- go tool cover -func={{.FILTER_COVERAGE_FILE}} > {{.TMP_FILE}}
|
2024-12-19 11:38:57 +00:00
|
|
|
- |
|
2025-01-10 11:12:03 +00:00
|
|
|
COVERAGE=$(grep total: {{.TMP_FILE}} \
|
|
|
|
|
| awk '{print $3}' | sed 's/%//' | bc)
|
2024-12-19 11:38:57 +00:00
|
|
|
echo "Coverage Threshold: {{.COVERAGE_THRESHOLD}}%"
|
|
|
|
|
echo "Total Coverage: $COVERAGE%"
|
2025-03-04 15:51:03 +00:00
|
|
|
|
2024-12-19 11:38:57 +00:00
|
|
|
if (( $(echo "$COVERAGE < {{.COVERAGE_THRESHOLD}}" | bc -l) )); then
|
2025-03-04 15:51:03 +00:00
|
|
|
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
|
2024-12-19 11:38:57 +00:00
|
|
|
exit 1
|
|
|
|
|
fi
|
2025-03-04 15:51:03 +00:00
|
|
|
|
|
|
|
|
echo "✅ All coverage checks passed!"
|