#!/usr/bin/env bash # Собирает termharness КАК МОДУЛЬ ВНЕ РЕПО — та же схема, что у minerharness (см. его build.sh): # исходник живёт в eval/ и потому ревьюируем, а go.mod + `replace` материализуются в рабочем каталоге # вне git, так что второго go.mod в репозитории не появляется. # # ./build.sh [commit] # # Пин обязателен: `replace` смотрит в копию коммита (`git archive`), а не в рабочее дерево. # Отличие от minerharness ровно одно — имя модуля и копируемый main.go; сознательно НЕ обобщал общий # скрипт с параметром, чтобы не править файл, которым пинятся уже сданные цифры пакета-7. set -euo pipefail WORK="${1:?usage: build.sh [commit]}" COMMIT="${2:-HEAD}" REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" SHA="$(git -C "$REPO" rev-parse --short "$COMMIT")" PIN="$WORK/pinned-$SHA" MOD="$WORK/termharness" mkdir -p "$PIN" "$MOD" if [ ! -d "$PIN/backend" ]; then git -C "$REPO" archive "$COMMIT" backend | tar -x -C "$PIN" fi cp "$(dirname "${BASH_SOURCE[0]}")/main.go" "$MOD/main.go" cp "$PIN/backend/go.sum" "$MOD/go.sum" { echo "module textmachine/backend/termharness" echo sed -n '/^go /p' "$PIN/backend/go.mod" echo echo "require textmachine/backend v0.0.0" echo sed -n '/^require (/,/^)/p' "$PIN/backend/go.mod" echo echo "replace textmachine/backend => $PIN/backend" } > "$MOD/go.mod" cd "$MOD" GOFLAGS=-mod=mod GOPROXY=off go build -o "$MOD/termharness" . echo "built: $MOD/termharness (backend pinned at $SHA in $PIN/backend)"