Установка зависимостей раннеров для сборки Aspia (macOS, Android) — команды
Соответствует .gitea/workflows/release.yml на коммите 5565451d6 (ветка domain-auth, Coder/aspia
на https://git.byte-mate.ru). Пояснения «зачем» — в RUNNERS.md, здесь только команды.
Пометки: [проверено] — версия/ID/URL проверены 20.10.2026 по официальному источнику (ссылка рядом); [не проверено] — не удалось проверить, сверьте на месте.
0. Версия раннера
Проект переименован: новые версии называются gitea-runner 3.x–5.x (последняя — 5.1.1 от 16.10.2026, https://gitea.com/gitea/act_runner/releases) [проверено]. У вас сейчас act_runner v0.2.13; его файлы по-прежнему доступны [проверено, HTTP 200]:
https://gitea.com/gitea/act_runner/releases/download/v0.2.13/act_runner-0.2.13-darwin-arm64https://gitea.com/gitea/act_runner/releases/download/v0.2.13/act_runner-0.2.13-windows-amd64.exe
Ниже используется v0.2.13 — та же версия, что на работающих раннерах. Переход на 5.x —
отдельная задача: в 5.0.0 есть несовместимые изменения (нужен Git ≥ 2.34.1 в PATH раннера,
${NAME} в config.yaml раскрывается из окружения, job без runs-on падает); совместимость 5.x с
Gitea 1.25.4 [не проверено].
Важно — таймаут на стороне Gitea. В примере config.yaml act_runner сказано: у Gitea свой
таймаут задачи (3 ч по умолчанию) [проверено: комментарий в config.example.yaml v0.2.13].
Первая сборка macOS universal без кэша может идти дольше. Если задача обрывается через 3 ч,
увеличьте в app.ini Gitea секцию [actions] (параметр ENDLESS_TASK_TIMEOUT, имя
[не проверено] для 1.25 — сверьте с https://docs.gitea.com/administration/config-cheat-sheet#actions-actions),
либо задайте vars.MACOS_UNIVERSAL=false для первой сборки.
1. macOS (Apple Silicon), метка macos-arm64:host
Все команды — в Terminal под пользователем раннера (runner, без прав администратора; для
sudo нужен администратор — выполните эти строки от него).
1.1 Xcode и Rosetta
Полный Xcode из App Store (Qt 6.10+ не собирается только с Command Line Tools — так в upstream
workflow). Workflow задаёт DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer, поэтому Xcode
должен лежать именно там.
# после установки Xcode из App Store:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -license accept
sudo xcodebuild -runFirstLaunch
xcode-select --install # Command Line Tools (если спросит)
# Rosetta 2 — нужна для x86_64-половины universal-сборки (workflow запускает `arch -x86_64 cmake`)
sudo softwareupdate --install-rosetta --agree-to-license
Homebrew для x86_64 (arch -x86_64 brew, /usr/local) не нужен: компиляцию под x86_64 делает
clang из Xcode (universal). Но workflow запускает arch -x86_64 cmake, а arch требует, чтобы в
самом cmake была x86_64-часть. Бутылки Homebrew — только arm64, поэтому CMake ставится не из
Homebrew, а официальный universal CMake.app (1.3a), как в upstream workflow
(/Applications/CMake.app/Contents/bin). Остальные инструменты (ninja и т. д.) запускаются как
дочерние процессы и работают нативно в arm64 [не проверено] на реальной сборке.
1.2 Homebrew
Официальная команда установки (https://brew.sh) [проверено]:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
1.3 Инструменты
Шаг «Check the tools» в workflow проверяет: cmake ninja pkg-config autoconf automake libtool nasm python3 gzip lipo (+ xcodebuild, при universal — arch -x86_64). Формулы Homebrew
[проверено: https://formulae.brew.sh/api/formula/<имя>.json → 200]:
brew install ninja pkgconf autoconf autoconf-archive automake libtool nasm python@3.13 git gnu-tar xz node
1.3a CMake 4.4.4 universal (официальный)
Та же версия, что закреплена для Linux-job (cmake==4.4.4); файл
cmake-4.4.4-macos-universal.dmg [проверено: https://github.com/Kitware/CMake/releases/tag/v4.4.4].
cd /tmp
curl -fLO https://github.com/Kitware/CMake/releases/download/v4.4.4/cmake-4.4.4-macos-universal.dmg
hdiutil attach cmake-4.4.4-macos-universal.dmg -mountpoint /Volumes/cmake-4.4.4 -nobrowse
sudo ditto /Volumes/cmake-4.4.4/CMake.app /Applications/CMake.app
hdiutil detach /Volumes/cmake-4.4.4
lipo -archs /Applications/CMake.app/Contents/bin/cmake # ожидается: x86_64 arm64
(Есть и cask brew install --cask cmake-app [проверено: formulae.brew.sh], но его версия не
закреплена.) Если cmake ставили через brew — brew uninstall cmake, чтобы в PATH был только
universal. /Applications/CMake.app/Contents/bin должен стоять в PATH первым (plist в 1.6).
pkgconfдаёт командуpkg-config(формулаpkg-configв Homebrew — псевдоним pkgconf).gzip,tar,lipo,openssl,security,ditto,PlistBuddy,productbuild— системные / из Xcode.node— для JavaScript-actions (checkout, cache, upload-artifact) в host-режиме.autoconf-archive,xz,gnu-tar,git— не проверяются workflow, но нужны портам vcpkg / удобны; точный список, нужный портам vcpkg на macOS, [не проверено] — если порт попросит ещё что-то (напримерbison,flex,gperf,meson), доставьте черезbrew install.
1.4 act_runner v0.2.13 (darwin-arm64)
mkdir -p ~/act_runner && cd ~/act_runner
curl -fL -o act_runner https://gitea.com/gitea/act_runner/releases/download/v0.2.13/act_runner-0.2.13-darwin-arm64
chmod +x act_runner
xattr -d com.apple.quarantine act_runner 2>/dev/null || true
./act_runner --version
./act_runner generate-config > config.yaml
Правка config.yaml (ключи из config.example.yaml v0.2.13 [проверено]):
# capacity: 1 (по умолчанию уже 1), timeout: 12h (workflow ставит timeout-minutes: 720), метка host
sed -i '' 's/^ timeout: 3h/ timeout: 12h/' config.yaml
python3 - <<'PY'
import re
p='config.yaml'; s=open(p).read()
s=re.sub(r'(?ms)^ labels:\n( - .*\n)+', ' labels:\n - "macos-arm64:host"\n', s)
open(p,'w').write(s)
PY
grep -nE '^ (capacity|timeout|labels)' -A1 config.yaml
1.5 Регистрация
Токен: Coder/aspia → Settings → Actions → Runners → «Create new runner».
cd ~/act_runner
./act_runner register --no-interactive \
--instance https://git.byte-mate.ru \
--token <RUNNER_REGISTRATION_TOKEN> \
--name mac-arm64-01 \
--labels macos-arm64:host \
--config config.yaml
1.6 Сервис launchd (LaunchAgent пользователя runner)
Включите автологин пользователя runner (System Settings → Users & Groups) — LaunchAgent и связки
ключей работают в его сессии. Отключите сон: sudo pmset -a sleep 0 disksleep 0.
mkdir -p ~/Library/LaunchAgents
cat > ~/Library/LaunchAgents/ru.byte-mate.act_runner.plist <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>ru.byte-mate.act_runner</string>
<key>ProgramArguments</key>
<array>
<string>$HOME/act_runner/act_runner</string>
<string>daemon</string>
<string>--config</string>
<string>$HOME/act_runner/config.yaml</string>
</array>
<key>WorkingDirectory</key><string>$HOME/act_runner</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key><string>/Applications/CMake.app/Contents/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
<key>LANG</key><string>en_US.UTF-8</string>
<key>HOME</key><string>$HOME</string>
</dict>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>$HOME/act_runner/runner.log</string>
<key>StandardErrorPath</key><string>$HOME/act_runner/runner.log</string>
</dict>
</plist>
PLIST
plutil -lint ~/Library/LaunchAgents/ru.byte-mate.act_runner.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ru.byte-mate.act_runner.plist
launchctl kickstart -k gui/$(id -u)/ru.byte-mate.act_runner
launchctl print gui/$(id -u)/ru.byte-mate.act_runner | grep -E 'state|pid'
tail -f ~/act_runner/runner.log # Ctrl+C для выхода
Перезапуск после правки config.yaml: launchctl kickstart -k gui/$(id -u)/ru.byte-mate.act_runner.
Удаление: launchctl bootout gui/$(id -u)/ru.byte-mate.act_runner.
1.7 Проверка
xcodebuild -version
xcode-select -p # /Applications/Xcode.app/Contents/Developer
arch -x86_64 /usr/bin/true && echo "rosetta ok"
for t in cmake ninja pkg-config autoconf automake libtool nasm python3 gzip lipo git node; do
printf '%-11s ' "$t"; command -v "$t" || echo "НЕТ"; done
export PATH="/Applications/CMake.app/Contents/bin:$PATH" # как в plist
command -v cmake # /Applications/CMake.app/Contents/bin/cmake
cmake --version | head -1 # cmake version 4.4.4
lipo -archs "$(command -v cmake)" # x86_64 arm64
arch -x86_64 cmake --version | head -1 # должна запуститься под Rosetta
df -h ~ # нужно ≥ 150 ГБ свободно
В Gitea: Settings → Actions → Runners — mac-arm64-01, статус Idle, метка macos-arm64.
2. Android на существующем Windows-раннере, метка windows-android
PowerShell от администратора. Пути — ровно те, что workflow ждёт по умолчанию (иначе задайте переменные, см. 2.6).
| Что | Путь по умолчанию в workflow | Переменная |
|---|---|---|
| Qt for Android | C:/Qt/6.11.1/android_arm64_v8a |
ANDROID_QT_PATH |
| Host Qt | C:/Qt/6.11.1/mingw_64 |
ANDROID_QT_HOST_PATH |
| Android SDK | C:/Android/sdk |
ANDROID_SDK_ROOT |
| NDK | C:/Android/sdk/ndk/27.2.12479018 |
ANDROID_NDK_ROOT |
| JDK | C:/Program Files/Eclipse Adoptium/jdk-21.0.11.10-hotspot |
ANDROID_JAVA_HOME |
Требования Qt 6.11 для Android: NDK r27c (27.2.12479018), JDK 21
[проверено: https://doc.qt.io/qt-6.11/android.html]. Gradle (9.3.1, AGP 9.0.0 по той же странице)
скачивается сам через Gradle wrapper — нужен доступ в интернет (services.gradle.org,
dl.google.com, repo.maven.apache.org).
2.1 JDK 21 (Eclipse Temurin)
winget-ID EclipseAdoptium.Temurin.21.JDK [проверено: microsoft/winget-pkgs]. Альтернатива —
Microsoft.OpenJDK.21 [проверено], но тогда путь другой → задайте ANDROID_JAVA_HOME.
winget install --id EclipseAdoptium.Temurin.21.JDK -e --accept-package-agreements --accept-source-agreements
Get-ChildItem 'C:\Program Files\Eclipse Adoptium' | Select-Object Name
Точная папка зависит от версии, которую поставит winget (например jdk-21.0.9.10-hotspot); если
она не jdk-21.0.11.10-hotspot — задайте переменную ANDROID_JAVA_HOME (2.6) на фактический путь
(прямые слэши).
$jdk = (Get-ChildItem 'C:\Program Files\Eclipse Adoptium' -Directory | Where-Object Name -like 'jdk-21*' | Select-Object -First 1).FullName
setx /M JAVA_HOME "$jdk"
& "$jdk\bin\java.exe" -version
2.2 Android SDK command-line tools
Файл commandlinetools-win-15859902_latest.zip, SHA-256
90ae805d20434428bffcb699c290860f19bb5f66a67e6b330067e3de801fb04a
[проверено: https://developer.android.com/studio#command-line-tools-only].
$sdk = 'C:\Android\sdk'
New-Item -ItemType Directory -Force -Path "$sdk\cmdline-tools" | Out-Null
$zip = "$env:TEMP\cmdline-tools.zip"
Invoke-WebRequest -Uri 'https://dl.google.com/android/repository/commandlinetools-win-15859902_latest.zip' -OutFile $zip
if ((Get-FileHash $zip -Algorithm SHA256).Hash -ne '90AE805D20434428BFFCB699C290860F19BB5F66A67E6B330067E3DE801FB04A') { throw 'SHA-256 mismatch' }
Expand-Archive $zip -DestinationPath "$sdk\cmdline-tools" -Force
Rename-Item "$sdk\cmdline-tools\cmdline-tools" 'latest' # структура, которую ждёт sdkmanager
setx /M ANDROID_SDK_ROOT $sdk
setx /M ANDROID_HOME $sdk
2.3 Пакеты SDK
NDK 27.2.12479018 — как в workflow/upstream и в требованиях Qt 6.11 [проверено]. Уровень API и
build-tools: Qt берёт самые новые установленные; platforms;android-35 / build-tools;35.0.0
взяты как разумный минимум [не проверено] для Qt 6.11 — если Gradle потребует другие, он
назовёт их в логе, доставьте той же командой.
$env:JAVA_HOME = $jdk
$sm = 'C:\Android\sdk\cmdline-tools\latest\bin\sdkmanager.bat'
& $sm --sdk_root=C:\Android\sdk --list | Select-String -Pattern 'ndk;27|platforms;android-3[5-9]|build-tools;3[5-9]' | Select-Object -First 15
'y' * 20 | & $sm --sdk_root=C:\Android\sdk --licenses
& $sm --sdk_root=C:\Android\sdk "platform-tools" "platforms;android-35" "build-tools;35.0.0" "ndk;27.2.12479018"
Test-Path 'C:\Android\sdk\ndk\27.2.12479018\source.properties'
2.4 Qt 6.11.1 (Android arm64-v8a + host MinGW)
Нужны два компонента [проверено по Updates.xml в https://download.qt.io/online/qtsdkrepository/]:
qt.qt6.6111.android_arm64_v8a(репозиторийall_os/android/qt6_6111/qt6_6111_arm64_v8a)qt.qt6.6111.win64_mingw(репозиторийwindows_x86/desktop/qt6_6111/qt6_6111_mingw)
Модули проекта (Core, Gui, Network, Widgets, Xml, Svg, PrintSupport, Test, LinguistTools) входят в базовый пакет — в списке add-on'ов Android 6.11.1 их нет, add-on'ы не нужны [проверено].
Вариант А — официальный онлайн-установщик (нужна учётная запись Qt). URL установщика [проверено, HTTP 200]:
Invoke-WebRequest -Uri 'https://download.qt.io/official_releases/online_installers/qt-online-installer-windows-x64-online.exe' -OutFile "$env:TEMP\qt-online-installer.exe"
& "$env:TEMP\qt-online-installer.exe" --root C:\Qt --accept-licenses --accept-obligations `
--default-answer --confirm-command --email <QT_ACCOUNT_EMAIL> --pw <QT_ACCOUNT_PASSWORD> `
install qt.qt6.6111.android_arm64_v8a qt.qt6.6111.win64_mingw
Ключи --root --accept-licenses --accept-obligations --default-answer --confirm-command --email --pw install — из документации Qt Installer Framework / Qt Online Installer CLI [не проверено] на этой
версии установщика (qt-online-installer.exe --help покажет точный список). Вместо --email/--pw
можно задать токен в переменной QT_INSTALLER_JWT_TOKEN [не проверено]. Пароль не оставляйте в
истории PowerShell (Clear-History).
Вариант Б — aqtinstall (без учётной записи). aqtinstall 3.3.0 — текущая версия на PyPI
[проверено]; aqt list-qt all_os android показывает 6.11.1 и arch android_arm64_v8a [проверено];
сама установка не запускалась [не проверено].
py -m pip install --upgrade aqtinstall==3.3.0
py -m aqt install-qt windows desktop 6.11.1 win64_mingw --outputdir C:\Qt
py -m aqt install-qt all_os android 6.11.1 android_arm64_v8a --outputdir C:\Qt
Проверка путей, которые ждёт workflow:
Test-Path 'C:\Qt\6.11.1\android_arm64_v8a\lib\cmake\Qt6\qt.toolchain.cmake'
Test-Path 'C:\Qt\6.11.1\mingw_64\bin\qmake.exe'
Сам компилятор MinGW (qt.tools.win64_mingw1310) для сборки не нужен — host-инструменты
собираются MSVC (шаг Set up MSVC); нужен только host Qt mingw_64 как QT_HOST_PATH (так в upstream).
2.5 Метка windows-android для существующего раннера
В act_runner v0.2.13: если в config.yaml задан runner.labels, используется он; если пусто —
метки из .runner [проверено: комментарий в config.example.yaml v0.2.13]. Перерегистрация не нужна.
cd <ПАПКА_РАННЕРА> # где лежат act_runner.exe, config.yaml и .runner
Copy-Item config.yaml config.yaml.bak
notepad config.yaml
В config.yaml:
runner:
labels:
- "windows:host"
- "windows-android:host"
(Если раннер был зарегистрирован с другой основной меткой — сохраните её; посмотреть текущие:
Get-Content .runner.) Перезапуск службы NSSM:
nssm status <ИМЯ_СЛУЖБЫ> # имя: Get-Service | ? Name -like '*runner*'
nssm restart <ИМЯ_СЛУЖБЫ>
В Gitea: Settings → Actions → Runners — у раннера метки windows и windows-android.
2.6 Переменные репозитория (если пути отличаются)
Coder/aspia → Settings → Actions → Variables (прямые слэши):
ANDROID_QT_PATH, ANDROID_QT_HOST_PATH, ANDROID_SDK_ROOT, ANDROID_NDK_ROOT, ANDROID_JAVA_HOME.
3. Windows: gzip для кэша vcpkg (сейчас «Save vcpkg cache» падает)
Ошибка: C:\Program Files\Git\usr\bin\tar.exe ... -z → /bin/sh: gzip: command not found.
tar из Git for Windows вызывает gzip через sh, а sh ищет его по PATH. Две причины: нет файла
gzip.exe в usr\bin (MinGit / урезанная установка) или в PATH службы нет
C:\Program Files\Git\usr\bin. Полный Git for Windows содержит usr\bin\gzip.exe
[не проверено] для текущей 2.55.0 — проверьте командой ниже.
3.1 Диагностика
Test-Path 'C:\Program Files\Git\usr\bin\gzip.exe'
& 'C:\Program Files\Git\usr\bin\sh.exe' -c 'command -v gzip; echo PATH=$PATH'
nssm get <ИМЯ_СЛУЖБЫ> AppEnvironmentExtra
3.2 Если файла нет — поставить полный Git for Windows
winget-ID Git.Git (последняя в каталоге — 2.55.0) [проверено: microsoft/winget-pkgs]:
winget install --id Git.Git -e --accept-package-agreements --accept-source-agreements
Test-Path 'C:\Program Files\Git\usr\bin\gzip.exe'
3.3 Если файл есть, но служба его не видит — добавить usr\bin в PATH службы
NSSM AppEnvironmentExtra дописывает переменные к окружению службы; %PATH% при этом
[не проверено] раскрывается не во всех версиях NSSM — надёжнее записать PATH целиком:
$sysPath = [Environment]::GetEnvironmentVariable('Path','Machine')
nssm set <ИМЯ_СЛУЖБЫ> AppEnvironmentExtra "PATH=C:\Program Files\Git\usr\bin;$sysPath"
nssm get <ИМЯ_СЛУЖБЫ> AppEnvironmentExtra
nssm restart <ИМЯ_СЛУЖБЫ>
(Если в AppEnvironmentExtra уже есть другие переменные — передайте их тем же вызовом через
пробел: nssm set <ИМЯ> AppEnvironmentExtra "A=1" "PATH=...", иначе они перезапишутся.)
3.4 Проверка
& 'C:\Program Files\Git\usr\bin\sh.exe' -c 'command -v gzip && gzip --version | head -1'
& 'C:\Program Files\Git\usr\bin\sh.exe' -c 'echo test | gzip -c | gzip -dc'
Окончательная проверка — в логе следующего прогона шаг «Save vcpkg cache» должен закончиться
Cache saved successfully (раньше — gzip: command not found).
4. Секреты и переменные Gitea (Coder/aspia → Settings → Actions)
Все необязательные; без них — неподписанные .pkg и debug-APK.
macOS (подпись/нотаризация) — секреты: MACOS_CERT_P12_BASE64, MACOS_CERT_PASSWORD,
MACOS_APP_SIGN_IDENTITY, MACOS_INSTALLER_SIGN_IDENTITY, MACOS_NOTARY_APPLE_ID,
MACOS_NOTARY_TEAM_ID, MACOS_NOTARY_PASSWORD. Переменная: MACOS_UNIVERSAL (false — только arm64).
# Экспортируйте «Developer ID Application» и «Developer ID Installer» с ключами в один certs.p12
# (Keychain Access → выделить оба → Export Items…), затем:
base64 -i certs.p12 | pbcopy # вставить в MACOS_CERT_P12_BASE64
security find-identity -v -p codesigning # точная строка для MACOS_APP_SIGN_IDENTITY
security find-identity -v # строка "Developer ID Installer: ..." для MACOS_INSTALLER_SIGN_IDENTITY
# MACOS_NOTARY_PASSWORD — app-specific password: https://account.apple.com → Sign-In and Security
rm -P certs.p12 2>/dev/null || rm certs.p12
Android (release-подпись) — секреты: ANDROID_KEYSTORE_BASE64, ANDROID_KEYSTORE_PASSWORD,
ANDROID_KEY_ALIAS, ANDROID_KEY_PASSWORD. Переменные (если пути другие): см. 2.6.
& "$env:JAVA_HOME\bin\keytool.exe" -genkeypair -v -keystore aspia-release.keystore -alias aspia `
-keyalg RSA -keysize 4096 -validity 10000 -storetype PKCS12
[Convert]::ToBase64String([IO.File]::ReadAllBytes("$PWD\aspia-release.keystore")) | Set-Clipboard # → ANDROID_KEYSTORE_BASE64
# альтернатива: certutil -encode aspia-release.keystore ks.b64 (затем удалить строки BEGIN/END и переносы)
Для PKCS12 пароль ключа равен паролю хранилища — задайте одно значение в ANDROID_KEYSTORE_PASSWORD
и ANDROID_KEY_PASSWORD. Keystore и пароли сохраните в надёжном месте: без них обновлять
приложение у пользователей нельзя.
Уже есть: VCPKG4ASPIA_TOKEN (секрет), при желании RELEASE_TOKEN, RELEASE_API_URL, VCPKG4ASPIA_URL.
5. Итоговый чек-лист и тестовый запуск
macOS:
- Xcode в
/Applications/Xcode.app, лицензия принята,xcode-select -pуказывает на него - Rosetta 2 (
arch -x86_64 /usr/bin/true) - brew-инструменты (1.3), universal CMake 4.4.4 первым в PATH (1.3a)
- act_runner v0.2.13,
config.yaml:timeout: 12h,labels: macos-arm64:host - зарегистрирован, LaunchAgent запущен, в Gitea статус Idle
- ≥ 150 ГБ свободно, сон отключён, автологин
Windows / Android:
- JDK 21,
ANDROID_JAVA_HOMEзадан, если путь неjdk-21.0.11.10-hotspot -
C:\Android\sdkсcmdline-tools\latest, platform-tools, platforms/build-tools,ndk\27.2.12479018, лицензии приняты -
C:\Qt\6.11.1\android_arm64_v8aиC:\Qt\6.11.1\mingw_64 - метки
windows:host+windows-android:host, служба перезапущена -
sh.exe -c 'command -v gzip'находит gzip
Тестовый запуск — по одной платформе, чтобы не ждать остальные (новый тег, например
v3.1.3-lota.4; release_type=draft, чтобы не публиковать):
curl -H "Authorization: token <TOKEN>" -H "Content-Type: application/json" -X POST \
https://git.byte-mate.ru/api/v1/repos/Coder/aspia/actions/workflows/release.yml/dispatches \
-d '{"ref":"domain-auth","inputs":{"tag":"v3.1.3-lota.4","release_type":"draft","replace":"false","build_linux":"false","build_windows":"false","build_macos":"true","build_android":"false","run_tests":"true","use_cache":"true"}}'
Затем то же с "build_android":"true" (и "build_macos":"false"), и отдельно с
"build_windows":"true" — проверить, что «Save vcpkg cache» на Windows теперь проходит. Через форму:
Actions → release → Run workflow, те же параметры. Черновики-релизы после проверки удалите
(Releases → Edit → Delete) или запускайте с replace=true на тот же тег.