140 lines
4.2 KiB
PowerShell
Executable File
140 lines
4.2 KiB
PowerShell
Executable File
#!/usr/bin/env pwsh
|
|
# Usage: upload-symbols.ps1 <platform> [source-root]
|
|
# Env: SENTRY_AUTH_TOKEN or BUGS_ADMIN_TOKEN (required unless BUGS_UPLOAD_DRY_RUN is set)
|
|
# SENTRY_URL or BUGS_URL (default https://bugs.plezy.app)
|
|
# Platforms: windows-x64 | windows-arm64
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Platform,
|
|
[string]$SourceRoot
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition
|
|
$Root = Split-Path -Parent $ScriptDir
|
|
Set-Location $Root
|
|
|
|
if ([string]::IsNullOrEmpty($SourceRoot)) {
|
|
$SearchRoot = $Root
|
|
}
|
|
elseif ([System.IO.Path]::IsPathRooted($SourceRoot)) {
|
|
$SearchRoot = $SourceRoot
|
|
}
|
|
else {
|
|
$SearchRoot = [System.IO.Path]::GetFullPath((Join-Path $Root $SourceRoot))
|
|
}
|
|
|
|
$BuildRoot = Join-Path $SearchRoot 'build'
|
|
$SymbolRoot = Join-Path (Join-Path $SearchRoot 'debug-info') $Platform
|
|
$DryRun = -not [string]::IsNullOrEmpty($env:BUGS_UPLOAD_DRY_RUN)
|
|
|
|
$SearchRoots = [System.Collections.Generic.List[string]]::new()
|
|
function Add-ExistingRoot([string]$Path) {
|
|
if (Test-Path -Path $Path -PathType Container) {
|
|
$SearchRoots.Add($Path)
|
|
}
|
|
}
|
|
|
|
Add-ExistingRoot $SymbolRoot
|
|
|
|
switch ($Platform) {
|
|
{ $_ -eq 'windows-x64' -or $_ -eq 'windows-arm64' } {
|
|
Add-ExistingRoot (Join-Path $BuildRoot 'windows')
|
|
}
|
|
default {
|
|
Write-Error "unknown platform: $Platform"
|
|
exit 2
|
|
}
|
|
}
|
|
|
|
function Has-SymbolFile {
|
|
foreach ($RootPath in $SearchRoots) {
|
|
$First = Get-ChildItem -Path $RootPath -File -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1
|
|
if ($null -ne $First) {
|
|
return $true
|
|
}
|
|
}
|
|
return $false
|
|
}
|
|
|
|
if (-not (Has-SymbolFile)) {
|
|
Write-Error "no symbols found for platform $Platform"
|
|
exit 3
|
|
}
|
|
|
|
if ([string]::IsNullOrEmpty($env:SENTRY_URL)) {
|
|
$env:SENTRY_URL = if ([string]::IsNullOrEmpty($env:BUGS_URL)) { 'https://bugs.plezy.app' } else { $env:BUGS_URL }
|
|
}
|
|
|
|
if ([string]::IsNullOrEmpty($env:SENTRY_RELEASE)) {
|
|
$env:SENTRY_RELEASE = "plezy@$(git rev-parse --short HEAD)"
|
|
}
|
|
|
|
if ([string]::IsNullOrEmpty($env:SENTRY_LOG_LEVEL)) {
|
|
$env:SENTRY_LOG_LEVEL = 'info'
|
|
}
|
|
|
|
if ([string]::IsNullOrEmpty($env:SENTRY_AUTH_TOKEN) -and -not [string]::IsNullOrEmpty($env:BUGS_ADMIN_TOKEN)) {
|
|
$env:SENTRY_AUTH_TOKEN = $env:BUGS_ADMIN_TOKEN
|
|
}
|
|
|
|
if (-not $DryRun -and [string]::IsNullOrEmpty($env:SENTRY_AUTH_TOKEN)) {
|
|
Write-Error 'SENTRY_AUTH_TOKEN or BUGS_ADMIN_TOKEN env var required'
|
|
exit 1
|
|
}
|
|
|
|
$DartSymbolMapPath = $env:SENTRY_DART_SYMBOL_MAP_PATH
|
|
if ([string]::IsNullOrEmpty($DartSymbolMapPath)) {
|
|
$Candidates = @(
|
|
(Join-Path $SymbolRoot 'obfuscation.map.json'),
|
|
(Join-Path (Join-Path $BuildRoot 'app\obfuscation') "$Platform.map.json"),
|
|
(Join-Path (Join-Path $BuildRoot 'app') 'obfuscation.map.json')
|
|
)
|
|
|
|
foreach ($Candidate in $Candidates) {
|
|
if (Test-Path -Path $Candidate -PathType Leaf) {
|
|
$DartSymbolMapPath = $Candidate
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
$PluginArgs = @(
|
|
"--sentry-define=release=$($env:SENTRY_RELEASE)",
|
|
"--sentry-define=url=$($env:SENTRY_URL)",
|
|
"--sentry-define=build_path=$BuildRoot"
|
|
)
|
|
|
|
if (-not [string]::IsNullOrEmpty($env:SENTRY_DIST)) {
|
|
$PluginArgs += "--sentry-define=dist=$($env:SENTRY_DIST)"
|
|
}
|
|
|
|
if (Test-Path -Path $SymbolRoot -PathType Container) {
|
|
$PluginArgs += "--sentry-define=symbols_path=$SymbolRoot"
|
|
}
|
|
|
|
if (-not [string]::IsNullOrEmpty($DartSymbolMapPath)) {
|
|
$PluginArgs += "--sentry-define=dart_symbol_map_path=$DartSymbolMapPath"
|
|
}
|
|
|
|
if ($DryRun) {
|
|
Write-Host "dry-run: would upload symbols for $Platform"
|
|
Write-Host "dry-run: release=$($env:SENTRY_RELEASE)"
|
|
Write-Host "dry-run: dist=$($env:SENTRY_DIST)"
|
|
Write-Host "dry-run: source_root=$SearchRoot"
|
|
Write-Host "dry-run: build_path=$BuildRoot"
|
|
Write-Host "dry-run: symbols_path=$SymbolRoot"
|
|
Write-Host "dry-run: dart_symbol_map_path=$DartSymbolMapPath"
|
|
foreach ($RootPath in $SearchRoots) {
|
|
Get-ChildItem -Path $RootPath -File -Recurse -ErrorAction SilentlyContinue | ForEach-Object { Write-Host $_.FullName }
|
|
}
|
|
exit 0
|
|
}
|
|
|
|
Write-Host "uploading symbols for $Platform release $($env:SENTRY_RELEASE) dist $($env:SENTRY_DIST)"
|
|
& dart run sentry_dart_plugin @PluginArgs
|
|
if ($LASTEXITCODE -ne 0) {
|
|
exit $LASTEXITCODE
|
|
}
|