Post-merge / detect-type (push) Successful in 53s
Post-merge / release (push) Successful in 1m14s
Post-merge / validate-commit-msg (push) Successful in 1m25s
Post-merge / vikunja (push) Successful in 1m21s
Post-merge / badges (push) Successful in 1m45s
Post-merge / configure-repo (push) Successful in 1m15s
Post-merge / sync-wiki (push) Successful in 3m5s
Post-merge / publish (push) Successful in 1m1s
62 lines
2.1 KiB
Bash
Executable File
62 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# pre-push hook: validate Vikunja task exists and tests are fast.
|
|
#
|
|
# This catches issues that would otherwise only surface in CI:
|
|
# - Branch name missing task ID (e.g., GRM-N)
|
|
# - Vikunja task does not exist for the task ID in the branch name
|
|
# - Unit tests too slow (total > 4s, per-test > 0.5s)
|
|
#
|
|
# Uses devx.tools.pre_push_check for reusable validation logic.
|
|
# Project config (task prefix, Vikunja project ID) is read from
|
|
# [tool.devx] in pyproject.toml by devx.config — no hardcoded values here.
|
|
#
|
|
# Bootstrap resilience: if devx is not importable (e.g., during devx
|
|
# upgrades), the hook prints a warning and allows the push.
|
|
|
|
# Determine the branch being pushed
|
|
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")
|
|
|
|
if [ -z "$BRANCH" ] || [ "$BRANCH" = "master" ] || [ "$BRANCH" = "main" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Load .env if present (for VIKUNJA_TOKEN)
|
|
if [ -f .env ]; then
|
|
set -a
|
|
# shellcheck disable=SC1091
|
|
. .env
|
|
set +a
|
|
fi
|
|
|
|
# Find the Python interpreter with devx installed
|
|
if [ -f .venv/bin/python ]; then
|
|
PY=.venv/bin/python
|
|
elif [ -x "${HOME}/.pyenv/bin/pyenv" ]; then
|
|
export PYENV_ROOT="${HOME}/.pyenv"
|
|
export PATH="${PYENV_ROOT}/bin:${PYENV_ROOT}/shims:${PATH}"
|
|
eval "$("${PYENV_ROOT}/bin/pyenv" init -)" 2>/dev/null || true
|
|
eval "$("${PYENV_ROOT}/bin/pyenv" virtualenv-init -)" 2>/dev/null || true
|
|
pyenv activate grm 2>/dev/null || true
|
|
PY=python3
|
|
else
|
|
PY=python3
|
|
fi
|
|
|
|
# Bootstrap resilience: if devx is not importable, warn but allow the push
|
|
if ! $PY -c "import devx.tools.pre_push_check" 2>/dev/null; then
|
|
echo "WARNING: devx not installed — pre-push check skipped."
|
|
echo "Run 'make setup' to install devx."
|
|
exit 0
|
|
fi
|
|
|
|
# Run pre-push validation via devx
|
|
$PY -m devx.tools.pre_push_check --branch "$BRANCH" || {
|
|
echo ""
|
|
echo "Pre-push validation failed. Fix the issues above before pushing."
|
|
echo "To bypass (NOT recommended): git push --no-verify"
|
|
exit 1
|
|
}
|
|
|
|
# Check test speed (aligned with CI thresholds)
|
|
$PY -m devx.tools.check_test_speed --max-seconds 4 --max-single-seconds 0.5
|