diff --git a/.gitignore b/.gitignore
index f80c762de..59b1114f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -451,4 +451,6 @@ appsettings.json
cache/
/API/wwwroot/
/API/cache/
-/API/temp/
\ No newline at end of file
+/API/temp/
+_temp/
+_output/
\ No newline at end of file
diff --git a/API/API.csproj b/API/API.csproj
index b3ac07324..0a8cfeb3b 100644
--- a/API/API.csproj
+++ b/API/API.csproj
@@ -16,8 +16,8 @@
-
-
+
+
all
diff --git a/INSTALL.txt b/INSTALL.txt
new file mode 100644
index 000000000..5d052dccd
--- /dev/null
+++ b/INSTALL.txt
@@ -0,0 +1,4 @@
+How to Install
+1. Unzip the archive to a directory that is writable. If on windows, do not place in Program Files
+2. Open appsettings.json and modify TokenKey to a random string ideally generated from https://passwordsgenerator.net/
+3. Run Kavita executable
\ No newline at end of file
diff --git a/README.md b/README.md
index 9a8dee63e..607bd1f04 100644
--- a/README.md
+++ b/README.md
@@ -13,12 +13,11 @@ Think: ***Plex but for Manga.***
## How to Deploy
-* Build kavita-webui via ng build --prod. The dest should be placed in the API/wwwroot directory
-* Run publish command
+- Run build.sh and pass the Runtime Identifier for your OS or just build.sh for all supported RIDs.
## How to install
1. Unzip the archive for your target OS
2. Place in a directory that is writable. If on windows, do not place in Program Files
3. Open appsettings.json and modify TokenKey to a random string ideally generated from [https://passwordsgenerator.net/](https://passwordsgenerator.net/)
-4. Run API.exe
+4. Run Kavita
diff --git a/build.sh b/build.sh
new file mode 100644
index 000000000..22a8d09fe
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,107 @@
+#! /bin/bash
+set -e
+
+outputFolder='_output'
+
+ProgressStart()
+{
+ echo "Start '$1'"
+}
+
+ProgressEnd()
+{
+ echo "Finish '$1'"
+}
+
+UpdateVersionNumber()
+{
+ if [ "$KAVITAVERSION" != "" ]; then
+ echo "Updating Version Info"
+ sed -i'' -e "s/[0-9.*]\+<\/AssemblyVersion>/$KAVITAVERSION<\/AssemblyVersion>/g" src/Directory.Build.props
+ sed -i'' -e "s/[\$()A-Za-z-]\+<\/AssemblyConfiguration>/${BUILD_SOURCEBRANCHNAME}<\/AssemblyConfiguration>/g" src/Directory.Build.props
+# sed -i'' -e "s/10.0.0.0<\/string>/$KAVITAVERSION<\/string>/g" macOS/Kavita.app/Contents/Info.plist
+ fi
+}
+
+Build()
+{
+ ProgressStart 'Build'
+
+ rm -rf $outputFolder
+
+ slnFile=Kavita.sln
+
+ dotnet clean $slnFile -c Debug
+ 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'
+ cd ../kavita-webui/ || exit
+ npm install
+ npm run prod
+ cd ../kavita/ || exit
+ ProgressEnd 'Building UI'
+}
+
+Package()
+{
+ local framework="$1"
+ local runtime="$2"
+ local lOutputFolder=../_output/"$runtime"/Kavita
+
+ ProgressStart "Creating $runtime Package for $framework"
+
+ BuildUI
+
+ echo "Building"
+ cd API
+ echo dotnet publish -c release --self-contained --runtime $runtime -o "$lOutputFolder" --framework $framework
+ dotnet publish -c release --self-contained --runtime $runtime -o "$lOutputFolder" --framework $framework
+
+ echo "Copying Install information"
+ cp ../INSTALL.txt "$lOutputFolder"/README.txt
+
+ echo "Renaming API -> Kavita"
+ mv "$lOutputFolder"/API "$lOutputFolder"/Kavita
+
+ echo "Creating tar"
+ cd ../$outputFolder/"$runtime"/
+ tar -czvf ../kavita-$runtime.tar.gz Kavita
+
+
+ ProgressEnd "Creating $runtime Package for $framework"
+
+
+}
+
+
+#UpdateVersionNumber
+
+RID="$1"
+
+Build
+
+if [[ -z "$RID" ]];
+then
+ Package "net5.0" "win-x64"
+ Package "net5.0" "win-x86"
+ Package "net5.0" "linux-x64"
+ Package "net5.0" "linux-musl-x64"
+ Package "net5.0" "osx-x64"
+else
+ Package "net5.0" "$RID"
+fi
+
+
+