документация
Единственное требование — запущенный Docker Desktop. На машину ничего не устанавливается: ни Go, ни компиляторов, ни инструментов упаковки.
git clone https://github.com/Vitalii-Yemets/holdtotype cd holdtotype .\build.ps1 # модель small, около 466 МБ .\build.ps1 -Model medium # точнее, больше
Результат оказывается в dist/:
holdtotype.exetray client: Go, WinAPI, WebView2
whisper-server.exerecognition, whisper.cpp, static build
sherpa-server.exerecognition, sherpa-onnx, official static build, pinned and checksum-verified
sherpa-online-server.exestreaming recognition, sherpa-onnx, from the same pinned archive
llama-server.exethe editor model for post-processing, llama.cpp
models/the model you chose at build time
config.default.jsondefault settings
Кросс-компиляция whisper.cpp и llama.cpp через MinGW-w64 в контейнере Linux, клиент на Go с cgo для захвата микрофона, генерация иконок, упаковка установщика. Всё это в build/Dockerfile. Оба движка закреплены на конкретных версиях, поэтому сборки воспроизводимы.
Всё тоже работает в контейнерах, ничего устанавливать не нужно:
docker build --file build/Dockerfile --target gotest . # юнит-тесты Go и go vet, цель Windows docker run --rm -v "${PWD}:/w" -w /w node:20 sh -c "node test/build-page.js && cd test && npm i --no-save --silent jsdom && node ui.test.js" # страница настроек в jsdom
client/internal/... — юнит-тесты частей с логикой: сравнение версий, дубликаты сочетаний, правила для программ, замены, голосовые команды, история, цепочки промптов, анализ звука, хеши файлов и файл списков.test/ui.test.js — настоящая страница настроек в jsdom: переключение разделов, матрица перевода, редактор промптов, правила, замены, команды, история, удаление моделей, мастер первого запуска и отсутствие ошибок JavaScript.test/locales.test.js — каждый из восьми языков содержит каждую строку, которая нужна странице и программе.test/setup.test.js — страница установщика: шаги, выбор модели, тихие ключи.client/internal/theme — каждый дизайн сохраняет своё лицо, углы, отметки уровня и лампы.Дальше запускайте собственную сборку вместо скачанной. Это та же программа, сделанная из тех же исходников.