#!/usr/bin/env bash # Собирает softsign-decl КАК МОДУЛЬ ВНЕ РЕПО (прецедент pkg7/minerharness): исходник живёт в eval/ (ревью, # воспроизводимость), а go.mod + `replace` материализуются в рабочем каталоге вне git. Второго go.mod в # репозитории не появляется — сборка/vet бэкенда его не видят. # # ./build.sh [commit] # # work-dir — куда положить модуль и пин-копию бэкенда (скретчпад сессии). # commit — какой коммит бэкенда пинить (по умолчанию HEAD). Пин обязателен: параллельная бэкенд-сессия # правит рабочее дерево, и `replace` на него дал бы невоспроизводимый прогон. 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/softsign-decl" 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/softsign-decl" 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/softsign-decl" . echo "built: $MOD/softsign-decl (backend pinned at $SHA in $PIN/backend)"