43 lines
1.8 KiB
Bash
Executable file
43 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
# Собирает softsign-decl КАК МОДУЛЬ ВНЕ РЕПО (прецедент pkg7/minerharness): исходник живёт в 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/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)"
|