-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathbuild.sh
executable file
·175 lines (139 loc) · 3.78 KB
/
build.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
#!/bin/bash
set -e
version=${1:?Input version}
outDir=$(realpath pack)
if [[ "$2" == "--push" ]]; then
source=${3:?--push <source> <api key>}
apiKey=${4:?--push <source> <api key>}
fi
function normalize_os {
case "$1" in
"darwin")
echo "osx"
;;
"windows")
echo "win"
;;
"linux")
echo "$1"
;;
*)
echo "Unknown os '$1'" >&2
exit 1
;;
esac
}
function normalize_architecture {
case "$1" in
"aarch64")
echo "arm64"
;;
"x86_64")
echo "x64"
;;
"x86"|"x64"|"arm64")
echo "$1"
;;
*)
echo "Unknown architecture '$1'" >&2
exit 1
;;
esac
}
function to_lower {
echo $1 | tr '[:upper:]' '[:lower:]'
}
function openjre_get_release_value {
local release="$1/obj/openjre/release"
local value=$(grep "$2=" $release | cut -d'=' -f2)
echo $value | perl -pe 's/["\r\n\t\f\v]//g'
}
function openjre_verify {
local path=$1
local csproj="$path/$(basename $runtime).csproj"
echo "[openjre] verify runtime identifier"
local name=$(to_lower "$(openjre_get_release_value $path OS_NAME)")
local arch=$(to_lower "$(openjre_get_release_value $path OS_ARCH)")
local normalizedName=$(normalize_os $name)
local normalizedArch=$(normalize_architecture $arch)
if [[ "$normalizedName" == "linux" ]]; then
local libc=$(to_lower "$(openjre_get_release_value $path LIBC)")
if [[ "$libc" == "musl" ]]; then
normalizedName="linux-musl"
fi
fi
echo "[openjre] platform: $normalizedName ($name)"
echo "[openjre] architecture: $normalizedArch ($arch)"
local actualRID="$normalizedName-$normalizedArch"
local expectedRID=$(awk -v FS="(>|<)" '/<RuntimeIdentifier>/ {print $3}' $csproj)
if [[ "$expectedRID" != "$actualRID" ]]; then
echo "Expected runtime identifier is '$expectedRID' but was '$actualRID'" >&2
exit 1
fi
}
function dotnet_restore {
local path=$1
pushd $path > /dev/null
echo "[dotnet] restore"
dotnet restore --no-cache
popd > /dev/null
}
function dotnet_pack {
local path=$1
pushd $path > /dev/null
echo "[dotnet] pack"
dotnet pack -c Release -o $outDir -p:Version=$version --nologo --no-restore ${@:2}
popd > /dev/null
}
function dotnet_nuget_push {
local nupkg=$1
local source=$2
local apiKey=$3
echo "[dotnet] $nupkg push to $source"
dotnet nuget push $nupkg --source $source --api-key $apiKey
}
function nupkg_remove_lib {
local project="$(basename $1)"
local nupkg="$project.$version.nupkg"
local tmpDir="$nupkg.tmp"
local nuspec="$tmpDir/$project.nuspec"
pushd $outDir > /dev/null
echo "[nupkg] patch $nupkg"
# Unzip
echo "[nupkg] unpack"
unzip $nupkg -d $tmpDir 1> /dev/null
# Patch .nuspec
echo "[nupkg] remove 'dependencies' tag"
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' '/<dependencies>/,/<\/dependencies>/d' "$nuspec"
else
sed -i '/<dependencies>/,/<\/dependencies>/d' "$nuspec"
fi
# Remove lib
echo "[nupkg] remove 'lib/*' dir"
rm -rf $tmpDir/lib
# Zip
rm $nupkg
cd $tmpDir
zip -r ../$nupkg . -x '**/__MACOSX' -x '**/.DS_Store' 1> /dev/null
rm -rf ../$tmpDir
echo "[nupkg] repack"
popd > /dev/null
}
rm -rf $outDir
for runtime in src/runtimes/J2NET.Runtime.* ; do
echo " ** $runtime ** "
dotnet_restore $runtime
openjre_verify $runtime
dotnet_pack $runtime -p:JREVersion="$(openjre_get_release_value $runtime IMPLEMENTOR_VERSION)"
nupkg_remove_lib $runtime
echo
done
echo " ** J2NET ** "
dotnet_restore src/J2NET
dotnet_pack src/J2NET
if [[ "$2" == "--push" ]]; then
for nupkg in $outDir/*.nupkg ; do
dotnet_nuget_push $nupkg $source $apiKey
done
fi