The dart-check hook runs `dagger call ... check-fast`, which needs a
Dagger engine. On a dev machine or in CI the engine is provisioned from
a local container runtime (docker/podman) or reached via
_EXPERIMENTAL_DAGGER_RUNNER_HOST. In engine-less sandboxes (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
That failed every commit the agent tried to make.
Wrap the hook in scripts/precommit_dart_check.sh, which probes for a
reachable engine (runner host set, or a working docker/podman daemon)
and, when none is found, warns and exits 0 instead of failing. Codeberg
CI still runs check-fast on every push, so the check is not lost.
43 lines
1.7 KiB
Bash
Executable File
43 lines
1.7 KiB
Bash
Executable File
#!/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
|