-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworkload-install.sh
executable file
·229 lines (200 loc) · 7.46 KB
/
workload-install.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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
#
# Copyright (c) Samsung Electronics. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
#!/bin/bash -e
MANIFEST_BASE_NAME="samsung.net.sdk.tizen.manifest"
MANIFEST_VERSION="<latest>"
DOTNET_INSTALL_DIR="<auto>"
DOTNET_TARGET_VERSION_BAND="<auto>"
DOTNET_DEFAULT_PATH_LINUX="/usr/share/dotnet"
DOTNET_DEFAULT_PATH_MACOS="/usr/local/share/dotnet"
UPDATE_ALL_WORKLOADS="false"
LatestVersionMap=(
"$MANIFEST_BASE_NAME-6.0.100=7.0.101"
"$MANIFEST_BASE_NAME-6.0.200=7.0.100-preview.13.6"
"$MANIFEST_BASE_NAME-6.0.300=7.0.304"
"$MANIFEST_BASE_NAME-6.0.400=7.0.400"
"$MANIFEST_BASE_NAME-7.0.100-preview.6=7.0.100-preview.6.14"
"$MANIFEST_BASE_NAME-7.0.100-preview.7=7.0.100-preview.7.20"
"$MANIFEST_BASE_NAME-7.0.100-rc.1=7.0.100-rc.1.22"
"$MANIFEST_BASE_NAME-7.0.100-rc.2=7.0.100-rc.2.24"
"$MANIFEST_BASE_NAME-7.0.100=7.0.100"
)
while [ $# -ne 0 ]; do
name=$1
case "$name" in
-v|--version)
shift
MANIFEST_VERSION=$1
;;
-d|--dotnet-install-dir)
shift
DOTNET_INSTALL_DIR=$1
;;
-t|--dotnet-target-version-band)
shift
DOTNET_TARGET_VERSION_BAND=$1
;;
-u|--update-all-workloads)
shift
UPDATE_ALL_WORKLOADS="true"
;;
-h|--help)
script_name="$(basename "$0")"
echo "Tizen Workload Installer"
echo "Usage: $script_name [-v|--version <VERSION>] [-d|--dotnet-install-dir <DIR>] [-t|--dotnet-target-version-band <VERSION>]"
echo " $script_name -h|-?|--help"
echo ""
echo "Options:"
echo " -v,--version <VERSION> Use specific VERSION, Defaults to \`$MANIFEST_VERSION\`."
echo " -d,--dotnet-install-dir <DIR> Dotnet SDK Location installed, Defaults to \`$DOTNET_INSTALL_DIR\`."
echo " -t,--dotnet-target-version-band <VERSION> Use specific dotnet version band for install location, Defaults to \`$DOTNET_TARGET_VERSION_BAND\`."
exit 0
;;
*)
echo "Unknown argument \`$name\`"
exit 1
;;
esac
shift
done
function read_dotnet_link() {
cd -P "$(dirname "$1")"
dotnet_file="$PWD/$(basename "$1")"
while [[ -h "$dotnet_file" ]]; do
cd -P "$(dirname "$dotnet_file")"
dotnet_file="$(readlink "$dotnet_file")"
cd -P "$(dirname "$dotnet_file")"
dotnet_file="$PWD/$(basename "$dotnet_file")"
done
echo $PWD
}
function error_permission_denied() {
echo "No permission to install manifest. Try again with sudo."
exit 1
}
function ensure_directory() {
if [ ! -d $1 ]; then
mkdir -p $1 || error_permission_denied
fi
[ ! -w $1 ] && error_permission_denied
}
# Check dotnet install directory.
if [[ "$DOTNET_INSTALL_DIR" == "<auto>" ]]; then
if [[ -n "$DOTNET_ROOT" && -d "$DOTNET_ROOT" ]]; then
DOTNET_INSTALL_DIR=$DOTNET_ROOT
elif [[ -d "$DOTNET_DEFAULT_PATH_LINUX" ]]; then
DOTNET_INSTALL_DIR=$DOTNET_DEFAULT_PATH_LINUX
elif [[ -d "$DOTNET_DEFAULT_PATH_MACOS" ]]; then
DOTNET_INSTALL_DIR=$DOTNET_DEFAULT_PATH_MACOS
elif [[ -n "$(which dotnet)" ]]; then
DOTNET_INSTALL_DIR=$(read_dotnet_link $(which dotnet))
fi
fi
if [ ! -d $DOTNET_INSTALL_DIR ]; then
echo "No installed dotnet \`$DOTNET_INSTALL_DIR\`."
exit 1
fi
function getLatestVersion () {
for index in "${LatestVersionMap[@]}"; do
if [ "${index%%=*}" = "${1}" ]; then
echo "${index#*=}"
fi
done
}
# Check installed dotnet version
DOTNET_COMMAND="$DOTNET_INSTALL_DIR/dotnet"
if [ ! -x "$DOTNET_COMMAND" ]; then
echo "$DOTNET_COMMAND command not found"
exit 1
fi
function install_tizenworkload() {
DOTNET_VERSION=$1
IFS='.' read -r -a array <<< "$DOTNET_VERSION"
CURRENT_DOTNET_VERSION=${array[0]}
DOTNET_VERSION_BAND="${array[0]}.${array[1]}.${array[2]:0:1}00"
MANIFEST_NAME="$MANIFEST_BASE_NAME-$DOTNET_VERSION_BAND"
# Reset local variables
if [[ "$UPDATE_ALL_WORKLOADS" == "true" ]]; then
DOTNET_TARGET_VERSION_BAND="<auto>"
MANIFEST_VERSION="<latest>"
fi
# Check version band
if [[ "$DOTNET_TARGET_VERSION_BAND" == "<auto>" ]]; then
if [[ "$CURRENT_DOTNET_VERSION" -ge "7" ]]; then
if [[ "$DOTNET_VERSION" == *"-preview"* || $DOTNET_VERSION == *"-rc"* || $DOTNET_VERSION == *"-alpha"* ]] && [[ ${#array[@]} -ge 4 ]]; then
DOTNET_TARGET_VERSION_BAND="$DOTNET_VERSION_BAND${array[2]:3}.${array[3]}"
MANIFEST_NAME="$MANIFEST_BASE_NAME-$DOTNET_TARGET_VERSION_BAND"
else
DOTNET_TARGET_VERSION_BAND=$DOTNET_VERSION_BAND
fi
else
DOTNET_TARGET_VERSION_BAND=$DOTNET_VERSION_BAND
fi
fi
# Check latest version of manifest.
if [[ "$MANIFEST_VERSION" == "<latest>" ]]; then
MANIFEST_VERSION=$(curl -s https://api.nuget.org/v3-flatcontainer/$MANIFEST_NAME/index.json | grep \" | tail -n 1 | tr -d '\r' | xargs)
if [ ! "$MANIFEST_VERSION" ]; then
MANIFEST_VERSION=$(getLatestVersion "$MANIFEST_NAME")
if [[ -n $MANIFEST_VERSION ]]; then
echo "Return cached latest version: $MANIFEST_VERSION"
else
echo "Failed to get the latest version of $MANIFEST_NAME."
return
fi
fi
fi
# Check workload manifest directory.
SDK_MANIFESTS_DIR=$DOTNET_INSTALL_DIR/sdk-manifests/$DOTNET_TARGET_VERSION_BAND
ensure_directory $SDK_MANIFESTS_DIR
TMPDIR=$(mktemp -d)
echo "Installing $MANIFEST_NAME/$MANIFEST_VERSION to $SDK_MANIFESTS_DIR..."
# Download and extract the manifest nuget package.
curl -s -o $TMPDIR/manifest.zip -L https://www.nuget.org/api/v2/package/$MANIFEST_NAME/$MANIFEST_VERSION
unzip -qq -d $TMPDIR/unzipped $TMPDIR/manifest.zip
if [ ! -d $TMPDIR/unzipped/data ]; then
echo "No such files to install."
return
fi
chmod 744 $TMPDIR/unzipped/data/*
# Copy manifest files to dotnet sdk.
mkdir -p $SDK_MANIFESTS_DIR/samsung.net.sdk.tizen
cp -f $TMPDIR/unzipped/data/* $SDK_MANIFESTS_DIR/samsung.net.sdk.tizen/
if [ ! -f $SDK_MANIFESTS_DIR/samsung.net.sdk.tizen/WorkloadManifest.json ]; then
echo "Installation is failed."
return
fi
# Install workload packs.
if [ -f global.json ]; then
CACHE_GLOBAL_JSON="true"
mv global.json global.json.bak
else
CACHE_GLOBAL_JSON="false"
fi
dotnet new globaljson --sdk-version $DOTNET_VERSION
$DOTNET_INSTALL_DIR/dotnet workload install tizen --skip-manifest-update
# Clean-up
rm -fr $TMPDIR
rm global.json
if [[ "$CACHE_GLOBAL_JSON" == "true" ]]; then
mv global.json.bak global.json
fi
echo "Done installing Tizen workload $MANIFEST_VERSION"
echo ""
}
if [[ "$UPDATE_ALL_WORKLOADS" == "true" ]]; then
INSTALLED_DOTNET_SDKS=$($DOTNET_COMMAND --list-sdks | sed -n '/^6\|^7/p' | sed 's/ \[.*//g')
else
INSTALLED_DOTNET_SDKS=$($DOTNET_COMMAND --version)
fi
if [ -z "$INSTALLED_DOTNET_SDKS" ]; then
echo ".NET SDK version 6 or later is required to install Tizen Workload."
else
for DOTNET_SDK in $INSTALLED_DOTNET_SDKS; do
echo "Check Tizen Workload for sdk $DOTNET_SDK."
install_tizenworkload $DOTNET_SDK
done
fi
echo "DONE"