diff options
-rw-r--r-- | src/SMAPI.ModBuildConfig/BuildTasks/ValidateInstallTask.cs | 70 | ||||
-rw-r--r-- | src/SMAPI.ModBuildConfig/DeployModTask.cs (renamed from src/SMAPI.ModBuildConfig/BuildTasks/DeployModTask.cs) | 2 | ||||
-rw-r--r-- | src/SMAPI.ModBuildConfig/StardewModdingAPI.ModBuildConfig.csproj | 3 | ||||
-rw-r--r-- | src/SMAPI.ModBuildConfig/build/smapi.targets | 10 |
4 files changed, 11 insertions, 74 deletions
diff --git a/src/SMAPI.ModBuildConfig/BuildTasks/ValidateInstallTask.cs b/src/SMAPI.ModBuildConfig/BuildTasks/ValidateInstallTask.cs deleted file mode 100644 index 2cc7dc9c..00000000 --- a/src/SMAPI.ModBuildConfig/BuildTasks/ValidateInstallTask.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using StardewModdingAPI.ModBuildConfig.Framework; - -namespace StardewModdingAPI.ModBuildConfig.BuildTasks -{ - /// <summary>A build task which validates the install context.</summary> - public class ValidateInstallTask : Task - { - /********* - ** Properties - *********/ - /// <summary>The MSBuild platforms recognised by the build configuration.</summary> - private readonly HashSet<string> ValidPlatforms = new HashSet<string>(new[] { "OSX", "Unix", "Windows_NT" }, StringComparer.InvariantCultureIgnoreCase); - - /// <summary>The name of the game's main executable file.</summary> - private string GameExeName => this.Platform == "Windows_NT" - ? "Stardew Valley.exe" - : "StardewValley.exe"; - - /// <summary>The name of SMAPI's main executable file.</summary> - private readonly string SmapiExeName = "StardewModdingAPI.exe"; - - - /********* - ** Accessors - *********/ - /// <summary>The folder containing the game files.</summary> - public string GameDir { get; set; } - - /// <summary>The MSBuild OS value.</summary> - public string Platform { get; set; } - - - /********* - ** Public methods - *********/ - /// <summary>When overridden in a derived class, executes the task.</summary> - /// <returns>true if the task successfully executed; otherwise, false.</returns> - public override bool Execute() - { - try - { - if (!this.ValidPlatforms.Contains(this.Platform)) - throw new UserErrorException($"The mod build package doesn't recognise OS type '{this.Platform}'."); - if (!Directory.Exists(this.GameDir)) - throw new UserErrorException("The mod build package can't find your game path. See https://github.com/Pathoschild/SMAPI/blob/develop/docs/mod-build-config.md for help specifying it."); - if (!File.Exists(Path.Combine(this.GameDir, this.GameExeName))) - throw new UserErrorException($"The mod build package found a game folder at {this.GameDir}, but it doesn't contain the {this.GameExeName} file. If this folder is invalid, delete it and the package will autodetect another game install path."); - if (!File.Exists(Path.Combine(this.GameDir, this.SmapiExeName))) - throw new UserErrorException($"The mod build package found a game folder at {this.GameDir}, but it doesn't contain SMAPI. You need to install SMAPI before building the mod."); - - return true; - } - catch (UserErrorException ex) - { - this.Log.LogErrorFromException(ex); - return false; - } - catch (Exception ex) - { - this.Log.LogError($"The mod build package failed trying to deploy the mod.\n{ex}"); - return false; - } - } - } -} diff --git a/src/SMAPI.ModBuildConfig/BuildTasks/DeployModTask.cs b/src/SMAPI.ModBuildConfig/DeployModTask.cs index 433e602f..a09dd5d2 100644 --- a/src/SMAPI.ModBuildConfig/BuildTasks/DeployModTask.cs +++ b/src/SMAPI.ModBuildConfig/DeployModTask.cs @@ -6,7 +6,7 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using StardewModdingAPI.ModBuildConfig.Framework; -namespace StardewModdingAPI.ModBuildConfig.BuildTasks +namespace StardewModdingAPI.ModBuildConfig { /// <summary>A build task which deploys the mod files and prepares a release zip.</summary> public class DeployModTask : Task diff --git a/src/SMAPI.ModBuildConfig/StardewModdingAPI.ModBuildConfig.csproj b/src/SMAPI.ModBuildConfig/StardewModdingAPI.ModBuildConfig.csproj index 0007e53e..e04f09a7 100644 --- a/src/SMAPI.ModBuildConfig/StardewModdingAPI.ModBuildConfig.csproj +++ b/src/SMAPI.ModBuildConfig/StardewModdingAPI.ModBuildConfig.csproj @@ -38,8 +38,7 @@ <Reference Include="System.Web.Extensions" /> </ItemGroup> <ItemGroup> - <Compile Include="BuildTasks\ValidateInstallTask.cs" /> - <Compile Include="BuildTasks\DeployModTask.cs" /> + <Compile Include="DeployModTask.cs" /> <Compile Include="Framework\UserErrorException.cs" /> <Compile Include="Framework\ModFileManager.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> diff --git a/src/SMAPI.ModBuildConfig/build/smapi.targets b/src/SMAPI.ModBuildConfig/build/smapi.targets index 9f3f13f5..f7e75e23 100644 --- a/src/SMAPI.ModBuildConfig/build/smapi.targets +++ b/src/SMAPI.ModBuildConfig/build/smapi.targets @@ -118,9 +118,17 @@ <!--********************************************* ** Deploy mod files & create release zip after build **********************************************--> + <!-- if game path or OS is invalid, show one user-friendly error instead of a slew of reference errors --> <Target Name="BeforeBuild"> - <ValidateInstallTask GameDir="$(GamePath)" Platform="$(OS)" /> + <Error Condition="'$(OS)' != 'OSX' AND '$(OS)' != 'Unix' AND '$(OS)' != 'Windows_NT'" Text="The mod build package doesn't recognise OS type '$(OS)'." /> + + <Error Condition="!Exists('$(GamePath)')" Text="The mod build package can't find your game folder. You can specify where to find it; see details at https://github.com/Pathoschild/SMAPI/blob/develop/docs/mod-build-config.md#game-path." /> + <Error Condition="'$(OS)' == 'Windows_NT' AND !Exists('$(GamePath)\Stardew Valley.exe')" Text="The mod build package found a a game folder at $(GamePath), but it doesn't contain the Stardew Valley.exe file. If this folder is invalid, delete it and the package will autodetect another game install path." /> + <Error Condition="'$(OS)' != 'Windows_NT' AND !Exists('$(GamePath)\StardewValley.exe')" Text="The mod build package found a a game folder at $(GamePath), but it doesn't contain the StardewValley.exe file. If this folder is invalid, delete it and the package will autodetect another game install path." /> + <Error Condition="!Exists('$(GamePath)\StardewModdingAPI.exe')" Text="The mod build package found a game folder at $(GamePath), but it doesn't contain SMAPI. You need to install SMAPI before building the mod." /> </Target> + + <!-- deploy mod files & create release zip --> <Target Name="AfterBuild"> <DeployModTask ModFolderName="$(ModFolderName)" |