diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2021-12-02 20:48:00 -0500 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2021-12-02 20:48:00 -0500 |
commit | bf5a9b87627b04523c7885b503e85ca2021c63a3 (patch) | |
tree | 7dd0d2ab294dbce7711006a28400df1f6512d192 | |
parent | c10685b03574e967c1bf48aafc814f60196812ec (diff) | |
download | SMAPI-bf5a9b87627b04523c7885b503e85ca2021c63a3.tar.gz SMAPI-bf5a9b87627b04523c7885b503e85ca2021c63a3.tar.bz2 SMAPI-bf5a9b87627b04523c7885b503e85ca2021c63a3.zip |
switch to scripted release package process
-rw-r--r-- | build/common.targets | 3 | ||||
-rwxr-xr-x | build/prepare-install-package.sh | 201 | ||||
-rw-r--r-- | build/prepare-install-package.targets | 130 | ||||
-rw-r--r-- | docs/release-notes.md | 9 | ||||
-rw-r--r-- | docs/technical/smapi.md | 58 | ||||
-rw-r--r-- | src/SMAPI.Installer/SMAPI.Installer.csproj | 1 | ||||
-rw-r--r-- | src/SMAPI.sln | 6 |
7 files changed, 238 insertions, 170 deletions
diff --git a/build/common.targets b/build/common.targets index 578076a9..c9a54763 100644 --- a/build/common.targets +++ b/build/common.targets @@ -8,6 +8,7 @@ <!--set platform--> <DefineConstants Condition="$(OS) == 'Windows_NT'">$(DefineConstants);SMAPI_FOR_WINDOWS</DefineConstants> + <CopyToGameFolder>true</CopyToGameFolder> </PropertyGroup> <!--find game folder--> @@ -19,7 +20,7 @@ </Target> <!-- copy files into game directory and enable debugging --> - <Target Name="CopySmapiFiles" AfterTargets="AfterBuild"> + <Target Name="CopySmapiFiles" AfterTargets="AfterBuild" Condition="'$(CopyToGameFolder)' == 'true'"> <CallTarget Targets="CopySMAPI;CopyDefaultMods" /> </Target> <Target Name="CopySMAPI" Condition="'$(MSBuildProjectName)' == 'SMAPI'"> diff --git a/build/prepare-install-package.sh b/build/prepare-install-package.sh new file mode 100755 index 00000000..c16fcd5f --- /dev/null +++ b/build/prepare-install-package.sh @@ -0,0 +1,201 @@ +#!/bin/bash + +########## +## Constants +########## +gamePath="/home/pathoschild/Stardew Valley" +bundleModNames=("ConsoleCommands" "ErrorHandler" "SaveBackup") +buildConfig="Release" +folders=("unix" "windows") +declare -A runtimes=(["unix"]="linux-x64" ["windows"]="win-x64") +declare -A msBuildPlatformNames=(["unix"]="Unix" ["windows"]="Windows_NT") + + +########## +## Move to SMAPI root +########## +cd "`dirname "$0"`/.." + + +########## +## Clear old build files +########## +echo "Clearing old builds..." +echo "-----------------------" +for path in */**/bin */**/obj; do + rm -rf $path +done +rm -rf "bin" +echo "" + +########## +## Compile files +########## +for folder in ${folders[@]}; do + runtime=${runtimes[$folder]} + msbuildPlatformName=${msBuildPlatformNames[$folder]} + + # SMAPI + echo "Compiling SMAPI for $folder..." + echo "------------------" + dotnet publish src/SMAPI --configuration $buildConfig -v minimal --runtime "$runtime" -p:OS="$msbuildPlatformName" -p:GamePath="$gamePath" -p:CopyToGameFolder="false" + echo "" + echo "" + + 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" + echo "" + echo "" + + for modName in ${bundleModNames[@]}; do + echo "Compiling $modName for $folder..." + echo "----------------------------------" + dotnet publish src/SMAPI.Mods.$modName --configuration $buildConfig -v minimal --runtime "$runtime" -p:OS="$msbuildPlatformName" -p:GamePath="$gamePath" -p:CopyToGameFolder="false" + echo "" + echo "" + done +done + + +########## +## Prepare install package +########## +echo "Preparing install package..." +echo "----------------------------" + +# init paths +installAssets="src/SMAPI.Installer/assets" +packagePath="bin/SMAPI installer" +packageDevPath="bin/SMAPI installer for developers" + +# init structure +for folder in ${folders[@]}; do + mkdir "$packagePath/internal/$folder/bundle/smapi-internal" --parents +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" + +# 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" + internalPath="$packagePath/internal/$folder" + bundlePath="$internalPath/bundle" + + # runtime config for installer + cp "$installBin/SMAPI.Installer.runtimeconfig.json" "$internalPath/SMAPI.Installer.runtimeconfig.json" + + # runtime config for SMAPI + cp "$installAssets/runtimeconfig.$folder.json" "$bundlePath/StardewModdingAPI.runtimeconfig.json" + + # installer DLL + cp "$installBin/SMAPI.Installer.dll" "$internalPath/SMAPI.Installer.dll" + if [ $folder == "windows" ]; then + cp "$installAssets/windows-exe-config.xml" "$packagePath/internal/windows/install.exe.config" + fi + + # bundle root files + for name in "StardewModdingAPI" "StardewModdingAPI.dll" "StardewModdingAPI.pdb" "StardewModdingAPI.xml" "steam_appid.txt"; do + if [ $name == "StardewModdingAPI" ] && [ $folder == "windows" ]; then + name="$name.exe" + fi + + cp "$smapiBin/$name" "$bundlePath/$name" + done + + # bundle i18n + cp -r "$smapiBin/i18n" "$bundlePath/smapi-internal" + + # bundle smapi-internal + for name in "0Harmony.dll" "0Harmony.xml" "Mono.Cecil.dll" "Mono.Cecil.Mdb.dll" "Mono.Cecil.Pdb.dll" "MonoMod.Common.dll" "Newtonsoft.Json.dll" "TMXTile.dll" "SMAPI.Toolkit.dll" "SMAPI.Toolkit.pdb" "SMAPI.Toolkit.xml" "SMAPI.Toolkit.CoreInterfaces.dll" "SMAPI.Toolkit.CoreInterfaces.pdb" "SMAPI.Toolkit.CoreInterfaces.xml"; do + cp "$smapiBin/$name" "$bundlePath/smapi-internal/$name" + done + + cp "$smapiBin/SMAPI.config.json" "$bundlePath/smapi-internal/config.json" + cp "$smapiBin/SMAPI.metadata.json" "$bundlePath/smapi-internal/metadata.json" + if [ $folder == "unix" ]; then + cp "$installAssets/unix-launcher.sh" "$bundlePath/unix-launcher.sh" + cp "$smapiBin/System.Runtime.Caching.dll" "$bundlePath/smapi-internal/System.Runtime.Caching.dll" + else + cp "$installAssets/windows-exe-config.xml" "$bundlePath/StardewModdingAPI.exe.config" + fi + + # copy .NET dependencies + cp "$smapiBin/System.Configuration.ConfigurationManager.dll" "$bundlePath/smapi-internal/System.Configuration.ConfigurationManager.dll" + cp "$smapiBin/System.Runtime.Caching.dll" "$bundlePath/smapi-internal/System.Runtime.Caching.dll" + cp "$smapiBin/System.Security.Permissions.dll" "$bundlePath/smapi-internal/System.Security.Permissions.dll" + if [ $folder == "windows" ]; then + cp "$smapiBin/System.Management.dll" "$bundlePath/smapi-internal/System.Management.dll" + fi + + # copy bundled mods + for modName in ${bundleModNames[@]}; do + fromPath="src/SMAPI.Mods.$modName/bin/$buildConfig/$runtime" + targetPath="$bundlePath/Mods/$modName" + + mkdir "$targetPath" --parents + + cp "$fromPath/$modName.dll" "$targetPath/$modName.dll" + cp "$fromPath/$modName.pdb" "$targetPath/$modName.pdb" + cp "$fromPath/manifest.json" "$targetPath/manifest.json" + if [ -d "$fromPath/i18n" ]; then + cp -r "$fromPath/i18n" "$targetPath" + fi + done +done + +# mark scripts executable +for path in "install on Linux.sh" "install on macOS.command" "bundle/unix-launcher.sh"; do + if [ -f "$packagePath/$path" ]; then + chmod 755 "$packagePath/$path" + fi +done + +# split into main + for-dev folders +cp -r "$packagePath" "$packageDevPath" +for folder in ${folders[@]}; do + # disable developer mode in main package + sed --in-place --expression="s/\"DeveloperMode\": true/\"DeveloperMode\": false/" "$packagePath/internal/$folder/bundle/smapi-internal/config.json" + + # convert bundle folder into final 'install.dat' files + for path in "$packagePath/internal/$folder" "$packageDevPath/internal/$folder"; do + pushd "$path/bundle" > /dev/null + zip "install.dat" * --recurse-paths --quiet + popd > /dev/null + mv "$path/bundle/install.dat" "$path/install.dat" + rm -rf "$path/bundle" + done +done + + +########## +## Create release zips +########## +# get version number +version="$1" +if [ $# -eq 0 ]; then + echo "SMAPI release version (like '4.0.0'):" + read version +fi + +# rename folders +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 +zip -9 "SMAPI $version installer for developers.zip" "SMAPI $version installer for developers" --recurse-paths --quiet +popd > /dev/null + +echo "" +echo "Done! Package created in $(pwd)/bin" diff --git a/build/prepare-install-package.targets b/build/prepare-install-package.targets deleted file mode 100644 index ef5624ad..00000000 --- a/build/prepare-install-package.targets +++ /dev/null @@ -1,130 +0,0 @@ -<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <!-- - - This build task is run from the installer project after all projects have been compiled, and - creates the build package in the bin\Packages folder. - - --> - <Target Name="PrepareInstaller" AfterTargets="AfterBuild"> - <PropertyGroup> - <PlatformName>windows</PlatformName> - <PlatformName Condition="$(OS) != 'Windows_NT'">unix</PlatformName> - - <BuildRootPath>$(SolutionDir)</BuildRootPath> - <OutRootPath>$(SolutionDir)\..\bin</OutRootPath> - - <SmapiBin>$(BuildRootPath)\SMAPI\bin\$(Configuration)</SmapiBin> - <ToolkitBin>$(BuildRootPath)\SMAPI.Toolkit\bin\$(Configuration)\net5.0</ToolkitBin> - <ConsoleCommandsBin>$(BuildRootPath)\SMAPI.Mods.ConsoleCommands\bin\$(Configuration)</ConsoleCommandsBin> - <ErrorHandlerBin>$(BuildRootPath)\SMAPI.Mods.ErrorHandler\bin\$(Configuration)</ErrorHandlerBin> - <SaveBackupBin>$(BuildRootPath)\SMAPI.Mods.SaveBackup\bin\$(Configuration)</SaveBackupBin> - - <PackagePath>$(OutRootPath)\SMAPI installer</PackagePath> - <PackageDevPath>$(OutRootPath)\SMAPI installer for developers</PackageDevPath> - </PropertyGroup> - <ItemGroup> - <TranslationFiles Include="$(SmapiBin)\i18n\*.json" /> - <ErrorHandlerTranslationFiles Include="$(ErrorHandlerBin)\i18n\*.json" /> - </ItemGroup> - - <!-- reset package directory --> - <RemoveDir Directories="$(PackagePath)" /> - <RemoveDir Directories="$(PackageDevPath)" /> - - <!-- copy installer files --> - <Copy SourceFiles="$(TargetDir)\assets\unix-install.sh" DestinationFiles="$(PackagePath)\install on Linux.sh" /> - <Copy SourceFiles="$(TargetDir)\assets\unix-install.sh" DestinationFiles="$(PackagePath)\install on macOS.command" /> - <Copy SourceFiles="$(TargetDir)\assets\windows-install.bat" DestinationFiles="$(PackagePath)\install on Windows.bat" /> - <Copy SourceFiles="$(TargetDir)\assets\README.txt" DestinationFolder="$(PackagePath)" /> - <Copy SourceFiles="$(TargetDir)\assets\windows-exe-config.xml" DestinationFiles="$(PackagePath)\internal\$(PlatformName)\install.exe.config" Condition="$(PlatformName) == 'windows'" /> - <Copy SourceFiles="$(TargetDir)\$(TargetName).dll" DestinationFolder="$(PackagePath)\internal\$(PlatformName)" /> - <Copy SourceFiles="$(TargetDir)\$(TargetName).runtimeconfig.json" DestinationFolder="$(PackagePath)\internal\$(PlatformName)" /> - - <!--copy bundle files--> - <Copy SourceFiles="$(TargetDir)\assets\runtimeconfig.$(PlatformName).json" DestinationFiles="$(PackagePath)\bundle\StardewModdingAPI.runtimeconfig.json" /> - <Copy SourceFiles="$(SmapiBin)\StardewModdingAPI.dll" DestinationFolder="$(PackagePath)\bundle" /> - <Copy SourceFiles="$(SmapiBin)\StardewModdingAPI.exe" DestinationFolder="$(PackagePath)\bundle" Condition="$(PlatformName) == 'windows'" /> - <Copy SourceFiles="$(SmapiBin)\StardewModdingAPI" DestinationFolder="$(PackagePath)\bundle" Condition="$(PlatformName) != 'windows'" /> - <Copy SourceFiles="$(SmapiBin)\StardewModdingAPI.pdb" DestinationFolder="$(PackagePath)\bundle" /> - <Copy SourceFiles="$(SmapiBin)\StardewModdingAPI.xml" DestinationFolder="$(PackagePath)\bundle" /> - <Copy SourceFiles="$(SmapiBin)\steam_appid.txt" DestinationFolder="$(PackagePath)\bundle" /> - <Copy SourceFiles="$(SmapiBin)\0Harmony.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\0Harmony.xml" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\Mono.Cecil.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\Mono.Cecil.Mdb.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\Mono.Cecil.Pdb.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\MonoMod.Common.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\Newtonsoft.Json.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\TMXTile.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\SMAPI.config.json" DestinationFiles="$(PackagePath)\bundle\smapi-internal\config.json" /> - <Copy SourceFiles="$(SmapiBin)\SMAPI.metadata.json" DestinationFiles="$(PackagePath)\bundle\smapi-internal\metadata.json" /> - <Copy SourceFiles="$(ToolkitBin)\SMAPI.Toolkit.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(ToolkitBin)\SMAPI.Toolkit.pdb" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(ToolkitBin)\SMAPI.Toolkit.xml" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(ToolkitBin)\SMAPI.Toolkit.CoreInterfaces.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(ToolkitBin)\SMAPI.Toolkit.CoreInterfaces.pdb" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(ToolkitBin)\SMAPI.Toolkit.CoreInterfaces.xml" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="@(TranslationFiles)" DestinationFolder="$(PackagePath)\bundle\smapi-internal\i18n" /> - <Copy Condition="$(PlatformName) == 'unix'" SourceFiles="$(TargetDir)\assets\unix-launcher.sh" DestinationFolder="$(PackagePath)\bundle" /> - <Copy Condition="$(PlatformName) == 'unix'" SourceFiles="$(SmapiBin)\System.Runtime.Caching.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy Condition="$(PlatformName) == 'windows'" SourceFiles="$(TargetDir)\assets\windows-exe-config.xml" DestinationFiles="$(PackagePath)\bundle\StardewModdingAPI.exe.config" /> - - <!-- copy .NET dependencies --> - <Copy SourceFiles="$(SmapiBin)\System.Configuration.ConfigurationManager.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\System.Management.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" Condition="$(PlatformName) == 'windows'" /> - <Copy SourceFiles="$(SmapiBin)\System.Runtime.Caching.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - <Copy SourceFiles="$(SmapiBin)\System.Security.Permissions.dll" DestinationFolder="$(PackagePath)\bundle\smapi-internal" /> - - <!--copy bundled mods--> - <Copy SourceFiles="$(ConsoleCommandsBin)\ConsoleCommands.dll" DestinationFolder="$(PackagePath)\bundle\Mods\ConsoleCommands" /> - <Copy SourceFiles="$(ConsoleCommandsBin)\ConsoleCommands.pdb" DestinationFolder="$(PackagePath)\bundle\Mods\ConsoleCommands" /> - <Copy SourceFiles="$(ConsoleCommandsBin)\manifest.json" DestinationFolder="$(PackagePath)\bundle\Mods\ConsoleCommands" /> - <Copy SourceFiles="$(ErrorHandlerBin)\ErrorHandler.dll" DestinationFolder="$(PackagePath)\bundle\Mods\ErrorHandler" /> - <Copy SourceFiles="$(ErrorHandlerBin)\ErrorHandler.pdb" DestinationFolder="$(PackagePath)\bundle\Mods\ErrorHandler" /> - <Copy SourceFiles="$(ErrorHandlerBin)\manifest.json" DestinationFolder="$(PackagePath)\bundle\Mods\ErrorHandler" /> - <Copy SourceFiles="@(ErrorHandlerTranslationFiles)" DestinationFolder="$(PackagePath)\bundle\Mods\ErrorHandler\i18n" /> - <Copy SourceFiles="$(SaveBackupBin)\SaveBackup.dll" DestinationFolder="$(PackagePath)\bundle\Mods\SaveBackup" /> - <Copy SourceFiles="$(SaveBackupBin)\SaveBackup.pdb" DestinationFolder="$(PackagePath)\bundle\Mods\SaveBackup" /> - <Copy SourceFiles="$(SaveBackupBin)\manifest.json" DestinationFolder="$(PackagePath)\bundle\Mods\SaveBackup" /> - - <!-- fix Linux/macOS permissions --> - <Exec Condition="$(PlatformName) == 'unix'" Command="chmod 755 "$(PackagePath)/install on Linux.sh"" /> - <Exec Condition="$(PlatformName) == 'unix'" Command="chmod 755 "$(PackagePath)/install on macOS.command"" /> - <Exec Condition="$(PlatformName) == 'unix'" Command="chmod 755 "$(PackagePath)/bundle/unix-launcher.sh"" /> - - <!-- finalise 'for developers' installer --> - <ItemGroup> - <PackageFiles Include="$(PackagePath)\**\*.*" /> - </ItemGroup> - <Copy SourceFiles="@(PackageFiles)" DestinationFolder="$(PackageDevPath)\%(RecursiveDir)" /> - <ZipDirectory SourceDirectory="$(PackageDevPath)\bundle" DestinationFile="$(PackageDevPath)\internal\$(PlatformName)\install.dat" /> - <RemoveDir Directories="$(PackageDevPath)\bundle" /> - - <!-- finalise normal installer --> - <ReplaceFileText FilePath="$(PackagePath)\bundle\smapi-internal\config.json" Search=""DeveloperMode": true" Replace=""DeveloperMode": false" /> - <ZipDirectory SourceDirectory="$(PackagePath)\bundle" DestinationFile="$(PackagePath)\internal\$(PlatformName)\install.dat" /> - <RemoveDir Directories="$(PackagePath)\bundle" /> - </Target> - - <!-- Replace text in a file based on a regex pattern. Derived from https://stackoverflow.com/a/22571621/262123. --> - <UsingTask TaskName="ReplaceFileText" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll"> - <ParameterGroup> - <FilePath ParameterType="System.String" Required="true" /> - <Search ParameterType="System.String" Required="true" /> - <Replace ParameterType="System.String" Required="true" /> - </ParameterGroup> - <Task> - <Using Namespace="System" /> - <Using Namespace="System.IO" /> - <Using Namespace="System.Text.RegularExpressions" /> - <Code Type="Fragment" Language="cs"> - <![CDATA[ - File.WriteAllText( - FilePath, - Regex.Replace(File.ReadAllText(FilePath), Search, Replace) - ); - ]]> - </Code> - </Task> - </UsingTask> -</Project> diff --git a/docs/release-notes.md b/docs/release-notes.md index d50a923d..cb52f814 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -1,11 +1,16 @@ ← [README](README.md) # Release notes +## Upcoming version +* 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. + ## 3.13.1 Released 30 November 2021 for Stardew Valley 1.5.5 or later. -* Improved .NET 5 validation in Windows installer to better explain how to get the right version. -* Fixed installer failing on Windows when run from the game folder. +* For players: + * Improved .NET 5 validation in Windows installer to better explain how to get the right version. + * Fixed installer failing on Windows when run from the game folder. ## 3.13.0 Released 30 November 2021 for Stardew Valley 1.5.5 or later. diff --git a/docs/technical/smapi.md b/docs/technical/smapi.md index 29fa43a8..ce1220f1 100644 --- a/docs/technical/smapi.md +++ b/docs/technical/smapi.md @@ -75,22 +75,24 @@ the debugger attached, so you can intercept errors and step through the code bei doesn't work in MonoDevelop on Linux, unfortunately. ### Preparing a release -To prepare a crossplatform SMAPI release, you'll need to compile it on two platforms: Windows and -Linux. The instructions below assume you have Windows 11, but you can adapt them for -a different setup if needed. +To prepare a crossplatform SMAPI release, you'll need to run the build script on Linux or macOS. #### Initial setup -First-time setup on Windows: -1. [Install Windows Subsystem for Linux (WSL)](https://docs.microsoft.com/en-us/windows/wsl/install). -2. Install the needed software in WSL: - 1. Run `sudo apt update` to update the package list. - 2. Install [the .NET 5 SDK](https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu) - (for Stardew Valley 1.5.5+) or [`mono-complete`](https://www.mono-project.com/download/stable/) - (for earlier versions). - _You can run `lsb_release -a` to get the Ubuntu version number._ - 3. [Install Steam](https://linuxconfig.org/how-to-install-steam-on-ubuntu-20-04-focal-fossa-linux). - 4. Launch `steam` and install the game like usual. - 5. Download and install your preferred IDE. For the [latest standalone Rider +First-time setup: + +1. On Windows only: + + 1. [Install Windows Subsystem for Linux (WSL)](https://docs.microsoft.com/en-us/windows/wsl/install). + 2. Run `sudo apt update` in WSL to update the package list. + 3. The rest of the instructions below should be run in WSL. + +2. Install the required software: + + 1. Install the [.NET 5 SDK](https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu). + _For Ubuntu-based systems, you can run `lsb_release -a` to get the Ubuntu version number._ + 2. [Install Steam](https://linuxconfig.org/how-to-install-steam-on-ubuntu-20-04-focal-fossa-linux). + 3. Launch `steam` and install the game like usual. + 4. Download and install your preferred IDE. For the [latest standalone Rider version](https://www.jetbrains.com/help/rider/Installation_guide.html#prerequisites): ```sh wget "<download url here>" -O rider-install.tar.gz @@ -98,23 +100,20 @@ First-time setup on Windows: ln -s "/opt/JetBrains Rider-<version>/bin/rider.sh" ./rider.sh ``` - 3. Clone the SMAPI repo in WSL: - ```sh - git clone https://github.com/Pathoschild/SMAPI.git - ``` -To compile SMAPI in WSL: -1. Run `./rider.sh` to open the Rider GUI. -2. Use the GUI to compile the solution. +3. Clone the SMAPI repo: + ```sh + git clone https://github.com/Pathoschild/SMAPI.git + ``` To launch the game: -1. Open a WSL terminal. -2. Run these commands to start Steam: + +1. Run these commands to start Steam: ```sh export TERM=xterm steam ``` -3. Launch the game through the Steam UI. +2. Launch the game through the Steam UI. #### Prepare the release 1. Update the version numbers in `build/common.targets`, `Constants`, and the `manifest.json` for @@ -125,15 +124,8 @@ To launch the game: dev build | `<version>-alpha.<date>` | `3.0.0-alpha.20171230` prerelease | `<version>-beta.<date>` | `3.0.0-beta.20171230` release | `<version>` | `3.0.0` -2. In Windows: - 1. Rebuild the solution with the _release_ solution configuration. - 2. Copy the `bin/SMAPI installer` and `bin/SMAPI installer for developers` folders to Linux. -4. In Linux: - 1. Rebuild the solution with the _release_ solution configuration. - 2. Add the `windows-install.*` files from Windows to the `bin/SMAPI installer` and - `bin/SMAPI installer for developers` folders compiled on Linux. - 3. Rename the folders to `SMAPI <version> installer` and `SMAPI <version> installer for developers`. - 4. Zip the two folders. +2. Run the `build/prepare-install-package.sh` script. This will create the release package in the + root `bin` folder. ### Custom Harmony build SMAPI uses [a custom build of Harmony](https://github.com/Pathoschild/Harmony#readme), which is diff --git a/src/SMAPI.Installer/SMAPI.Installer.csproj b/src/SMAPI.Installer/SMAPI.Installer.csproj index e3e01467..928e5c18 100644 --- a/src/SMAPI.Installer/SMAPI.Installer.csproj +++ b/src/SMAPI.Installer/SMAPI.Installer.csproj @@ -17,5 +17,4 @@ <Import Project="..\SMAPI.Internal\SMAPI.Internal.projitems" Label="Shared" /> <Import Project="..\..\build\common.targets" /> - <Import Project="..\..\build\prepare-install-package.targets" /> </Project> diff --git a/src/SMAPI.sln b/src/SMAPI.sln index 92c6cb24..9a42b9ff 100644 --- a/src/SMAPI.sln +++ b/src/SMAPI.sln @@ -1,7 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28729.10 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31912.275 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".root", ".root", "{86C452BE-D2D8-45B4-B63F-E329EB06CEDA}" ProjectSection(SolutionItems) = preProject @@ -28,7 +28,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{09CF91E5 ProjectSection(SolutionItems) = preProject ..\build\common.targets = ..\build\common.targets ..\build\find-game-folder.targets = ..\build\find-game-folder.targets - ..\build\prepare-install-package.targets = ..\build\prepare-install-package.targets + ..\build\prepare-install-package.sh = ..\build\prepare-install-package.sh EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{EB35A917-67B9-4EFA-8DFC-4FB49B3949BB}" |