mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2026-01-01 06:00:46 +00:00
We can aid non-windows users by adding chmod +x flag to appropriate executables directly in the zip file
310 lines
14 KiB
YAML
310 lines
14 KiB
YAML
version: '{build}-{branch}'
|
|
pull_requests:
|
|
do_not_increment_build_number: true
|
|
skip_branch_with_pr: true
|
|
image: Visual Studio 2019
|
|
configuration: Release
|
|
clone_depth: 10
|
|
environment:
|
|
ASF_PRIVATE_SNK:
|
|
secure: ZsW32YzXj93ectSLDlAVGfxDr0FssqWbf2IF+L2TU+eVUJmyomAzolpA0zN672yN+YAfqag/PMpSVilB/uu7LfjgQIBLht0rweqqHxBXpd7sJEswnGHozukG/KkW9NygRJbPk1yUGymoQJe5YBb7mwefscp4hW+PB+LuwAi/iNeoWhRfZkouCES3Ms9rDdLexZDoNnHy2Pzqs8iFhF2Ujp0Yww39soSFLR/iteXIrLaWkoeU2hp7mWr6RDZnUGSNDCnSq9bt4QwNMFpzTzlXh84qjLvZ+VKTEioKhd/u/Ov58r/GZ162YLdz7X93iSptIJTHPU6DJ7ofQmnD0HKUYpZlC+rUaZJcX3eMa42EBS0AyD7/+tZq6HsCrqtMBXHjFexQAoSXDv75zBK21+1lrZc/Q8WoLjpYWqqFmKEcQ6n/hRctCDA5wYkaSb0Z69uMYuVGxA0ui7bQWOOU6ePfgzkoBshzuR5FtChCxxdNxk3mr+yXKHvnHYLf03ctPUXKLuKjMX6eFPw20P+kM64ukFDtl6WNzLnRhEm3tOckEAI84Yy312IwMqvbjtLv3ZLVAMeUCjSfW/siRTrwx8LcsZnkxK7h5EJv6pO+rQD+fjWo0PE76cekqFJD3wamDkbjNFSnbq3yic+V2pq6Mo8+iTLQDKEAXtGEVcuROaRgFRPEXx4IZ9yD53/gcHwXDh5wT0bdCwgUXzWRHw9HeeGAzYZinqqWZyqsmeZgYp9z/Py4gv4w7u4bE4RXazUJmaxdhI4mkizYPzXzkqMYp7Pp6d3kSz+tLiotJ5fl4b8Y+QbvJ4sxGEZRi4ehb5cL0+ujxUDFQIkYr+88Wjdrl+VYo9u3aW1wHFOJzomnm2yDkChAu0xm+D2ABquMJftYsRJ+sbu/3hcGfIe9jYY68M39l/YMrTXS4bdET3EfkVRtGOqpqSRbrFrGfcHle3n2s+dhqtNLNGyJgIhQv569rla22vMXaC9MXmoxkuWOKuxI465Ju2mamXlkfu1AoxS4dmneJ5UBp3eklHgdyGwRYClXHSGORaAXXiWbD7EdLobufZxWUC30Rqmns08252cVcj3wlLUff35t/rBbG3gJYJOrPRjlMNxzTI2iG+45hAmTSZKTG7Lx4zWPA9F3/RV/VGzMhTvkMKolyk05FJwSd+xJliShowCfwkLGO5w+Ku8vOJZNhixrfN8/jkHBh6c1uvUQWpWsMywj3+f5PD9A1dzuYXfOqXx/+92VvEoRPt9+9SJY+FK6IkH9m2HMuvxudQ78cUUG/lNAwQZR9vy3ahN6H1LRnfDsPmGvCUtXtUNe+yPeNc4cLlKciRcHuMRbknX5oTOBvbqvUlY3wmF7iDpNE+7y8dJqNCU/vKa0P/YRt3q6wbgOGQEovwDVg92eIIN0Vuh5qTm1B5BBD2Xhir/cZLzi7BbuaXjcsTFS3ErP5MGKIVCl1XNStAbFbErpkNw+dpXgKuRHgQIID0QjBJ4OBaI/pSSSuhffMo7QupUyblyVTuuQPltQ+Z8gA6Mf0TNyzjay4gK/BHArsqkNIisSU5Hz3SXneN+PW4eKGhbdYWmuUqBpkl0Im7R9bQevas2nFFDfEu0gvEcdMBYsq9KO8utwvjOAQLJby/3hXVs59qVwesddh6Rs4sa1OdjxiSrCQdyrmUIiLHTE6N+Cy7PUay6Wa3fLSqta32oxTFgGYWKH95s878OlLaiMhEwYJnG2iiKrml2yqESGnn3vdTOTTUm63Qw3IQ+HTb9FK7+BA1hCi7lEZ2BDwk+fQxT+heQQISrUcXLXJjIVzLFXwsCyjUZtacFwezwEKKw075j1QOfOMh7eHvyqkmhje2zubhqX9dkgwUBLB/EE55vTLxc1GAhWh3NrgeaGnr9X1yFkKP9lR0yzT86qGjarEmBD0WsdITAubqQEzjLkMaKXdmI7pFcnHUPoWtq7LCnEVjvWEVWVxbNMgmdebVnq/kAT2IrE8jtaygDMpuH7SkCqxTSutw+Y+diC+UK99QkAA2mgqCsOggYalrKzCJp4bnK2Yie97ujKZ3K3oZfOlzx9Vogj7WzTOALrJ62A2EyH64LcVr6XBnzfJTxXMFZf2ZQ7g21y32S+wsUgdGSqa+s/JCwpg3OEtsBBYLgKIevqoADqGA05uYgGKQNly/zo21LBy0N+XFn/b5sgG5DG6Iyu9iuo8V+m8AZwE0AOV5QnA5N+LTkRuDJKx6jx0YgNtVTWx+6jXZEHE8fcy/ax2I//et2aG+R91uiwgjh+9JSqVvglKdpO1P5C7JQ6Ff9HnXcMQlHiq3qMAFPBaB2IIEcDkPhLSvoTFMb+FA9pC9i+EgfbT17QSwWIEQpiV7CgqmyMiz8qKCwoUAjr467v1pZ1c/fmSRiYxuCO6FT6VfON9/8j3vYqfwwjDUZ2/2I1wrzS0fLyCcxCXAM6eTsv4Z4YqBkuwNK2k5J5PWN2jJphWfO29CYGfW+iyLxHtYoLnHAn6/4jXz+2PE2XUJgY0EFshDYBMn0/0UUyXvnnh/z4wTqA/36lC/kuIQ2ikCiMYQZ0/WjBI5+nKD4nJ+vuQNUbXlcx+cz7mV5uPVhPSRZnI2gfFDekomb4OtCqUpEiU/UW2RNM6FZ3x2cHS6GdZ3dBEYxugWLVZ/f+eGOGjEbRdaMSqpCjEitAvOl3c6i9W2fGBnjwDt37vYlhtDzfT9neXvZFgmeDqgweGDCOwIJyYw7y7I5Azcwetw8gSfqfX+9oW0uwWcUoDLaKzaXdbX/6ctQIkLV4ge1u5y2rii+pbjGsgsq4M7P+Ig8DerLoaWu1lxhRJrALuiiSmiieA+dl5UlJPYJIe1kl2Z8TOavmyI/2JRd95bQwmx6+fD2JTlJGn4IYf3z1dTwO+ZGi7/RR8UWtg/KMhbpHBVcq3G5XY2HUlhfRRtVPwG/T9nwmoWdjMYAW72DAlcXTknqlsf7zutRpHcdnURlMO/Hg/WknK1fNe7XTMnWqmebn8Qj5WrIj2DdKLBuGFwIGuOhwFVpMoRwd9TfDCT1vdgrAX9usNrYF6jhN+Y7EZuVUBSNAT4VZJpsqWFplMLiMOo89OsL5fEdfmnNVeMFy+iYsGbzDkQQnJuzwwfPOpf9TgcPeEI7FXOE5AWjfNkd9wCa59zpLJmgXPTWySDPg72p1yOwHs9g9ZFHR65kPCoIIIWHQyhbZn6+WYDRspLVELWFaWwuUSviWDdFkjbEaquOW7LlE0GhVeFwLXhbwsV6O63xBfLsNsdPBRu5eBttjKFTCEV6gmZM3mBf69bqgwbLzWNrJjkRuFiHmPlb+xwMVRurfquoRw3oivXGGenTHSgkdiussosDX0sxE2Xv3dvDBRmNjqFG97Ep5gKFHoKA9PMg/G6rPadHCw4roeGjaKsdMd3bZr9XMf4jO84E1oU8V4fHXFZ8VQnd0dbpJCPJplbcKynV0fLFNcHPI+cWgvX9fr7cdW4Moeq995TMtu9xW2PhAtJxkgRfiJ4q8+mSCiRhHBtgXRuCvP2W75TH371VFdQEuesGeuHfhEB9zLgcS4Ep1Co2XAO2MONsb/ginmAgSlOVlBp/VGgdTVEw9leXTvJmQlPwKv0vrykgQrQcd+87ACj9Be02J/Sce8A/tIr9GxEpcheh7WG+KGQ4y+nf6CKwQaINbk7wl2yPNF0XcDtEhh5RmN1+joQGE/mLH4RKPH3knV0b7XvhBH+JI/bstxQzZ2VyuTUl/mZLFsSwPDO2WyEArTZW1r70g2tx6w6zwzQ5n7vND7av1Evqn8r9nnerWG3MvNMtZxkCfAJXrupl64g4/QoYBDrD8NYmzGxq2jgKqXMV59N1ROpfiFgo268H5d0zobGeSIT83d4KDAGfUCcaT21m1wKDso2phU1Qi/2TYxBWUiaGD1zOF9+yC80SYDwMs3Me1s5sStvqUWdlsYXrLqMgyEKcoOOD4i1wosAmeUUtqLL3nKIhsxYlq0k7UQi4FPJpFI5Ax6oTBZ6dDRqMM/CdlMvrKQEp2sX53wE6yEXucqXUjH1rVlGoBAXF8eL/yqf2kNQ8HL902F6FqWmwR3VHJmtzGUHHoiKgVHeN3nXxtBxMLvKgGbcACSErp6K4DZLlnHF3HzeHxGhSyRbRmDgU=
|
|
DOTNET_CHANNEL: 5.0
|
|
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
|
DOTNET_INSTALL_DIR: C:\Program Files\dotnet
|
|
DOTNET_NOLOGO: true
|
|
# DOTNET_SDK: 5.0.103
|
|
NET_CORE_VERSION: net5.0
|
|
NET_FRAMEWORK_VERSION: net48
|
|
NODE_JS_VERSION: lts
|
|
STEAM_TOKEN_DUMPER_NAME: ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
|
STEAM_TOKEN_DUMPER_TOKEN:
|
|
secure: uttQUE9ZK7BIa9SIbDkpUTMx7Slnl3zAPkRNzE465YgwxLdLEwv6yYR5QXCSZolb5Qq23Z/LmZNGd3M6B0+hbx3waWOeW2AiWvfCcnUmuT+3wfLJsgLbf1g4agFS7zsDgeRPfnNMzOxD8etelnA5YOOUMNB3RLw3fIdznNd+Fs6R0Ou3/1UavDuHKkbh1+A5
|
|
VARIANTS: generic generic-netf linux-arm linux-arm64 linux-x64 osx-x64 win-x64 # NOTE: When modifying variants, don't forget to update ASF_VARIANT definitions in SharedInfo.cs!
|
|
matrix:
|
|
allow_failures:
|
|
- image: Visual Studio 2019 Preview
|
|
fast_finish: true
|
|
install:
|
|
- pwsh: >-
|
|
Set-StrictMode -Version Latest
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
|
|
git submodule sync --recursive
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
git submodule update --init --recursive
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
if ($env:DOTNET_CHANNEL) {
|
|
dotnet --info
|
|
|
|
try {
|
|
&([scriptblock]::Create((Invoke-WebRequest 'https://dot.net/v1/dotnet-install.ps1'))) -Channel "$env:DOTNET_CHANNEL" -InstallDir "$env:DOTNET_INSTALL_DIR" -NoPath
|
|
} catch [System.Net.WebException],[System.IO.IOException] {
|
|
# Not fatal for the remaining part of the script
|
|
Write-Host $_
|
|
}
|
|
}
|
|
|
|
|
|
if ($env:DOTNET_SDK) {
|
|
dotnet --info
|
|
|
|
try {
|
|
&([scriptblock]::Create((Invoke-WebRequest 'https://dot.net/v1/dotnet-install.ps1'))) -Channel 'Current' -Version "$env:DOTNET_SDK" -InstallDir "$env:DOTNET_INSTALL_DIR" -NoPath
|
|
} catch [System.Net.WebException],[System.IO.IOException] {
|
|
# Not fatal for the remaining part of the script
|
|
Write-Host $_
|
|
}
|
|
}
|
|
- ps: Install-Product node "$env:NODE_JS_VERSION"
|
|
before_build:
|
|
- pwsh: >-
|
|
Set-StrictMode -Version Latest
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
|
|
dotnet --info
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
node -v
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
npm -v
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
build_script:
|
|
- pwsh: >-
|
|
Set-StrictMode -Version Latest
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
|
|
npm ci --no-progress --prefix ASF-ui
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
npm run-script deploy --no-progress --prefix ASF-ui
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
dotnet build -c "$env:CONFIGURATION" -p:ContinuousIntegrationBuild=true -p:UseAppHost=false --nologo
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
test_script:
|
|
- pwsh: >-
|
|
Set-StrictMode -Version Latest
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
|
|
dotnet test ArchiSteamFarm.Tests -c "$env:CONFIGURATION" -p:ContinuousIntegrationBuild=true -p:UseAppHost=false --nologo
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
after_test:
|
|
- pwsh: >-
|
|
Set-StrictMode -Version Latest
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
|
|
if ((Test-Path env:ASF_PRIVATE_SNK) -and ($env:ASF_PRIVATE_SNK)) {
|
|
echo "$env:ASF_PRIVATE_SNK" > "resources\ArchiSteamFarm.snk"
|
|
|
|
certutil -f -decode "resources\ArchiSteamFarm.snk" "resources\ArchiSteamFarm.snk"
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
}
|
|
|
|
|
|
if ((Test-Path env:STEAM_TOKEN_DUMPER_TOKEN) -and ($env:STEAM_TOKEN_DUMPER_TOKEN) -and (Test-Path "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs" -PathType Leaf)) {
|
|
(Get-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs").Replace('STEAM_TOKEN_DUMPER_TOKEN', "$env:STEAM_TOKEN_DUMPER_TOKEN") | Set-Content "$env:STEAM_TOKEN_DUMPER_NAME\SharedInfo.cs"
|
|
}
|
|
|
|
|
|
dotnet publish "$env:STEAM_TOKEN_DUMPER_NAME" -c "$env:CONFIGURATION" -f "$env:NET_CORE_VERSION" -o "out/$env:STEAM_TOKEN_DUMPER_NAME/$env:NET_CORE_VERSION" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
dotnet publish "$env:STEAM_TOKEN_DUMPER_NAME" -c "$env:CONFIGURATION" -f "$env:NET_FRAMEWORK_VERSION" -o "out/$env:STEAM_TOKEN_DUMPER_NAME/$env:NET_FRAMEWORK_VERSION" -p:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
dotnet restore ArchiSteamFarm -p:ContinuousIntegrationBuild=true --nologo
|
|
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
|
|
$PublishBlock = {
|
|
param($variant)
|
|
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
Set-Location "$env:APPVEYOR_BUILD_FOLDER"
|
|
|
|
if ($variant -like '*-netf') {
|
|
$targetFramework = $env:NET_FRAMEWORK_VERSION
|
|
} else {
|
|
$targetFramework = $env:NET_CORE_VERSION
|
|
}
|
|
|
|
if ($variant -like 'generic*') {
|
|
$variantArgs = '-p:TargetLatestRuntimePatch=false', '-p:UseAppHost=false'
|
|
} else {
|
|
$variantArgs = '-p:PublishSingleFile=true', '-p:PublishTrimmed=true', '-r', "$variant"
|
|
}
|
|
|
|
dotnet publish ArchiSteamFarm -c "$env:CONFIGURATION" -f "$targetFramework" -o "out\$variant" "-p:ASFVariant=$variant" -p:ContinuousIntegrationBuild=true --no-restore --nologo $variantArgs
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
# If we're including any overlay for this variant, copy it to output directory
|
|
if (Test-Path "ArchiSteamFarm\overlay\$variant" -PathType Container) {
|
|
Copy-Item "ArchiSteamFarm\overlay\$variant\*" "out\$variant" -Recurse
|
|
}
|
|
|
|
# If we're including SteamTokenDumper plugin for this framework, copy it to output directory
|
|
if (Test-Path "out\$env:STEAM_TOKEN_DUMPER_NAME\$targetFramework" -PathType Container) {
|
|
if (!(Test-Path "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" -PathType Container)) {
|
|
New-Item -ItemType Directory -Path "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" > $null
|
|
}
|
|
|
|
Copy-Item "out\$env:STEAM_TOKEN_DUMPER_NAME\$targetFramework\*" "out\$variant\plugins\$env:STEAM_TOKEN_DUMPER_NAME" -Recurse
|
|
}
|
|
|
|
# Icon is available only in .NET Framework and .NET Core Windows build, we'll bundle the .ico file for other flavours
|
|
if (($targetFramework -eq "$env:NET_CORE_VERSION") -and !(Test-Path "out\$variant\ArchiSteamFarm.exe" -PathType Leaf)) {
|
|
Copy-Item 'resources\ASF.ico' "out\$variant\ArchiSteamFarm.ico"
|
|
}
|
|
|
|
# By default use fastest compression
|
|
$compressionArgs = '-mx=1'
|
|
|
|
# Include extra logic for builds marked for release
|
|
if ($env:APPVEYOR_REPO_TAG -eq 'true') {
|
|
# Update link in Changelog.html accordingly
|
|
if (Test-Path "out\$variant\Changelog.html" -PathType Leaf) {
|
|
(Get-Content "out\$variant\Changelog.html").Replace('ArchiSteamFarm/commits/main', "ArchiSteamFarm/releases/tag/$env:APPVEYOR_REPO_TAG_NAME") | Set-Content "out\$variant\Changelog.html"
|
|
}
|
|
}
|
|
|
|
7z a -bd -slp -tzip -mm=Deflate $compressionArgs "out\ASF-$variant.zip" "$env:APPVEYOR_BUILD_FOLDER\out\$variant\*"
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
|
|
# We can aid non-windows users by adding chmod +x flag to appropriate executables directly in the zip file
|
|
# This is ALMOST a hack, but works reliably enough
|
|
if (Test-Path "tools\zip_exec\zip_exec.exe" -PathType Leaf) {
|
|
$executableFiles = @()
|
|
|
|
if ($variant -like 'generic*') {
|
|
$executableFiles += 'ArchiSteamFarm.sh', 'ArchiSteamFarm-Service.sh'
|
|
} elseif (($variant -like 'linux*') -or ($variant -like 'osx*')) {
|
|
$executableFiles += 'ArchiSteamFarm', 'ArchiSteamFarm-Service.sh'
|
|
}
|
|
|
|
foreach ($executableFile in $executableFiles) {
|
|
tools\zip_exec\zip_exec.exe "out\ASF-$variant.zip" "$executableFile"
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
}
|
|
}
|
|
|
|
# TODO: Change me to Push-AppveyorArtifact once https://github.com/appveyor/ci/issues/2183 is fixed
|
|
appveyor PushArtifact "out\ASF-$variant.zip" -FileName "ASF-$variant.zip" -DeploymentName "ASF-$variant.zip"
|
|
}
|
|
|
|
|
|
foreach ($variant in $env:VARIANTS.Split([char[]] $null, [System.StringSplitOptions]::RemoveEmptyEntries)) {
|
|
Start-Job -Name "$variant" $PublishBlock -ArgumentList "$variant"
|
|
}
|
|
|
|
|
|
Get-Job | Receive-Job -Wait
|
|
deploy: off
|
|
notifications:
|
|
- provider: Webhook
|
|
url:
|
|
secure: i/og7KzkpbcWcKoUubrLH+KB6bkfqA55FHUlGxLepLmgZNQeNMiMoAFICOFY795fFrFfUNUKqwk7ApXE6HUyWMoiijLj7G/JBLTPkBiTCu8fZMTMqwQm6FiHB3+/0h0C+ukcrBEqnXYSQUh6znpKqJSTrIfXUQ7ftNuC966kBAw=
|
|
method: POST
|
|
body: >-
|
|
{
|
|
"avatar_url": "https://www.appveyor.com/assets/img/appveyor-logo-256.png",
|
|
"username": "AppVeyor",
|
|
"content": "[{{projectName}}:{{branch}}] {{commitMessage}} by {{commitAuthor}} ({{commitId}}) | **{{status}}** on {{buildUrl}}"
|
|
}
|
|
on_build_success: true
|
|
on_build_failure: true
|
|
on_build_status_changed: false
|