samosvalishe dd8233208c fix(lint): устранить замечания golangci-lint + переход на dockers_v2
Проход lint (52 → 0):
- vkauth/token: переименовать затенённый err (govet shadow x3)
- udprelay/loop: явный _ = conn.Close() (errcheck x2)
- captcha/manual: ReadHeaderTimeout + html.EscapeString (G112, G705)
- proxy/tcpfwd: хелпер nonNegUint64 для байтовых счётчиков io.Copy (G115)
- proxy/bondclient, wire/bondframe: bounds-проверки на len->uint16/uint32
- wire/srtpmimicry: задокументирована усечка RTP seq mod 2^16
- dnsdial/doh: bounds-проверка + binary.BigEndian.PutUint16
- captcha/slider: clamp luma до 255 перед конверсией uint8
- vkauth/types: обоснованный nolint для публичных учёток VK SDK

Новый пакет internal/randx — Intn/IntN/Float64 на crypto/rand, drop-in замена
math/rand. Мигрированы все места antifingerprint-jitter (~22) в captcha, slider,
namegen, vkauth, udprelay.

GoReleaser:
- bump GORELEASER_VERSION v2.5.0 → v2.15.4 в Taskfile и обоих CI-workflow;
  текущий синтаксис .goreleaser.yaml (archives.ids, format_overrides.formats)
  требует v2.8+
- миграция dockers + docker_manifests → dockers_v2 (единый блок, multi-platform
  buildx); Dockerfile.goreleaser использует конвенцию ARG TARGETPLATFORM
2026-05-23 01:37:42 +03:00
2025-11-25 11:38:20 +00:00

License Go

О проекте

btp — туннель UDP/TCP через TURN-реле VK Calls. Клиент берёт временные TURN-учётки из ссылки на звонок и гонит ваш трафик (WireGuard, Xray/VLESS) до сервера на VPS поверх DTLS.

Быстрый старт

См. docs/quickstart.md. Полная документация — в docs/.

Разработка

Зависимости

  • Go ≥ 1.25 — https://go.dev/dl/
  • Task (runner) — go install github.com/go-task/task/v3/cmd/task@v3.40.0 или winget install Task.Task / brew install go-task

Остальные dev-инструменты (golangci-lint, govulncheck, goimports, goreleaser) ставит сам Task:

task tools:install

Команды

task                # список доступных задач
task build          # собрать client + server в dist/ для текущего хоста
task build:all      # кросс-сборка всех target через goreleaser snapshot
task test           # go test -race
task test:cover     # тесты + покрытие → cover.html
task lint           # golangci-lint
task fmt            # gofmt + goimports (форматирование)
task fmt:check      # проверить форматирование (используется в CI)
task vet            # go vet
task vuln           # govulncheck
task ci             # полный набор: fmt:check + vet + lint + test + vuln
task tidy           # go mod tidy
task clean          # удалить dist/, cover.out, cover.html

Релизы

Авто-релизы через Release Please + GoReleaser.

Conventional Commits:

  • feat: ... — minor bump
  • fix: ... / perf: ... — patch bump
  • break: ... (или feat!:) — major bump
  • refactor:, docs:, test:, chore:, ci:, style: — в CHANGELOG не попадают (либо группа Refactoring)

Поток: push в main → Release Please откроет PR chore(main): release X.Y.Z с обновлённым CHANGELOG.md → merge PR → тег vX.Y.Z → GoReleaser выпускает релиз (бинари + Docker image на GHCR).

Pre-release: создать тег вручную git tag v0.X.Y-rc.1 && git push --tags. GoReleaser детектит автоматически (latest Docker тег не обновляется).


Telegram канал: Free Turn

S
Description
FreeTurn: core and server
Readme MIT 2.4 MiB
Languages
Go 87.6%
Shell 11.4%
JavaScript 0.7%
PowerShell 0.3%