2019-11-07 22:02:59 +01:00
#!/usr/bin/env sh
set -eu
2016-03-29 22:58:18 +02:00
2017-11-13 02:13:29 +01:00
MAIN_PROJECT = "ArchiSteamFarm"
2020-06-15 13:21:56 +02:00
STEAM_TOKEN_DUMPER_NAME = " ${ MAIN_PROJECT } .OfficialPlugins.SteamTokenDumper "
2017-11-13 02:13:29 +01:00
TESTS_PROJECT = " ${ MAIN_PROJECT } .Tests "
SOLUTION = " ${ MAIN_PROJECT } .sln "
2017-10-18 15:03:52 +02:00
CONFIGURATION = "Release"
2019-09-26 20:28:25 +02:00
OUT = "out"
2020-06-15 13:21:56 +02:00
OUT_ASF = " ${ OUT } /result "
2023-07-23 12:25:14 +02:00
PLUGINS = " ${ MAIN_PROJECT } .OfficialPlugins.ItemsMatcher ${ MAIN_PROJECT } .OfficialPlugins.MobileAuthenticator "
2017-08-31 07:54:07 +02:00
2021-05-08 00:17:27 +02:00
ANALYSIS = 1
2019-01-11 00:55:15 +01:00
ASF_UI = 1
2016-03-29 22:58:18 +02:00
CLEAN = 0
2018-02-26 19:58:25 +01:00
PULL = 1
2018-02-07 06:37:21 +01:00
SHARED_COMPILATION = 1
2017-10-18 15:03:52 +02:00
TEST = 1
2016-03-29 22:58:18 +02:00
2019-01-11 16:48:40 +01:00
PRINT_USAGE( ) {
2021-05-08 00:17:27 +02:00
echo " Usage: $0 [--clean] [--no-analysis] [--no-asf-ui] [--no-pull] [--no-shared-compilation] [--no-test] [debug/release] "
2019-01-11 16:48:40 +01:00
}
2021-05-15 23:37:52 +02:00
OS_TYPE = " $( uname -s) "
case " $OS_TYPE " in
"Darwin" ) SCRIPT_PATH = " $( readlink " $0 " ) " ; ;
"FreeBSD" ) SCRIPT_PATH = " $( readlink -f " $0 " ) " ; ;
"Linux" ) SCRIPT_PATH = " $( readlink -f " $0 " ) " ; ;
*) echo " ERROR: Unknown OS type: ${ OS_TYPE } . If you believe that our script should work on your machine, please let us know. " ; exit 1
esac
SCRIPT_DIR = " $( dirname " $SCRIPT_PATH " ) "
cd " $SCRIPT_DIR "
2016-03-29 22:58:18 +02:00
for ARG in " $@ " ; do
case " $ARG " in
2017-08-31 07:54:07 +02:00
debug| Debug) CONFIGURATION = "Debug" ; ;
2018-05-13 20:33:44 +02:00
release| Release) CONFIGURATION = "Release" ; ;
2021-05-08 00:17:27 +02:00
--analysis) ANALYSIS = 1 ; ;
--no-analysis) ANALYSIS = 0 ; ;
2019-01-11 00:55:15 +01:00
--asf-ui) ASF_UI = 1 ; ;
--no-asf-ui) ASF_UI = 0 ; ;
2016-03-29 22:58:18 +02:00
--clean) CLEAN = 1 ; ;
2018-05-13 20:33:44 +02:00
--no-clean) CLEAN = 0 ; ;
--pull) PULL = 1 ; ;
2018-02-26 19:58:25 +01:00
--no-pull) PULL = 0 ; ;
2018-05-13 20:33:44 +02:00
--shared-compilation) SHARED_COMPILATION = 1 ; ;
2018-02-07 06:37:21 +01:00
--no-shared-compilation) SHARED_COMPILATION = 0 ; ;
2018-05-13 20:33:44 +02:00
--test) TEST = 1 ; ;
2017-10-18 15:03:52 +02:00
--no-test) TEST = 0 ; ;
2019-01-11 16:48:40 +01:00
--help) PRINT_USAGE; exit 0 ; ;
*) PRINT_USAGE; exit 1
2016-03-29 22:58:18 +02:00
esac
done
2019-11-07 22:02:59 +01:00
trap " trap - TERM && kill -- - $$ " INT TERM
2017-10-18 15:03:52 +02:00
2019-11-07 22:02:59 +01:00
if ! command -v dotnet >/dev/null; then
2017-06-26 05:14:44 +02:00
echo "ERROR: dotnet CLI tools are not installed!"
exit 1
fi
2016-03-29 22:58:18 +02:00
2017-08-31 07:54:07 +02:00
dotnet --info
2019-11-07 22:02:59 +01:00
if [ " $PULL " -eq 1 ] && [ -d ".git" ] && command -v git >/dev/null; then
2018-12-26 02:53:06 +01:00
git pull --recurse-submodules= on-demand || true
2016-03-29 22:58:18 +02:00
fi
2019-11-07 22:02:59 +01:00
if [ ! -f " $SOLUTION " ] ; then
2017-08-31 07:54:25 +02:00
echo " ERROR: $SOLUTION could not be found! "
2016-03-29 22:58:18 +02:00
exit 1
fi
2021-05-15 23:37:52 +02:00
case " $OS_TYPE " in
2020-04-22 22:48:42 +02:00
"Darwin" ) os_type = "osx" ; ;
2021-01-14 10:54:15 +01:00
"FreeBSD" ) os_type = "freebsd" ; ;
2020-04-22 22:48:42 +02:00
"Linux" ) os_type = "linux" ; ;
2021-05-15 23:37:52 +02:00
*) echo " ERROR: Unknown OS type: ${ OS_TYPE } . If you believe that our script should work on your machine, please let us know. " ; exit 1
2020-04-22 22:48:42 +02:00
esac
cpu_architecture = " $( uname -m) "
case " $cpu_architecture " in
"aarch64" ) cpu_architecture = "arm64" ; ;
2021-01-14 10:54:15 +01:00
"amd64" ) cpu_architecture = "x64" ; ;
2021-11-10 20:36:09 +01:00
"arm64" ) ; ;
2020-04-22 22:48:42 +02:00
"armv7l" ) cpu_architecture = "arm" ; ;
"x86_64" ) cpu_architecture = "x64" ; ;
*) echo " ERROR: Unknown CPU architecture: ${ cpu_architecture } . If you believe that our script should work on your machine, please let us know. " ; exit 1
esac
echo " INFO: Detected ${ os_type } - ${ cpu_architecture } machine. "
2019-11-07 22:02:59 +01:00
if [ " $ASF_UI " -eq 1 ] ; then
if [ -f "ASF-ui/package.json" ] && command -v npm >/dev/null; then
2020-04-22 22:48:42 +02:00
echo "INFO: Building ASF-ui..."
2018-09-23 01:52:19 +02:00
2019-01-11 00:55:15 +01:00
# ASF-ui doesn't clean itself after old build
rm -rf "ASF-ui/dist"
2018-12-05 23:17:09 +01:00
2020-04-22 22:48:42 +02:00
npm ci --no-progress --prefix ASF-ui
npm run-script deploy --no-progress --prefix ASF-ui
2018-12-05 23:23:59 +01:00
2019-01-11 00:55:15 +01:00
# ASF's output www folder needs cleaning as well
2020-06-15 13:21:56 +02:00
rm -rf " ${ OUT_ASF } /www "
2019-01-11 00:55:15 +01:00
else
2019-08-03 02:16:16 +02:00
echo "WARNING: ASF-ui dependencies are missing, skipping build of ASF-ui..."
2019-01-11 00:55:15 +01:00
fi
2018-09-23 01:52:19 +02:00
fi
2024-04-12 11:58:46 +02:00
DOTNET_FLAGS = " -c $CONFIGURATION -p:ContinuousIntegrationBuild=true -p:UseAppHost=false --nologo "
2021-11-29 09:56:43 +01:00
PUBLISH_FLAGS = " -r ${ os_type } - ${ cpu_architecture } --no-self-contained "
2018-02-07 06:37:21 +01:00
2021-05-08 00:17:27 +02:00
if [ " $ANALYSIS " -eq 0 ] ; then
DOTNET_FLAGS = " $DOTNET_FLAGS -p:AnalysisMode=AllDisabledByDefault "
fi
2019-11-07 22:02:59 +01:00
if [ " $SHARED_COMPILATION " -eq 0 ] ; then
2020-04-22 22:48:42 +02:00
DOTNET_FLAGS = " $DOTNET_FLAGS -p:UseSharedCompilation=false "
2018-05-13 20:33:44 +02:00
fi
2019-11-07 22:02:59 +01:00
if [ " $CLEAN " -eq 1 ] ; then
dotnet clean $DOTNET_FLAGS
2019-09-26 20:28:25 +02:00
rm -rf " $OUT "
2018-02-07 06:37:21 +01:00
fi
2017-08-31 07:54:07 +02:00
2019-11-07 22:02:59 +01:00
if [ " $TEST " -eq 1 ] ; then
2025-05-07 23:58:11 +02:00
dotnet test " $TESTS_PROJECT " --filter TestCategory!= Manual $DOTNET_FLAGS
2017-10-18 15:03:52 +02:00
fi
2016-03-29 22:58:18 +02:00
2022-12-15 18:46:37 +01:00
echo " INFO: Building ${ MAIN_PROJECT } ... "
2021-11-29 09:56:43 +01:00
dotnet publish " $MAIN_PROJECT " -o " $OUT_ASF " $DOTNET_FLAGS $PUBLISH_FLAGS
2020-06-15 13:21:56 +02:00
2021-01-14 11:03:42 +01:00
if [ -n " ${ STEAM_TOKEN_DUMPER_TOKEN - } " ] && [ -f " ${ STEAM_TOKEN_DUMPER_NAME } /SharedInfo.cs " ] && command -v git >/dev/null; then
2020-06-15 13:45:17 +02:00
git checkout -- " ${ STEAM_TOKEN_DUMPER_NAME } /SharedInfo.cs "
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 "
2022-12-15 18:46:37 +01:00
echo " INFO: Building ${ STEAM_TOKEN_DUMPER_NAME } ... "
2020-06-15 13:21:56 +02:00
2022-12-15 18:46:37 +01:00
dotnet publish " $STEAM_TOKEN_DUMPER_NAME " -o " ${ OUT_ASF } /plugins/ ${ STEAM_TOKEN_DUMPER_NAME } " $DOTNET_FLAGS $PUBLISH_FLAGS
git checkout -- " ${ STEAM_TOKEN_DUMPER_NAME } /SharedInfo.cs "
2020-06-15 13:45:17 +02:00
else
2021-01-14 11:03:42 +01:00
echo " WARNING: ${ STEAM_TOKEN_DUMPER_NAME } dependencies are missing, skipping build of ${ STEAM_TOKEN_DUMPER_NAME } ... "
2020-06-15 13:21:56 +02:00
fi
2018-05-13 20:33:44 +02:00
2022-12-15 18:46:37 +01:00
for plugin in $PLUGINS ; do
echo " INFO: Building ${ plugin } ... "
dotnet publish " $plugin " -o " ${ OUT_ASF } /plugins/ ${ plugin } " $DOTNET_FLAGS $PUBLISH_FLAGS
done
2016-03-29 22:58:18 +02:00
echo
2019-08-03 02:16:16 +02:00
echo "SUCCESS: Compilation finished successfully! :)"