forked from Kareadita/Kavita
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.sh
executable file
·149 lines (119 loc) · 3.44 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
#! /bin/bash
set -e
outputFolder='_output'
CheckRequirements()
{
if ! command -v npm &> /dev/null
then
echo "Warning!!! npm not found, it is required for building Kavita!"
fi
if ! command -v dotnet &> /dev/null
then
echo "Warning!!! dotnet not found, it is required for building Kavita!"
fi
}
ProgressStart()
{
echo "Start '$1'"
}
ProgressEnd()
{
echo "Finish '$1'"
}
UpdateVersionNumber()
{
# TODO: Read from KavitaCommon and update in Info.plist
if [ "$KAVITAVERSION" != "" ]; then
echo "Updating Version Info"
sed -i'' -e "s/<AssemblyVersion>[0-9.*]\+<\/AssemblyVersion>/<AssemblyVersion>$KAVITAVERSION<\/AssemblyVersion>/g" src/Directory.Build.props
sed -i'' -e "s/<AssemblyConfiguration>[\$()A-Za-z-]\+<\/AssemblyConfiguration>/<AssemblyConfiguration>${BUILD_SOURCEBRANCHNAME}<\/AssemblyConfiguration>/g" src/Directory.Build.props
sed -i'' -e "s/<string>10.0.0.0<\/string>/<string>$KAVITAVERSION<\/string>/g" macOS/Kavita.app/Contents/Info.plist
fi
}
Build()
{
ProgressStart 'Build'
rm -rf $outputFolder
slnFile=Kavita.sln
dotnet clean $slnFile -c Release
if [[ -z "$RID" ]];
then
dotnet msbuild -restore $slnFile -p:Configuration=Release -p:Platform="Any CPU"
else
dotnet msbuild -restore $slnFile -p:Configuration=Release -p:Platform="Any CPU" -p:RuntimeIdentifiers=$RID
fi
ProgressEnd 'Build'
}
BuildUI()
{
ProgressStart 'Building UI'
echo 'Removing old wwwroot'
rm -rf API/wwwroot/*
cd UI/Web/ || exit
echo 'Installing web dependencies'
npm ci --legacy-peer-deps
echo 'Building UI'
npm run prod
echo 'Copying back to Kavita wwwroot'
mkdir -p ../../API/wwwroot
cp -R dist/* ../../API/wwwroot
cd ../../ || exit
ProgressEnd 'Building UI'
}
Package()
{
local runtime="$1"
local lOutputFolder=../_output/"$runtime"/Kavita
ProgressStart "Creating $runtime Package"
# TODO: Use no-restore? Because Build should have already done it for us
echo "Building"
cd API
echo dotnet publish -c Release --self-contained --runtime $runtime -o "$lOutputFolder"
dotnet publish -c Release --self-contained --runtime $runtime -o "$lOutputFolder"
echo "Recopying wwwroot due to bug"
cp -R ./wwwroot/* $lOutputFolder/wwwroot
echo "Copying Install information"
cp ../INSTALL.txt "$lOutputFolder"/README.txt
echo "Copying LICENSE"
cp ../LICENSE "$lOutputFolder"/LICENSE.txt
echo "Renaming API -> Kavita"
if [ $runtime == "win-x64" ] || [ $runtime == "win-x86" ]
then
mv "$lOutputFolder"/API.exe "$lOutputFolder"/Kavita.exe
else
mv "$lOutputFolder"/API "$lOutputFolder"/Kavita
fi
echo "Copying appsettings.json"
cp config/appsettings.json $lOutputFolder/config/appsettings.json
echo "Removing appsettings.Development.json"
rm $lOutputFolder/config/appsettings.Development.json
echo "Creating tar"
cd ../$outputFolder/"$runtime"/
tar -czvf ../kavita-$runtime.tar.gz Kavita
ProgressEnd "Creating $runtime Package"
}
RID="$1"
CheckRequirements
BuildUI
Build
dir=$PWD
if [[ -z "$RID" ]];
then
Package "win-x64"
cd "$dir"
Package "win-x86"
cd "$dir"
Package "linux-x64"
cd "$dir"
Package "linux-arm"
cd "$dir"
Package "linux-arm64"
cd "$dir"
Package "linux-musl-x64"
cd "$dir"
Package "osx-x64"
cd "$dir"
else
Package "$RID"
cd "$dir"
fi