Documentation
¶
Overview ¶
Команда release собирает релиз qwdtt-cli: бинари для каждой платформы, zip для Windows и tar.gz для Linux и macOS.
go run ./scripts/release go run ./scripts/release -version 0.1.0 go run ./scripts/release -platforms windows/amd64 -out C:\tmp\qwdtt-cli
Сборка воспроизводима из чистого клона: команде нужны go, git и доступ к wintun.net (или уже скачанный архив Wintun, см. -wintun-archive). Для каждой платформы из -platforms делается
go build -trimpath -ldflags "-s -w -X main.version=… -X main.commit=…"
с CGO_ENABLED=0 — cgo в проекте не нужен, а без него кросс-сборка не ищет чужой компилятор. Версия и коммит попадают в `qwdtt-cli version` через переменные cmd/qwdtt-cli/main.go.
Раскладка результата (по умолчанию dist/):
dist/qwdtt-cli_<версия>_windows_amd64/qwdtt-cli.exe
dist/qwdtt-cli_<версия>_linux_amd64/qwdtt-cli
dist/qwdtt-cli_<версия>_linux_arm64/qwdtt-cli
dist/qwdtt-cli_<версия>_darwin_arm64/qwdtt-cli
dist/qwdtt-cli_<версия>_windows_amd64.zip
каталог qwdtt-cli_<версия>_windows_amd64/ с qwdtt-cli.exe, wintun.dll,
wintun-LICENSE.txt, THIRD_PARTY_NOTICES.txt, qwdtt-cli.example.toml,
LICENSE, README.md
dist/qwdtt-cli_<версия>_linux_amd64.tar.gz
dist/qwdtt-cli_<версия>_linux_arm64.tar.gz
dist/qwdtt-cli_<версия>_darwin_arm64.tar.gz
каталог qwdtt-cli_<версия>_<платформа>/ с qwdtt-cli,
THIRD_PARTY_NOTICES.txt, qwdtt-cli.example.toml, LICENSE, README.md
wintun.dll (режим -datapath tun) кладётся в zip пакетом scripts/internal/wintun — тем же, что у команды wintun: фиксированная версия, проверка SHA256 архива и, на Windows, подписи DLL. В репозитории её нет. THIRD_PARTY_NOTICES.txt — лицензии всего, что слинковано в бинарь, — собирает `go run ./scripts/notices` на каждую сборку.
Внутри и zip, и tar.gz файлы лежат в каталоге с именем архива: распакованное не смешается с соседними файлами. В tar.gz у qwdtt-cli стоит право на исполнение (0755), у остальных файлов — 0644, на какой бы системе ни шла сборка: архив пишется здесь же, а не tar системы — tar на Windows права на исполнение не ставит.
В конце команда запускает `qwdtt-cli version` у бинаря для своей платформы и проверяет, что версия и коммит подставились.
Флаги:
-version строка версии; по умолчанию `git describe --tags --always --dirty`,
то есть тег, если он есть, иначе короткий коммит; суффикс
-dirty при незакоммиченных изменениях
-out каталог результата; по умолчанию dist в корне репозитория.
Содержимое для собираемых платформ перезаписывается, чужие
файлы не трогаются
-platforms платформы через запятую в виде os/arch; по умолчанию
windows/amd64,linux/amd64,linux/arm64,darwin/arm64
-nozip не собирать архивы — ни zip, ни tar.gz (и не брать wintun.dll)
-wintun-archive уже скачанный wintun-<версия>.zip — сборка без сети
Перенесена с PowerShell (scripts/build-release.ps1). Те же бинари с тем же хешем, те же tar.gz после распаковки, те же записи в zip.