45 lines
2.1 KiB
Bash
Executable file
45 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
# Собирает minerharness КАК МОДУЛЬ ВНЕ РЕПО (прецедент пакета-6): исходник живёт в eval/ (чтобы был
|
||
# ревьюируем и воспроизводим), а go.mod + `replace` материализуются в рабочем каталоге вне git.
|
||
# В репозитории второго go.mod не появляется — сборка/vet бэкенда его не видят.
|
||
#
|
||
# ./build.sh <work-dir> [commit]
|
||
#
|
||
# work-dir — куда положить модуль и пин-копию бэкенда (скретчпад сессии).
|
||
# commit — какой коммит бэкенда пинить (по умолчанию HEAD). Пин обязателен: параллельная
|
||
# бэкенд-сессия правит рабочее дерево, и `replace` на него дал бы невоспроизводимый прогон.
|
||
set -euo pipefail
|
||
|
||
WORK="${1:?usage: build.sh <work-dir> [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/minerharness"
|
||
|
||
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"
|
||
|
||
# Требования зеркалим из go.mod пина, чтобы версии совпали побайтно и `go mod tidy` не понадобился
|
||
# (сеть в сборке не участвует: GOFLAGS=-mod=mod, всё берётся из локального модуль-кеша).
|
||
{
|
||
echo "module textmachine/backend/minerharness"
|
||
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/minerharness" .
|
||
echo "built: $MOD/minerharness (backend pinned at $SHA in $PIN/backend)"
|