forked from JustArchiNET/ArchiSteamFarm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cc.sh
executable file
·160 lines (125 loc) · 4.62 KB
/
cc.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/usr/bin/env sh
set -eu
TARGET_FRAMEWORK="net7.0"
MAIN_PROJECT="ArchiSteamFarm"
STEAM_TOKEN_DUMPER_NAME="${MAIN_PROJECT}.OfficialPlugins.SteamTokenDumper"
TESTS_PROJECT="${MAIN_PROJECT}.Tests"
SOLUTION="${MAIN_PROJECT}.sln"
CONFIGURATION="Release"
OUT="out"
OUT_ASF="${OUT}/result"
OUT_STD="${OUT}/${STEAM_TOKEN_DUMPER_NAME}"
PLUGINS="${MAIN_PROJECT}.OfficialPlugins.ItemsMatcher"
ANALYSIS=1
ASF_UI=1
CLEAN=0
PULL=1
SHARED_COMPILATION=1
TEST=1
PRINT_USAGE() {
echo "Usage: $0 [--clean] [--no-analysis] [--no-asf-ui] [--no-pull] [--no-shared-compilation] [--no-test] [debug/release]"
}
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"
for ARG in "$@"; do
case "$ARG" in
debug|Debug) CONFIGURATION="Debug" ;;
release|Release) CONFIGURATION="Release" ;;
--analysis) ANALYSIS=1 ;;
--no-analysis) ANALYSIS=0 ;;
--asf-ui) ASF_UI=1 ;;
--no-asf-ui) ASF_UI=0 ;;
--clean) CLEAN=1 ;;
--no-clean) CLEAN=0 ;;
--pull) PULL=1 ;;
--no-pull) PULL=0 ;;
--shared-compilation) SHARED_COMPILATION=1 ;;
--no-shared-compilation) SHARED_COMPILATION=0 ;;
--test) TEST=1 ;;
--no-test) TEST=0 ;;
--help) PRINT_USAGE; exit 0 ;;
*) PRINT_USAGE; exit 1
esac
done
trap "trap - TERM && kill -- -$$" INT TERM
if ! command -v dotnet >/dev/null; then
echo "ERROR: dotnet CLI tools are not installed!"
exit 1
fi
dotnet --info
if [ "$PULL" -eq 1 ] && [ -d ".git" ] && command -v git >/dev/null; then
git pull --recurse-submodules=on-demand || true
fi
if [ ! -f "$SOLUTION" ]; then
echo "ERROR: $SOLUTION could not be found!"
exit 1
fi
case "$OS_TYPE" in
"Darwin") os_type="osx" ;;
"FreeBSD") os_type="freebsd" ;;
"Linux") os_type="linux" ;;
*) 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
cpu_architecture="$(uname -m)"
case "$cpu_architecture" in
"aarch64") cpu_architecture="arm64" ;;
"amd64") cpu_architecture="x64" ;;
"arm64") ;;
"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."
if [ "$ASF_UI" -eq 1 ]; then
if [ -f "ASF-ui/package.json" ] && command -v npm >/dev/null; then
echo "INFO: Building ASF-ui..."
# ASF-ui doesn't clean itself after old build
rm -rf "ASF-ui/dist"
npm ci --no-progress --prefix ASF-ui
npm run-script deploy --no-progress --prefix ASF-ui
# ASF's output www folder needs cleaning as well
rm -rf "${OUT_ASF}/www"
else
echo "WARNING: ASF-ui dependencies are missing, skipping build of ASF-ui..."
fi
fi
DOTNET_FLAGS="-c $CONFIGURATION -f $TARGET_FRAMEWORK -p:ContinuousIntegrationBuild=true -p:UseAppHost=false --nologo"
PUBLISH_FLAGS="-r ${os_type}-${cpu_architecture} --no-self-contained"
if [ "$ANALYSIS" -eq 0 ]; then
DOTNET_FLAGS="$DOTNET_FLAGS -p:AnalysisMode=AllDisabledByDefault"
fi
if [ "$SHARED_COMPILATION" -eq 0 ]; then
DOTNET_FLAGS="$DOTNET_FLAGS -p:UseSharedCompilation=false"
fi
if [ "$CLEAN" -eq 1 ]; then
dotnet clean $DOTNET_FLAGS
rm -rf "$OUT"
fi
if [ "$TEST" -eq 1 ]; then
dotnet test "$TESTS_PROJECT" $DOTNET_FLAGS
fi
echo "INFO: Building ${MAIN_PROJECT}..."
dotnet publish "$MAIN_PROJECT" -o "$OUT_ASF" $DOTNET_FLAGS $PUBLISH_FLAGS
if [ -n "${STEAM_TOKEN_DUMPER_TOKEN-}" ] && [ -f "${STEAM_TOKEN_DUMPER_NAME}/SharedInfo.cs" ] && command -v git >/dev/null; then
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"
echo "INFO: Building ${STEAM_TOKEN_DUMPER_NAME}..."
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"
else
echo "WARNING: ${STEAM_TOKEN_DUMPER_NAME} dependencies are missing, skipping build of ${STEAM_TOKEN_DUMPER_NAME}..."
fi
for plugin in $PLUGINS; do
echo "INFO: Building ${plugin}..."
dotnet publish "$plugin" -o "${OUT_ASF}/plugins/${plugin}" $DOTNET_FLAGS $PUBLISH_FLAGS
done
echo
echo "SUCCESS: Compilation finished successfully! :)"