mirror of
https://github.com/JustArchiNET/ArchiSteamFarm.git
synced 2026-01-01 14:10:53 +00:00
This gives precise information which OSes failed instead of the first one that did, useful for analyzing failures related to specific OS only
393 lines
16 KiB
YAML
393 lines
16 KiB
YAML
name: ASF-ci
|
|
|
|
on: [push, pull_request]
|
|
|
|
env:
|
|
CONFIGURATION: Release
|
|
DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
|
DOTNET_NOLOGO: 1
|
|
DOTNET_SDK_VERSION: 5.0.201
|
|
NET_CORE_VERSION: net5.0
|
|
NET_FRAMEWORK_VERSION: net48
|
|
NODE_JS_VERSION: 14 # Periodically bumped to follow latest LTS | https://github.com/actions/setup-node/issues/26
|
|
STEAM_TOKEN_DUMPER_NAME: ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
|
STEAM_TOKEN_DUMPER_TOKEN: ${{ secrets.STEAM_TOKEN_DUMPER_TOKEN }}
|
|
|
|
jobs:
|
|
main:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [macos-latest, ubuntu-latest, windows-latest]
|
|
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v2
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup .NET Core
|
|
uses: actions/setup-dotnet@v1
|
|
with:
|
|
dotnet-version: ${{ env.DOTNET_SDK_VERSION }}
|
|
|
|
- name: Verify .NET Core
|
|
run: dotnet --info
|
|
|
|
- name: Setup Node.js with npm
|
|
uses: actions/setup-node@v2
|
|
with:
|
|
check-latest: true
|
|
node-version: ${{ env.NODE_JS_VERSION }}
|
|
|
|
- name: Verify Node.js
|
|
run: node -v
|
|
|
|
- name: Verify npm
|
|
run: npm -v
|
|
|
|
- name: Install npm modules for ASF-ui
|
|
run: npm ci --no-progress --prefix ASF-ui
|
|
|
|
- name: Build ASF-ui
|
|
run: npm run-script deploy --no-progress --prefix ASF-ui
|
|
|
|
- name: Build ArchiSteamFarm
|
|
run: dotnet build ArchiSteamFarm -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
|
|
|
- name: Build ArchiSteamFarm.CustomPlugins.ExamplePlugin
|
|
run: dotnet build ArchiSteamFarm.CustomPlugins.ExamplePlugin -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
|
|
|
- name: Build ArchiSteamFarm.CustomPlugins.PeriodicGC
|
|
run: dotnet build ArchiSteamFarm.CustomPlugins.PeriodicGC -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
|
|
|
- name: Build ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
|
|
run: dotnet build "${{ env.STEAM_TOKEN_DUMPER_NAME }}" -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
|
|
|
- name: Run ArchiSteamFarm.Tests
|
|
run: dotnet test ArchiSteamFarm.Tests -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
|
|
|
- name: Upload latest strings for translation on Crowdin
|
|
continue-on-error: true
|
|
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && startsWith(matrix.os, 'ubuntu-') }}
|
|
uses: crowdin/github-action@1.0.19
|
|
with:
|
|
crowdin_branch_name: main
|
|
project_id: ${{ secrets.ASF_CROWDIN_PROJECT_ID }}
|
|
token: ${{ secrets.ASF_CROWDIN_API_TOKEN }}
|
|
|
|
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Unix
|
|
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
|
|
shell: sh
|
|
run: |
|
|
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ]; then
|
|
sed "s/STEAM_TOKEN_DUMPER_TOKEN/${STEAM_TOKEN_DUMPER_TOKEN}/g" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" > "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new"
|
|
mv "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs.new" "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs"
|
|
fi
|
|
|
|
- name: Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Windows
|
|
if: startsWith(matrix.os, 'windows-')
|
|
shell: pwsh
|
|
run: |
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
if ((Test-Path 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"
|
|
}
|
|
|
|
- name: Publish ArchiSteamFarm.OfficialPlugins.SteamTokenDumper for .NET Core
|
|
run: 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:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
|
|
|
|
- name: Publish ArchiSteamFarm.OfficialPlugins.SteamTokenDumper for .NET Framework
|
|
if: startsWith(matrix.os, 'windows-')
|
|
run: 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:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
|
|
|
|
- name: Perform cleanup of ArchiSteamFarm in preparation for publishing
|
|
run: dotnet clean ArchiSteamFarm -c "${{ env.CONFIGURATION }}" -p:UseAppHost=false --nologo
|
|
|
|
- name: Restore packages in preparation for ArchiSteamFarm publishing
|
|
run: dotnet restore ArchiSteamFarm
|
|
|
|
- name: Publish ArchiSteamFarm on Unix
|
|
if: startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
|
|
env:
|
|
VARIANTS: generic 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!
|
|
shell: sh
|
|
run: |
|
|
set -eu
|
|
|
|
publish() {
|
|
if [ "$1" = 'generic' ]; then
|
|
local variantArgs="-p:TargetLatestRuntimePatch=false -p:UseAppHost=false"
|
|
else
|
|
local variantArgs="-p:PublishSingleFile=true -p:PublishTrimmed=true -r $1"
|
|
fi
|
|
|
|
dotnet publish ArchiSteamFarm -c "$CONFIGURATION" -f "$NET_CORE_VERSION" -o "out/${1}" "-p:ASFVariant=$1" --no-restore --nologo $variantArgs
|
|
|
|
# If we're including any overlay for this variant, copy it to output directory
|
|
if [ -d "ArchiSteamFarm/overlay/${1}" ]; then
|
|
cp -pR "ArchiSteamFarm/overlay/${1}/"* "out/${1}"
|
|
fi
|
|
|
|
# If we're including SteamTokenDumper plugin for this framework, copy it to output directory
|
|
if [ -d "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}" ]; then
|
|
mkdir -p "out/${1}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
|
|
cp -pR "out/${STEAM_TOKEN_DUMPER_NAME}/${NET_CORE_VERSION}/"* "out/${1}/plugins/${STEAM_TOKEN_DUMPER_NAME}"
|
|
fi
|
|
|
|
# Include .ico file for all platforms, since only Windows script can bundle it inside the exe
|
|
cp "resources/ASF.ico" "out/${1}/ArchiSteamFarm.ico"
|
|
|
|
if command -v 7z >/dev/null; then
|
|
7z a -bd -slp -tzip -mm=Deflate -mx=1 "out/ASF-${1}.zip" "${GITHUB_WORKSPACE}/out/${1}/*"
|
|
elif command -v zip >/dev/null; then
|
|
(
|
|
cd "${GITHUB_WORKSPACE}/out/${1}"
|
|
zip -1 -q -r "../ASF-${1}.zip" .
|
|
)
|
|
else
|
|
echo "ERROR: No supported zip tool!"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
jobs=""
|
|
|
|
for variant in $VARIANTS; do
|
|
publish "$variant" &
|
|
jobs="$jobs $!"
|
|
done
|
|
|
|
for job in $jobs; do
|
|
wait "$job"
|
|
done
|
|
|
|
- name: Publish ArchiSteamFarm on Windows
|
|
if: startsWith(matrix.os, 'windows-')
|
|
env:
|
|
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!
|
|
shell: pwsh
|
|
run: |
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
$PublishBlock = {
|
|
param($variant)
|
|
|
|
Set-StrictMode -Version Latest
|
|
$ErrorActionPreference = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
Set-Location "$env:GITHUB_WORKSPACE"
|
|
|
|
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" --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"
|
|
}
|
|
|
|
# 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"
|
|
}
|
|
|
|
# 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:GITHUB_REF -like 'refs/tags/*') {
|
|
$tag = $env:GITHUB_REF.Substring(10)
|
|
|
|
# Tweak compression args for release publishing
|
|
$compressionArgs = '-mx=9', '-mfb=258', '-mpass=15'
|
|
|
|
# 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/$tag") | Set-Content "out\$variant\Changelog.html"
|
|
}
|
|
}
|
|
|
|
7z a -bd -slp -tzip -mm=Deflate $compressionArgs "out\ASF-$variant.zip" "$env:GITHUB_WORKSPACE\out\$variant\*"
|
|
|
|
if ($LastExitCode -ne 0) {
|
|
throw "Last command failed."
|
|
}
|
|
}
|
|
|
|
foreach ($variant in $env:VARIANTS.Split([char[]] $null, [System.StringSplitOptions]::RemoveEmptyEntries)) {
|
|
Start-Job -Name "$variant" $PublishBlock -ArgumentList "$variant"
|
|
}
|
|
|
|
Get-Job | Receive-Job -Wait
|
|
|
|
- name: Upload ASF-generic
|
|
continue-on-error: true
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.os }}_ASF-generic
|
|
path: out/ASF-generic.zip
|
|
|
|
- name: Upload ASF-generic-netf
|
|
continue-on-error: true
|
|
if: startsWith(matrix.os, 'windows-')
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.os }}_ASF-generic-netf
|
|
path: out/ASF-generic-netf.zip
|
|
|
|
- name: Upload ASF-linux-arm
|
|
continue-on-error: true
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.os }}_ASF-linux-arm
|
|
path: out/ASF-linux-arm.zip
|
|
|
|
- name: Upload ASF-linux-arm64
|
|
continue-on-error: true
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.os }}_ASF-linux-arm64
|
|
path: out/ASF-linux-arm64.zip
|
|
|
|
- name: Upload ASF-linux-x64
|
|
continue-on-error: true
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.os }}_ASF-linux-x64
|
|
path: out/ASF-linux-x64.zip
|
|
|
|
- name: Upload ASF-osx-x64
|
|
continue-on-error: true
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.os }}_ASF-osx-x64
|
|
path: out/ASF-osx-x64.zip
|
|
|
|
- name: Upload ASF-win-x64
|
|
continue-on-error: true
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ matrix.os }}_ASF-win-x64
|
|
path: out/ASF-win-x64.zip
|
|
|
|
- name: Create ArchiSteamFarm GitHub release
|
|
id: github_release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ github.ref }}
|
|
release_name: ArchiSteamFarm V${{ github.ref }}
|
|
body_path: .github/RELEASE_TEMPLATE.md
|
|
prerelease: true
|
|
|
|
- name: Upload ASF-generic to GitHub release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.github_release.outputs.upload_url }}
|
|
asset_path: out/ASF-generic.zip
|
|
asset_name: ASF-generic.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload ASF-generic-netf to GitHub release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.github_release.outputs.upload_url }}
|
|
asset_path: out/ASF-generic-netf.zip
|
|
asset_name: ASF-generic-netf.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload ASF-linux-arm to GitHub release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.github_release.outputs.upload_url }}
|
|
asset_path: out/ASF-linux-arm.zip
|
|
asset_name: ASF-linux-arm.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload ASF-linux-arm64 to GitHub release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.github_release.outputs.upload_url }}
|
|
asset_path: out/ASF-linux-arm64.zip
|
|
asset_name: ASF-linux-arm64.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload ASF-linux-x64 to GitHub release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.github_release.outputs.upload_url }}
|
|
asset_path: out/ASF-linux-x64.zip
|
|
asset_name: ASF-linux-x64.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload ASF-osx-x64 to GitHub release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.github_release.outputs.upload_url }}
|
|
asset_path: out/ASF-osx-x64.zip
|
|
asset_name: ASF-osx-x64.zip
|
|
asset_content_type: application/zip
|
|
|
|
- name: Upload ASF-win-x64 to GitHub release
|
|
if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'windows-') }}
|
|
uses: actions/upload-release-asset@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ steps.github_release.outputs.upload_url }}
|
|
asset_path: out/ASF-win-x64.zip
|
|
asset_name: ASF-win-x64.zip
|
|
asset_content_type: application/zip
|