Files
rdp-proxy/scripts/android/release-android-apk.ps1
m 20d361a886
build / backend (push) Has been cancelled
build / node-agent (push) Has been cancelled
build / worker (push) Has been cancelled
рабочий вариант, но скороть 10 МБит
2026-05-22 21:46:49 +03:00

138 lines
5.9 KiB
PowerShell

#requires -Version 5
param(
[string]$RepoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).ProviderPath,
[string]$BuildType = "release",
[string]$AndroidHome = $env:ANDROID_HOME,
[switch]$InstallMissing,
[switch]$SkipPrepare,
[switch]$SkipWorkspaceCleanup,
[switch]$PrintOnly,
[bool]$PublishToTestDockerDownloads = $true,
[switch]$NoRemotePublish,
[string]$TestDockerSshAlias = "test-docker",
[string]$TestDockerDownloadPath = "/tmp/rap-web-admin/html/downloads",
[string]$TestDockerBackendReleasePath = "/tmp/rap-release-0.2.309-latencyaware",
[int]$PreparationRetryDelaySeconds = 0,
[string]$PortalVerifyBaseUrl = "http://192.168.200.61:18080",
[switch]$SkipPortalVerify
)
$ErrorActionPreference = "Stop"
function Fail([string]$message) {
Write-Error $message
exit 1
}
function Run-Step([string]$name, [scriptblock]$action) {
Write-Host "=== $name ==="
$global:LASTEXITCODE = 0
try {
& $action
} catch {
Fail "$name failed: $($_.Exception.Message)"
}
if (-not $?) {
Fail "$name failed with script error"
}
if ($LASTEXITCODE -ne 0) {
Fail "$name failed with exit code $LASTEXITCODE"
}
}
$scriptDir = Split-Path -Parent (Resolve-Path $PSCommandPath).ProviderPath
$prepareScript = Join-Path $scriptDir "prepare-android-build-environment.ps1"
$buildScript = Join-Path $scriptDir "build-android-apk.ps1"
$buildTypeNormalized = $BuildType.Trim().ToLower()
if ($buildTypeNormalized -notin @("debug","release")) {
Fail "BuildType должен быть debug или release"
}
if (($NoRemotePublish -or -not $PublishToTestDockerDownloads) -and $buildTypeNormalized -eq "release") {
Fail "Для Release сборки в этом сценарии требуется публикация в test-docker. Убери -NoRemotePublish и явно не отключай -PublishToTestDockerDownloads."
}
if (-not (Test-Path $prepareScript)) {
Fail "Не найден скрипт подготовки окружения: $prepareScript"
}
if (-not (Test-Path $buildScript)) {
Fail "Не найден скрипт сборки: $buildScript"
}
if (-not $SkipPrepare) {
Run-Step "Подготовка Android окружения" {
& $prepareScript -RepoRoot $RepoRoot -AndroidHome $AndroidHome -SetEnvironment -InstallMissing:$InstallMissing
}
if ($PreparationRetryDelaySeconds -gt 0) {
Start-Sleep -Seconds $PreparationRetryDelaySeconds
}
} else {
Write-Host "Подготовка окружения пропущена (-SkipPrepare)."
}
if ($PrintOnly) {
if ($PublishToTestDockerDownloads -and -not $NoRemotePublish) {
& $buildScript -RepoRoot $RepoRoot -BuildType $BuildType -AndroidHome $AndroidHome -PrintOnly `
-SkipWorkspaceCleanup:$SkipWorkspaceCleanup `
-PublishToTestDockerDownloads:$true `
-TestDockerSshAlias $TestDockerSshAlias `
-TestDockerDownloadPath $TestDockerDownloadPath `
-TestDockerBackendReleasePath $TestDockerBackendReleasePath
} else {
& $buildScript -RepoRoot $RepoRoot -BuildType $BuildType -AndroidHome $AndroidHome -PrintOnly `
-SkipWorkspaceCleanup:$SkipWorkspaceCleanup
}
exit 0
}
Run-Step "Сборка и публикация Android APK" {
if ($PublishToTestDockerDownloads -and -not $NoRemotePublish) {
& $buildScript -RepoRoot $RepoRoot -BuildType $BuildType -AndroidHome $AndroidHome -SkipWorkspaceCleanup:$SkipWorkspaceCleanup `
-PublishToTestDockerDownloads:$true `
-TestDockerSshAlias $TestDockerSshAlias `
-TestDockerDownloadPath $TestDockerDownloadPath `
-TestDockerBackendReleasePath $TestDockerBackendReleasePath
} else {
& $buildScript -RepoRoot $RepoRoot -BuildType $BuildType -AndroidHome $AndroidHome -SkipWorkspaceCleanup:$SkipWorkspaceCleanup
}
}
if ($SkipPortalVerify) {
Write-Host "Сборка выполнена. Проверка публикации пропущена (-SkipPortalVerify)."
exit 0
}
Run-Step "Проверка манифеста веб-панели" {
$manifestPath = Join-Path $RepoRoot "web-admin\deploy\html\downloads\rap-android-vpn-build.json"
if (-not (Test-Path $manifestPath)) {
Fail "Локальный манифест не найден: $manifestPath"
}
$manifest = Get-Content $manifestPath -Raw | ConvertFrom-Json
if (-not $manifest.version -or -not $manifest.version.name) {
Fail "Манифест не содержит version.name: $manifestPath"
}
Write-Host "Локальный манифест APK версии: $($manifest.version.name) ($($manifest.version.code))"
Write-Host "Path: $($manifest.published.path)"
Write-Host "Sha256: $($manifest.published.sha256)"
if (-not [string]::IsNullOrWhiteSpace($PortalVerifyBaseUrl)) {
$manifestUrl = "$PortalVerifyBaseUrl/api/v1/downloads/rap-android-vpn-build.json?_cb=$(Get-Date -Format 'yyyyMMddHHmmss')"
try {
$remoteManifest = Invoke-RestMethod -Uri $manifestUrl -Method Get
if (-not $remoteManifest.version -or -not $remoteManifest.version.name -or $remoteManifest.version.name -ne $manifest.version.name) {
Fail "Версия после деплоя не совпадает: локально=$($manifest.version.name), remote=$($remoteManifest.version.name)"
}
Write-Host "Подтверждено: portal returns version $($remoteManifest.version.name)"
} catch {
Write-Host "WARN: не удалось прочитать удаленный манифест из $manifestUrl"
Write-Host " Проверьте доступность веб-панели и путь/порт вручную."
}
}
}
Write-Host "Готово: релиз собран, опубликован и проверен."