#!/bin/sh
# script/cibuild: run the CI build. The Dockerfile does not run
# script/check; it runs `make fmt-check` and `make lint` in its lint
# stage and `make test` in its builder stage. A successful build
# implies those three passed, provided they actually ran -- which is
# what the CHECK_EPOCH below is for.
# Generic: needs no adaptation. The Gitea workflow runs this on push.
set -eu

ROOT="$(cd "$(dirname "$0")/.." && pwd -P)"

main() {
    cd "$ROOT"
    # The Dockerfile's check layers are keyed on CHECK_EPOCH, so a
    # fresh value here is what forces them to re-run: without it an
    # unchanged tree replays them from cache, the checks never execute,
    # and the build still exits 0. The ARG sits immediately above the
    # check RUNs, so dependency and module layers still cache.
    #
    # Assign the epoch on its own line rather than inline in the
    # argument. Under `set -eu` a command substitution that fails
    # inside an argument does NOT abort the script: CHECK_EPOCH would
    # become an empty string, an empty string is a constant, and a
    # constant CHECK_EPOCH is exactly the cached-check false green this
    # script exists to prevent -- so the guard would disarm itself and
    # still exit 0. As a bare assignment, `set -e` catches a failing
    # `date` and no build starts.
    epoch="$(date +%s)"
    docker build --build-arg CHECK_EPOCH="$epoch" .
}

main "$@"
