Files
sharedinbox/scripts/precommit_dart_check.sh
T

43 lines
1.7 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Pre-commit wrapper for the `dart-check` hook.
#
# `dagger call ... check-fast` needs a Dagger engine. On a dev machine or in
# CI that engine is provisioned from a local container runtime (docker/podman)
# or reached through _EXPERIMENTAL_DAGGER_RUNNER_HOST. In engine-less sandboxes
# (e.g. the agentloop agent pods that commit on our behalf) none of those
# exist, so dagger falls back to its default engine image reference and aborts
# with:
# start engine: driver for scheme "image" was not available
# which blocked every commit the agent tried to make.
#
# Codeberg CI still runs check-fast on every push, so skipping here is safe:
# warn loudly and let the commit through when no engine can be reached.
set -euo pipefail
cd "$(git rev-parse --show-toplevel)"
# True when dagger has some way to reach/provision an engine.
engine_available() {
# A shared engine reached over the wire wins outright.
[ -n "${_EXPERIMENTAL_DAGGER_RUNNER_HOST:-}" ] && return 0
# Otherwise dagger provisions the engine from a local container runtime.
# `info` (not `version`) confirms the daemon is actually reachable; cap it
# with a timeout so a stale docker context cannot hang the commit.
if command -v docker >/dev/null 2>&1 && timeout 10 docker info >/dev/null 2>&1; then
return 0
fi
if command -v podman >/dev/null 2>&1 && timeout 10 podman info >/dev/null 2>&1; then
return 0
fi
return 1
}
if ! engine_available; then
echo "WARNING: no Dagger engine available (no container runtime, and" \
"_EXPERIMENTAL_DAGGER_RUNNER_HOST is unset); skipping dart-check." \
"Codeberg CI still runs check-fast on push." >&2
exit 0
fi
exec nix develop --command dagger call --progress=plain -q -m ci --source=. check-fast