summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/SMAPI.ModBuildConfig/BuildTasks/ValidateInstallTask.cs70
-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.csproj3
-rw-r--r--src/SMAPI.ModBuildConfig/build/smapi.targets10
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)"