mirror of
https://github.com/gohugoio/hugo.git
synced 2026-08-24 15:28:54 +00:00
d67925f5a1
Running `mage check` takes too long time for user (and agent) iterations. That will eventualy run on CI. This is a faster version that: * Checks gofmt. * Runs go vet. * Runs staticcheck. * Runs unit tests without the race flag. It assumes that Go is installed, but will check if staticcheck is available and install it if not with go install. It takes an optional argument to specify packages to check, otherwise it checks all packages. This commit also enable local runs of the image golden tests.
91 lines
1.9 KiB
Bash
Executable File
91 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Default to all packages if none specified
|
|
PACKAGES="${1:-./...}"
|
|
|
|
echo "==> Checking packages: $PACKAGES"
|
|
|
|
# Timing arrays
|
|
declare -a STEP_NAMES
|
|
declare -a STEP_TIMES
|
|
|
|
time_step() {
|
|
local name="$1"
|
|
shift
|
|
local start=$(date +%s.%N)
|
|
"$@"
|
|
local end=$(date +%s.%N)
|
|
local elapsed=$(echo "$end - $start" | bc)
|
|
STEP_NAMES+=("$name")
|
|
STEP_TIMES+=("$elapsed")
|
|
}
|
|
|
|
# Check gofmt
|
|
run_gofmt() {
|
|
echo "==> Running gofmt..."
|
|
# Convert package pattern to path (e.g., ./hugolib/... -> ./hugolib)
|
|
local path="${PACKAGES%/...}"
|
|
GOFMT_OUTPUT=$(gofmt -l "$path" 2>&1) || true
|
|
if [ -n "$GOFMT_OUTPUT" ]; then
|
|
echo "gofmt found issues in:"
|
|
echo "$GOFMT_OUTPUT"
|
|
exit 1
|
|
fi
|
|
echo " OK"
|
|
}
|
|
|
|
# Run go vet
|
|
run_govet() {
|
|
echo "==> Running go vet..."
|
|
go vet $PACKAGES
|
|
echo " OK"
|
|
}
|
|
|
|
# Run staticcheck
|
|
run_staticcheck() {
|
|
# Check if staticcheck is installed, install if not
|
|
if ! command -v staticcheck &> /dev/null; then
|
|
echo "==> Installing staticcheck..."
|
|
go install honnef.co/go/tools/cmd/staticcheck@latest
|
|
fi
|
|
echo "==> Running staticcheck..."
|
|
staticcheck $PACKAGES
|
|
echo " OK"
|
|
}
|
|
|
|
# Run tests
|
|
run_tests() {
|
|
echo "==> Running tests..."
|
|
local output
|
|
if ! output=$(go test $PACKAGES 2>&1); then
|
|
echo "$output"
|
|
exit 1
|
|
fi
|
|
echo " OK"
|
|
}
|
|
|
|
# Run all steps with timing
|
|
TOTAL_START=$(date +%s.%N)
|
|
|
|
time_step "gofmt" run_gofmt
|
|
time_step "go vet" run_govet
|
|
time_step "staticcheck" run_staticcheck
|
|
time_step "tests" run_tests
|
|
|
|
TOTAL_END=$(date +%s.%N)
|
|
TOTAL_ELAPSED=$(echo "$TOTAL_END - $TOTAL_START" | bc)
|
|
|
|
# Print timing summary
|
|
echo ""
|
|
echo "==> All checks passed!"
|
|
echo ""
|
|
echo "Timing summary:"
|
|
echo "---------------"
|
|
for i in "${!STEP_NAMES[@]}"; do
|
|
printf " %-15s %6.2fs\n" "${STEP_NAMES[$i]}" "${STEP_TIMES[$i]}"
|
|
done
|
|
echo "---------------"
|
|
printf " %-15s %6.2fs\n" "Total" "$TOTAL_ELAPSED"
|