2021-05-20 21:36:02 +00:00
name : ASF-publish
on : [ push, pull_request]
env :
2021-08-01 10:56:08 +00:00
ASF_PRIVATE_SNK : ${{ secrets.ASF_PRIVATE_SNK }}
2021-05-20 21:36:02 +00:00
CONFIGURATION : Release
DOTNET_CLI_TELEMETRY_OPTOUT : 1
DOTNET_NOLOGO : 1
DOTNET_SDK_VERSION : 5.0 .x
NET_CORE_VERSION : net5.0
NET_FRAMEWORK_VERSION : net48
2021-06-30 14:26:33 +00:00
NODE_JS_VERSION : 'lts/*'
2021-05-20 21:36:02 +00:00
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
2021-06-30 14:19:41 +00:00
uses : actions/checkout@v2.3.4
2021-05-20 21:36:02 +00:00
with :
submodules : recursive
- name : Setup .NET Core
2021-06-30 14:19:41 +00:00
uses : actions/setup-dotnet@v1.8.1
2021-05-20 21:36:02 +00:00
with :
dotnet-version : ${{ env.DOTNET_SDK_VERSION }}
- name : Verify .NET Core
run : dotnet --info
- name : Setup Node.js with npm
2021-07-20 14:51:21 +00:00
uses : actions/setup-node@v2.3.0
2021-05-20 21:36:02 +00:00
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 : Publish ASF-ui
run : npm run-script deploy --no-progress --prefix ASF-ui
2021-08-01 10:56:08 +00:00
- name : Prepare private key for signing on Unix
if : startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
shell : sh
run : |
2021-08-01 11:00:14 +00:00
set -eu
if [ -n "${ASF_PRIVATE_SNK-}" ]; then
echo "$ASF_PRIVATE_SNK" | base64 -d > "resources/ArchiSteamFarm.snk"
fi
2021-08-01 10:56:08 +00:00
- name : Prepare private key for signing on Windows
if : startsWith(matrix.os, 'windows-')
shell : pwsh
run : |
2021-08-01 11:00:14 +00:00
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
2021-08-01 10:56:08 +00:00
2021-08-01 17:14:56 +00:00
if ((Test-Path env:ASF_PRIVATE_SNK) -and ($env:ASF_PRIVATE_SNK)) {
2021-08-01 11:00:14 +00:00
echo "$env:ASF_PRIVATE_SNK" > "resources\ArchiSteamFarm.snk"
2021-08-01 10:56:08 +00:00
2021-08-01 11:00:14 +00:00
certutil -f -decode "resources\ArchiSteamFarm.snk" "resources\ArchiSteamFarm.snk"
if ($LastExitCode -ne 0) {
throw "Last command failed."
}
}
2021-08-01 10:56:08 +00:00
2021-05-20 21:36:02 +00:00
- name : Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Unix
if : startsWith(matrix.os, 'macos-') || startsWith(matrix.os, 'ubuntu-')
shell : sh
run : |
2021-08-01 11:00:14 +00:00
set -eu
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
2021-05-20 21:36:02 +00:00
- name : Prepare ArchiSteamFarm.OfficialPlugins.SteamTokenDumper on Windows
if : startsWith(matrix.os, 'windows-')
shell : pwsh
run : |
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
2021-08-01 17:14:56 +00:00
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)) {
2021-05-20 21:36:02 +00:00
(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:ContinuousIntegrationBuild=true -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:ContinuousIntegrationBuild=true -p:TargetLatestRuntimePatch=false -p:UseAppHost=false --nologo
- name : Restore packages in preparation for ArchiSteamFarm publishing
2021-08-01 10:56:08 +00:00
run : dotnet restore ArchiSteamFarm -p:ContinuousIntegrationBuild=true --nologo
2021-05-20 21:36:02 +00:00
- 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" -p:ContinuousIntegrationBuild=true --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" -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: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
2021-06-30 14:19:41 +00:00
uses : actions/upload-artifact@v2.2.4
2021-05-20 21:36:02 +00:00
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-')
2021-06-30 14:19:41 +00:00
uses : actions/upload-artifact@v2.2.4
2021-05-20 21:36:02 +00:00
with :
name : ${{ matrix.os }}_ASF-generic-netf
path : out/ASF-generic-netf.zip
- name : Upload ASF-linux-arm
continue-on-error : true
2021-06-30 14:19:41 +00:00
uses : actions/upload-artifact@v2.2.4
2021-05-20 21:36:02 +00:00
with :
name : ${{ matrix.os }}_ASF-linux-arm
path : out/ASF-linux-arm.zip
- name : Upload ASF-linux-arm64
continue-on-error : true
2021-06-30 14:19:41 +00:00
uses : actions/upload-artifact@v2.2.4
2021-05-20 21:36:02 +00:00
with :
name : ${{ matrix.os }}_ASF-linux-arm64
path : out/ASF-linux-arm64.zip
- name : Upload ASF-linux-x64
continue-on-error : true
2021-06-30 14:19:41 +00:00
uses : actions/upload-artifact@v2.2.4
2021-05-20 21:36:02 +00:00
with :
name : ${{ matrix.os }}_ASF-linux-x64
path : out/ASF-linux-x64.zip
- name : Upload ASF-osx-x64
continue-on-error : true
2021-06-30 14:19:41 +00:00
uses : actions/upload-artifact@v2.2.4
2021-05-20 21:36:02 +00:00
with :
name : ${{ matrix.os }}_ASF-osx-x64
path : out/ASF-osx-x64.zip
- name : Upload ASF-win-x64
continue-on-error : true
2021-06-30 14:19:41 +00:00
uses : actions/upload-artifact@v2.2.4
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/create-release@v1.1.4
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/upload-release-asset@v1.0.2
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/upload-release-asset@v1.0.2
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/upload-release-asset@v1.0.2
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/upload-release-asset@v1.0.2
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/upload-release-asset@v1.0.2
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/upload-release-asset@v1.0.2
2021-05-20 21:36:02 +00:00
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-') }}
2021-06-30 14:19:41 +00:00
uses : actions/upload-release-asset@v1.0.2
2021-05-20 21:36:02 +00:00
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