# SPDX-License-Identifier: MPL-2.0
# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk>
#
# Justfile — Build recipes for unified-zig-api
#
# Requires:
#   zig >= 0.15.2
#   idris2 (for ABI proof checking)

zig_dir := "ffi/zig"

# Default: build everything
default: build

# Build shared + static libraries
build:
    cd {{zig_dir}} && zig build

# Build with release optimisation
build-release:
    cd {{zig_dir}} && zig build -Doptimize=ReleaseSafe

# Run unit tests (core, process, gnosis, connector)
test:
    cd {{zig_dir}} && zig build test

# Run integration tests (spawns a local gnosis server)
test-integration:
    cd {{zig_dir}} && zig build test-integration

# Run all tests (unit + integration)
test-all: test test-integration

# Check Idris2 ABI proofs (requires idris2 on PATH)
check-abi:
    idris2 --check src/ZigApi/ABI/Types.idr
    idris2 --check src/ZigApi/ABI/Http.idr
    idris2 --check src/ZigApi/ABI/Process.idr
    idris2 --check src/ZigApi/ABI/Connector.idr
    idris2 --check src/ZigApi/ABI/Foreign.idr

# Regenerate generated/abi/zig_api.h from the Idris2 ABI modules.
# Output is deterministic (fixed section order, no timestamps).
# Run this whenever any src/ZigApi/ABI/*.idr file changes.
gen-header:
    bash scripts/gen-header.sh .

# Verify the committed header matches what gen-header would produce.
# Fails with a diff if there is drift. Used by CI.
check-header:
    just gen-header
    git diff --exit-code generated/abi/zig_api.h

# Build + check everything
ci: check-abi gen-header test

# Remove build artefacts
clean:
    rm -rf {{zig_dir}}/zig-out {{zig_dir}}/.zig-cache

# Show the ABI version embedded in the library
version:
    cd {{zig_dir}} && zig build && ./zig-out/bin/zig_api_version 2>/dev/null || \
        strings zig-out/lib/libzig_api.so | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -1

secret-scan-trufflehog:
    @command -v trufflehog >/dev/null && trufflehog filesystem . --only-verified || true
