summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-12-03 00:26:46 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2021-12-03 00:26:46 -0500
commit181508084b5bb2bb7b8cd61ec3193a293300ba45 (patch)
treeb4fab17d3ddba8a677f3889693230ff7a7dbaaa0
parentbf5a9b87627b04523c7885b503e85ca2021c63a3 (diff)
downloadSMAPI-181508084b5bb2bb7b8cd61ec3193a293300ba45.tar.gz
SMAPI-181508084b5bb2bb7b8cd61ec3193a293300ba45.tar.bz2
SMAPI-181508084b5bb2bb7b8cd61ec3193a293300ba45.zip
make installer self-contained
This lets players run the installer without manually installing .NET 5, which was causing a lot of support requests.
-rwxr-xr-xbuild/prepare-install-package.sh41
-rw-r--r--docs/release-notes.md3
-rw-r--r--src/SMAPI.Installer/assets/README.txt18
-rw-r--r--src/SMAPI.Installer/assets/install on Linux.sh4
-rw-r--r--src/SMAPI.Installer/assets/install on Windows.bat (renamed from src/SMAPI.Installer/assets/windows-install.bat)37
-rw-r--r--src/SMAPI.Installer/assets/install on macOS.command6
-rw-r--r--src/SMAPI.Installer/assets/unix-install.sh14
7 files changed, 53 insertions, 70 deletions
diff --git a/build/prepare-install-package.sh b/build/prepare-install-package.sh
index c16fcd5f..2d03ba82 100755
--- a/build/prepare-install-package.sh
+++ b/build/prepare-install-package.sh
@@ -3,12 +3,15 @@
##########
## Constants
##########
+# paths
gamePath="/home/pathoschild/Stardew Valley"
bundleModNames=("ConsoleCommands" "ErrorHandler" "SaveBackup")
+
+# build configuration
buildConfig="Release"
-folders=("unix" "windows")
-declare -A runtimes=(["unix"]="linux-x64" ["windows"]="win-x64")
-declare -A msBuildPlatformNames=(["unix"]="Unix" ["windows"]="Windows_NT")
+folders=("linux" "macOS" "windows")
+declare -A runtimes=(["linux"]="linux-x64" ["macOS"]="osx-x64" ["windows"]="win-x64")
+declare -A msBuildPlatformNames=(["linux"]="Unix" ["macOS"]="OSX" ["windows"]="Windows_NT")
##########
@@ -44,7 +47,7 @@ for folder in ${folders[@]}; do
echo "Compiling installer for $folder..."
echo "----------------------"
- dotnet publish src/SMAPI.Installer --configuration $buildConfig -v minimal --runtime "$runtime" -p:OS="$msbuildPlatformName" -p:GamePath="$gamePath" -p:CopyToGameFolder="false"
+ dotnet publish src/SMAPI.Installer --configuration $buildConfig -v minimal --runtime "$runtime" -p:OS="$msbuildPlatformName" -p:GamePath="$gamePath" -p:CopyToGameFolder="false" -p:PublishTrimmed=True -p:TrimMode=Link --self-contained true
echo ""
echo ""
@@ -75,29 +78,32 @@ for folder in ${folders[@]}; do
done
# copy base installer files
-cp "$installAssets/unix-install.sh" "$packagePath/install on Linux.sh"
-cp "$installAssets/unix-install.sh" "$packagePath/install on macOS.command"
-cp "$installAssets/windows-install.bat" "$packagePath/install on Windows.bat"
-cp "$installAssets/README.txt" "$packagePath/README.txt"
+for name in "install on Linux.sh" "install on macOS.command" "install on Windows.bat" "README.txt"; do
+ cp "$installAssets/$name" "$packagePath/$name"
+done
# copy per-platform files
for folder in ${folders[@]}; do
runtime=${runtimes[$folder]}
# get paths
- installBin="src/SMAPI.Installer/bin/$buildConfig/$runtime"
- smapiBin="src/SMAPI/bin/$buildConfig/$runtime"
+ smapiBin="src/SMAPI/bin/$buildConfig/$runtime/publish"
internalPath="$packagePath/internal/$folder"
bundlePath="$internalPath/bundle"
- # runtime config for installer
- cp "$installBin/SMAPI.Installer.runtimeconfig.json" "$internalPath/SMAPI.Installer.runtimeconfig.json"
+ # installer files
+ cp -r "src/SMAPI.Installer/bin/$buildConfig/$runtime/publish"/* "$internalPath"
+ rm -rf "$internalPath/ref"
+ rm -rf "$internalPath/assets"
# runtime config for SMAPI
- cp "$installAssets/runtimeconfig.$folder.json" "$bundlePath/StardewModdingAPI.runtimeconfig.json"
+ if [ $folder == "linux" ] || [ $folder == "macOS" ]; then
+ cp "$installAssets/runtimeconfig.unix.json" "$bundlePath/StardewModdingAPI.runtimeconfig.json"
+ else
+ cp "$installAssets/runtimeconfig.$folder.json" "$bundlePath/StardewModdingAPI.runtimeconfig.json"
+ fi
- # installer DLL
- cp "$installBin/SMAPI.Installer.dll" "$internalPath/SMAPI.Installer.dll"
+ # installer DLL config
if [ $folder == "windows" ]; then
cp "$installAssets/windows-exe-config.xml" "$packagePath/internal/windows/install.exe.config"
fi
@@ -121,7 +127,7 @@ for folder in ${folders[@]}; do
cp "$smapiBin/SMAPI.config.json" "$bundlePath/smapi-internal/config.json"
cp "$smapiBin/SMAPI.metadata.json" "$bundlePath/smapi-internal/metadata.json"
- if [ $folder == "unix" ]; then
+ if [ $folder == "linux" ] || [ $folder == "macOS" ]; then
cp "$installAssets/unix-launcher.sh" "$bundlePath/unix-launcher.sh"
cp "$smapiBin/System.Runtime.Caching.dll" "$bundlePath/smapi-internal/System.Runtime.Caching.dll"
else
@@ -138,7 +144,7 @@ for folder in ${folders[@]}; do
# copy bundled mods
for modName in ${bundleModNames[@]}; do
- fromPath="src/SMAPI.Mods.$modName/bin/$buildConfig/$runtime"
+ fromPath="src/SMAPI.Mods.$modName/bin/$buildConfig/$runtime/publish"
targetPath="$bundlePath/Mods/$modName"
mkdir "$targetPath" --parents
@@ -190,7 +196,6 @@ fi
mv "$packagePath" "bin/SMAPI $version installer"
mv "$packageDevPath" "bin/SMAPI $version installer for developers"
-
# package files
pushd bin > /dev/null
zip -9 "SMAPI $version installer.zip" "SMAPI $version installer" --recurse-paths --quiet
diff --git a/docs/release-notes.md b/docs/release-notes.md
index cb52f814..09bbf832 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -2,6 +2,9 @@
# Release notes
## Upcoming version
+* For players:
+ * You no longer need .NET 5 to run the SMAPI installer.
+
* For SMAPI maintainers:
* Added a new [scripted release package process](technical/smapi.md), which removes the need to compile SMAPI on multiple platforms and manually combine them.
diff --git a/src/SMAPI.Installer/assets/README.txt b/src/SMAPI.Installer/assets/README.txt
index 5c20529a..08e99887 100644
--- a/src/SMAPI.Installer/assets/README.txt
+++ b/src/SMAPI.Installer/assets/README.txt
@@ -14,22 +14,27 @@
SMAPI lets you run Stardew Valley with mods. Don't forget to download mods separately.
-Player's guide
+Automated install
--------------------------------
See https://stardewvalleywiki.com/Modding:Player_Guide for help installing SMAPI, adding mods, etc.
Manual install
--------------------------------
-THIS IS NOT RECOMMENDED FOR MOST PLAYERS. See instructions above instead.
+THIS IS NOT RECOMMENDED FOR MOST PLAYERS. See the instructions above instead.
If you really want to install SMAPI manually, here's how.
-1. Unzip "internal/windows/install.dat" (on Windows) or "internal/unix/install.dat" (on
- Linux/macOS). You can change '.dat' to '.zip', it's just a normal zip file renamed to prevent
+1. Unzip "internal/windows/install.dat" (on Windows) or "internal/unix/install.dat" (on Linux or
+ macOS). You can change '.dat' to '.zip', it's just a normal zip file renamed to prevent
confusion.
+
2. Copy the files from the folder you just unzipped into your game folder. The
`StardewModdingAPI.exe` file should be right next to the game's executable.
-3.
+
+3. Copy `Stardew Valley.deps.json` in the game folder, and rename the copy to
+ `StardewModdingAPI.deps.json`.
+
+4.
- Windows only: if you use Steam, see the install guide above to enable achievements and
overlay. Otherwise, just run StardewModdingAPI.exe in your game folder to play with mods.
@@ -38,8 +43,5 @@ If you really want to install SMAPI manually, here's how.
play with mods.
When installing on Linux or macOS:
-- Make sure Mono is installed (normally the installer checks for you). While it's not required,
- many mods won't work correctly without it. (Specifically, mods which load PNG images may crash or
- freeze the game.)
- To configure the color scheme, edit the `smapi-internal/config.json` file and see instructions
there for the 'ColorScheme' setting.
diff --git a/src/SMAPI.Installer/assets/install on Linux.sh b/src/SMAPI.Installer/assets/install on Linux.sh
new file mode 100644
index 00000000..3b7eae9c
--- /dev/null
+++ b/src/SMAPI.Installer/assets/install on Linux.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd "`dirname "$0"`"
+internal/linux/SMAPI.Installer
diff --git a/src/SMAPI.Installer/assets/windows-install.bat b/src/SMAPI.Installer/assets/install on Windows.bat
index e34b9554..b0d9ae81 100644
--- a/src/SMAPI.Installer/assets/windows-install.bat
+++ b/src/SMAPI.Installer/assets/install on Windows.bat
@@ -12,47 +12,24 @@ if %ERRORLEVEL% EQU 0 (
exit
)
-REM make sure .NET 5 is installed
-SET hasNet5=1
-WHERE dotnet /q
-if !ERRORLEVEL! NEQ 0 (
- SET hasNet5=0
-) else (
- dotnet --info | findstr /C:"Microsoft.WindowsDesktop.App 5." 1>nul
- if !ERRORLEVEL! NEQ 0 (
- SET hasNet5=0
- )
-)
-if "%hasNet5%" == "0" (
- echo Oops! You don't have the required .NET version installed.
- echo.
- echo To install it:
- echo 1. Go to https://dotnet.microsoft.com/download/dotnet/5.0/runtime
-
- if "%PROCESSOR_ARCHITECTURE%" == "ARM64" (
- echo 2. Under "Run desktop apps", click "Download Arm64".
- ) else (
- echo 2. Under "Run desktop apps", click "Download x64".
- )
-
- echo 3. Run the downloaded installer.
- echo 4. Restart your computer.
+REM make sure an antivirus hasn't deleted the installer DLL
+if not exist %installerDir%"internal\windows\SMAPI.Installer.dll" (
+ echo Oops! SMAPI is missing one of its files. Your antivirus might have deleted it.
+ echo Missing file: %installerDir%internal\windows\SMAPI.Installer.dll
echo.
pause
exit
)
-
-REM make sure an antivirus hasn't deleted the installer DLL
-if not exist %installerDir%"internal\windows\SMAPI.Installer.dll" (
+if not exist %installerDir%"internal\windows\SMAPI.Installer.exe" (
echo Oops! SMAPI is missing one of its files. Your antivirus might have deleted it.
- echo Missing file: %installerDir%internal\windows\SMAPI.Installer.dll
+ echo Missing file: %installerDir%internal\windows\SMAPI.Installer.exe
echo.
pause
exit
)
REM start installer
-dotnet internal\windows\SMAPI.Installer.dll
+internal\windows\SMAPI.Installer.exe
REM keep window open if it failed
if %ERRORLEVEL% NEQ 0 (
diff --git a/src/SMAPI.Installer/assets/install on macOS.command b/src/SMAPI.Installer/assets/install on macOS.command
new file mode 100644
index 00000000..abd21dc8
--- /dev/null
+++ b/src/SMAPI.Installer/assets/install on macOS.command
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+cd "`dirname "$0"`"
+
+xattr -r -d com.apple.quarantine internal
+internal/macOS/SMAPI.Installer
diff --git a/src/SMAPI.Installer/assets/unix-install.sh b/src/SMAPI.Installer/assets/unix-install.sh
deleted file mode 100644
index 07df4e6c..00000000
--- a/src/SMAPI.Installer/assets/unix-install.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-# Move to script's directory
-cd "`dirname "$0"`"
-
-# make sure .NET 5 is installed
-if ! command -v dotnet >/dev/null 2>&1; then
- echo "Oops! You must have .NET 5 installed to use SMAPI: https://dotnet.microsoft.com/download";
- read
- exit 1
-fi
-
-# run installer
-dotnet internal/unix/SMAPI.Installer.dll