[
    {
        "UpdateStageName": "App Download",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"cd bun-app-runner && rm -rf srv >/dev/null 2>&1; DownloadSource=\\\"{{DownloadSource}}\\\"; DownloadBranch=\\\"{{DownloadBranch}}\\\"; [[ -n \\\"{{DownloadUsername}}\\\" ]] && DownloadUrl=\\\"${DownloadSource/https:\\/\\//https:\\/\\/{{DownloadUsername}}:{{DownloadPassword}}@}\\\" || DownloadUrl=\\\"$DownloadSource\\\"; [ ! -d app/.git ] && { echo \\\"Installing the app\\\" && git clone \\\"$DownloadUrl\\\" srv >/dev/null && \\cp -r srv/. app/ >/dev/null 2>&1 && rm -rf srv >/dev/null 2>&1 && cd app && [ -z \\\"$DownloadBranch\\\" ] && DownloadBranch=$(git symbolic-ref refs/remotes/origin/HEAD | sed \\\"s|.*/||\\\"); git checkout $DownloadBranch --force >/dev/null && git pull >/dev/null && echo \\\"App installed\\\"; } || { echo \\\"Updating the app\\\" && cd app && git remote set-url origin \\\"$DownloadUrl\\\" >/dev/null && [ -z \\\"$DownloadBranch\\\" ] && DownloadBranch=$(git symbolic-ref refs/remotes/origin/HEAD | sed \\\"s|.*/||\\\"); git checkout $DownloadBranch --force >/dev/null && git pull >/dev/null && echo \\\"App updated\\\"; }\"",
        "UpdateSourceConditionSetting": "DownloadType",
        "UpdateSourceConditionValue": "GitRepo",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "App Download",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"$ProgressPreference='SilentlyContinue'; cd bun-app-runner; Remove-Item srv -Recurse -Force -ErrorAction SilentlyContinue | Out-Null; $DownloadSource = \\\"{{DownloadSource}}\\\"; $DownloadBranch = \\\"{{DownloadBranch}}\\\"; if (![string]::IsNullOrEmpty(\\\"{{DownloadUsername}}\\\")) { $DownloadUrl = $DownloadSource -replace \\\"https://\\\", \\\"https://{{DownloadUsername}}:{{DownloadPassword}}@\\\" } else { $DownloadUrl = \\\"$DownloadSource\\\" }; if (-Not (Test-Path app/.git)) { Write-Output \\\"Installing the app\\\"; git clone \\\"$DownloadUrl\\\" srv 1> $null; Copy-Item srv/* app/ -Recurse -Force -ErrorAction SilentlyContinue | Out-Null; Remove-Item srv -Recurse -Force -ErrorAction SilentlyContinue | Out-Null; cd app; if ([string]::IsNullOrEmpty($DownloadBranch)) { $DownloadBranch = (git symbolic-ref refs/remotes/origin/HEAD) -replace '.*/' }; git checkout --force $DownloadBranch 1> $null; if ($LASTEXITCODE -eq 0) { git pull 1> $null }; if ($LASTEXITCODE -eq 0) { Write-Output \\\"App installed\\\" } } else { Write-Output \\\"Updating the app\\\"; cd app; git remote set-url origin \\\"$DownloadUrl\\\" 1> $null; if ([string]::IsNullOrEmpty($DownloadBranch)) { $DownloadBranch = (git symbolic-ref refs/remotes/origin/HEAD) -replace '.*/' }; git checkout --force $DownloadBranch 1> $null; if ($LASTEXITCODE -eq 0) { git pull 1> $null }; if ($LASTEXITCODE -eq 0) { Write-Output \\\"App updated\\\" } }\"",
        "UpdateSourceConditionSetting": "DownloadType",
        "UpdateSourceConditionValue": "GitRepo",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "App Download",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "GithubRelease",
        "UpdateSourceArgs": "{{DownloadSource}}",
        "UpdateSourceData": "{{DownloadFilename}}",
        "UpdateSourceVersion": "{{DownloadVersion}}",
        "UpdateSourceTarget": "{{$FullBaseDir}}",
        "UnzipUpdateSource": true,
        "OverwriteExistingFiles": true,
        "DeleteAfterExtract": true,
        "UpdateSourceConditionSetting": "DownloadType",
        "UpdateSourceConditionValue": "GithubRelease"
    },
    {
        "UpdateStageName": "App Download",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "FetchURL",
        "UpdateSourceData": "{{DownloadSource}}",
        "UpdateSourceTarget": "{{$FullBaseDir}}",
        "UnzipUpdateSource": true,
        "OverwriteExistingFiles": true,
        "DeleteAfterExtract": true,
        "UpdateSourceConditionSetting": "DownloadType",
        "UpdateSourceConditionValue": "DownloadURL"
    },
    {
        "UpdateStageName": "Create Bun Directory",
        "UpdateSourcePlatform": "All",
        "UpdateSource": "CreateDirectory",
        "UpdateSourceArgs": "{{$FullRootDir}}bun/bin"
    },
    {
        "UpdateStageName": "Bun Download",
        "UpdateSourcePlatform": "Linux",
        "UpdateSourceArch": "x86_64",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"export BUN_INSTALL=\\\"{{$FullRootDir}}bun\\\"; export PATH=\\\"{{$FullRootDir}}bun/bin:$PATH\\\"; BunVersion=\\\"{{BunVersion}}\\\"; cd bun-app-runner && if command -v bun/bin/bun >/dev/null 2>&1; then InstalledVersion=$(bun/bin/bun --version); else InstalledVersion=\\\"\\\"; fi; if [[ -z \\\"$BunVersion\\\" && -n \\\"$InstalledVersion\\\" ]] then bun/bin/bun upgrade && exit 0; elif [[ -z \\\"$BunVersion\\\" ]]; then BunVersion=$(wget -qO- https://api.github.com/repos/oven-sh/bun/releases/latest | jq -r .tag_name | sed \\\"s/^bun-//\\\"); fi; if [[ ! \\\"$BunVersion\\\" =~ ^v[0-9]+\\.[0-9]+\\.[0-9]+$ ]]; then echo \\\"Invalid Bun version format specified\\\" && exit 1; fi; BunVersionStripped=\\\"${BunVersion#v}\\\"; if [[ \\\"$InstalledVersion\\\" == \\\"$BunVersionStripped\\\" ]]; then echo \\\"Bun $BunVersion already installed. Skipping\\\" && exit 0; fi; Target=\\\"linux-x64\\\"; if [[ $(cat /proc/cpuinfo | grep avx2) = \\\"\\\" ]]; then Target=\\\"$Target-baseline\\\"; fi; wget -qO bun.zip https://github.com/oven-sh/bun/releases/download/bun-$BunVersion/bun-$Target.zip && unzip -oqd bun/bin bun.zip >/dev/null 2>&1 && mv bun/bin/bun-$Target/bun bun/bin/bun && chmod +x bun/bin/bun && rm -rf bun/bin/bun-$Target bun.zip && IS_BUN_AUTO_UPDATE=true bun/bin/bun completions &>/dev/null || : && echo \\\"Bun $BunVersion installed\\\"\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Bun Download",
        "UpdateSourcePlatform": "Linux",
        "UpdateSourceArch": "aarch64",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"export BUN_INSTALL=\\\"{{$FullRootDir}}bun\\\"; export PATH=\\\"{{$FullRootDir}}bun/bin:$PATH\\\"; BunVersion=\\\"{{BunVersion}}\\\"; cd bun-app-runner && if command -v bun/bin/bun >/dev/null 2>&1; then InstalledVersion=$(bun/bin/bun --version); else InstalledVersion=\\\"\\\"; fi; if [[ -z \\\"$BunVersion\\\" && -n \\\"$InstalledVersion\\\" ]] then bun/bin/bun upgrade && exit 0; elif [[ -z \\\"$BunVersion\\\" ]]; then BunVersion=$(wget -qO- https://api.github.com/repos/oven-sh/bun/releases/latest | jq -r .tag_name | sed \\\"s/^bun-//\\\"); fi; if [[ ! \\\"$BunVersion\\\" =~ ^v[0-9]+\\.[0-9]+\\.[0-9]+$ ]]; then echo \\\"Invalid Bun version format specified\\\" && exit 1; fi; BunVersionStripped=\\\"${BunVersion#v}\\\"; if [[ \\\"$InstalledVersion\\\" == \\\"$BunVersionStripped\\\" ]]; then echo \\\"Bun $BunVersion already installed. Skipping\\\" && exit 0; fi; Target=\\\"linux-aarch64\\\"; if [[ $(cat /proc/cpuinfo | grep avx2) = \\\"\\\" ]]; then Target=\\\"$Target-baseline\\\"; fi; wget -qO bun.zip https://github.com/oven-sh/bun/releases/download/bun-$BunVersion/bun-$Target.zip && unzip -oqd bun/bin bun.zip >/dev/null 2>&1 && mv bun/bin/bun-$Target/bun bun/bin/bun && chmod +x bun/bin/bun && rm -rf bun/bin/bun-$Target bun.zip && IS_BUN_AUTO_UPDATE=true bun/bin/bun completions >/dev/null 2>&1 || : && echo \\\"Bun $BunVersion installed\\\"\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Bun Download",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"$env:PATH = \\\"{{$FullRootDir}}bun\\bin;\\\" + $env:PATH; $ProgressPreference='SilentlyContinue'; [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $BunVersion='{{BunVersion}}'; Set-Location -Path 'bun-app-runner'; if (Test-Path 'bun/bin/bun.exe') { $InstalledVersion = & bun/bin/bun.exe --version } else { $InstalledVersion = '' }; if ([string]::IsNullOrWhiteSpace($BunVersion) -and -not [string]::IsNullOrWhiteSpace($InstalledVersion)) { & bun/bin/bun.exe upgrade; exit 0 } elseif ([string]::IsNullOrWhiteSpace($BunVersion)) { $BunVersion=((Invoke-RestMethod -UseBasicParsing -Uri \\\"https://api.github.com/repos/oven-sh/bun/releases/latest\\\").tag_name -replace '^bun-', '') }; if ($BunVersion -notmatch '^v\\d+\\.\\d+\\.\\d+$') { Write-Output \\\"Invalid Bun version format specified\\\"; exit 1 }; $BunVersionStripped = $BunVersion -replace '^v', ''; if ( $InstalledVersion -eq $BunVersionStripped ) { Write-Output \\\"Bun $BunVersion already installed. Skipping\\\"; exit 0 }; $Target='windows-x64'; if (!(Add-Type -MemberDefinition '[DllImport(\\\"kernel32.dll\\\")] public static extern bool IsProcessorFeaturePresent(int ProcessorFeature);' -Name 'Kernel32' -Namespace 'Win32' -PassThru)::IsProcessorFeaturePresent(40)) { $Target='windows-x64-baseline' }; Invoke-WebRequest -UseBasicParsing -Uri https://github.com/oven-sh/bun/releases/download/bun-$BunVersion/bun-$Target.zip -OutFile 'bun.zip'; if ($?) { Expand-Archive -Path \\\"bun.zip\\\" -DestinationPath \\\"bun\\bin\\\" -Force *> $null; Move-Item \\\"bun\\bin\\bun-$Target\\bun.exe\\\" \\\"bun\\bin\\bun.exe\\\" -Force *> $null; Remove-Item \\\"bun\\bin\\bun-$Target\\\" -Recurse -Force; Remove-Item \\\"bun.zip\\\" -Force; & bun/bin/bun.exe completions *> $null; Write-Output \\\"Bun $BunVersion installed\\\" }\"",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Install Bun Packages",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"cd bun-app-runner/app/{{ApplicationLocation}} && export BUN_INSTALL=\\\"{{$FullRootDir}}bun\\\"; export PATH=\\\"{{$FullRootDir}}bun/bin:$PATH\\\" && bun install {{BunInstallArgs}}\"",
        "UpdateSourceConditionSetting": "BunInstallType",
        "UpdateSourceConditionValue": "install",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Install Bun Packages",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"Set-Location -Path 'bun-app-runner/app/{{ApplicationLocation}}'; $env:PATH = \\\"{{$FullRootDir}}bun\\bin;\\\" + $env:PATH; & bun install {{BunInstallArgs}}\"",
        "UpdateSourceConditionSetting": "BunInstallType",
        "UpdateSourceConditionValue": "install",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Install Bun Packages",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"cd bun-app-runner/app/{{ApplicationLocation}} && export BUN_INSTALL=\\\"{{$FullRootDir}}bun\\\"; export PATH=\\\"{{$FullRootDir}}bun/bin:$PATH\\\" && bun add {{BunPackages}} {{BunInstallArgs}}\"",
        "UpdateSourceConditionSetting": "BunInstallType",
        "UpdateSourceConditionValue": "specify",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Install Bun Packages",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "powershell.exe",
        "UpdateSourceArgs": "-NoProfile -Command \"Set-Location -Path 'bun-app-runner/app/{{ApplicationLocation}}'; $env:PATH = \\\"{{$FullRootDir}}bun\\bin;\\\" + $env:PATH; & bun add {{BunPackages}} {{BunInstallArgs}}\"",
        "UpdateSourceConditionSetting": "BunInstallType",
        "UpdateSourceConditionValue": "specify",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Run App Setup Command",
        "UpdateSourcePlatform": "Linux",
        "UpdateSource": "Executable",
        "UpdateSourceData": "/bin/bash",
        "UpdateSourceArgs": "-c \"cd bun-app-runner/app/{{ApplicationLocation}} && export BUN_INSTALL=\\\"{{$FullRootDir}}bun\\\"; export PATH=\\\"{{$FullRootDir}}bun/bin:$PATH\\\" && {{AppSetupCommands}}\"",
        "UpdateSourceConditionSetting": "RunAppSetupCommands",
        "UpdateSourceConditionValue": "true",
        "SkipOnFailure": false
    },
    {
        "UpdateStageName": "Run App Setup Command",
        "UpdateSourcePlatform": "Windows",
        "UpdateSource": "Executable",
        "UpdateSourceData": "cmd.exe",
        "UpdateSourceArgs": "/C cd bun-app-runner\\app\\{{ApplicationLocation}} && set \"PATH={{$FullRootDir}}bun\\bin;%PATH%\" && {{AppSetupCommands}}",
        "UpdateSourceConditionSetting": "RunAppSetupCommands",
        "UpdateSourceConditionValue": "true",
        "SkipOnFailure": false
    }
]