summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/SMAPI.ModBuildConfig/DeployModTask.cs56
-rw-r--r--src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj2
-rw-r--r--src/SMAPI.ModBuildConfig/build/smapi.targets2
-rw-r--r--src/SMAPI.ModBuildConfig/package.nuspec8
4 files changed, 50 insertions, 18 deletions
diff --git a/src/SMAPI.ModBuildConfig/DeployModTask.cs b/src/SMAPI.ModBuildConfig/DeployModTask.cs
index c47c8ec4..9ee6be12 100644
--- a/src/SMAPI.ModBuildConfig/DeployModTask.cs
+++ b/src/SMAPI.ModBuildConfig/DeployModTask.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
+using System.Reflection;
using System.Text.RegularExpressions;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
@@ -55,6 +56,14 @@ namespace StardewModdingAPI.ModBuildConfig
/// <returns>true if the task successfully executed; otherwise, false.</returns>
public override bool Execute()
{
+ // log build settings
+ {
+ var properties = this
+ .GetPropertiesToLog()
+ .Select(p => $"{p.Key}: {p.Value}");
+ this.Log.LogMessage(MessageImportance.High, $"[mod build package] Handling build with options {string.Join(", ", properties)}");
+ }
+
if (!this.EnableModDeploy && !this.EnableModZip)
return true; // nothing to do
@@ -70,15 +79,18 @@ namespace StardewModdingAPI.ModBuildConfig
if (this.EnableModDeploy)
{
string outputPath = Path.Combine(this.GameModsDir, this.EscapeInvalidFilenameCharacters(this.ModFolderName));
- this.Log.LogMessage(MessageImportance.High, $"The mod build package is copying the mod files to {outputPath}...");
+ this.Log.LogMessage(MessageImportance.High, $"[mod build package] Copying the mod files to {outputPath}...");
this.CreateModFolder(package.GetFiles(), outputPath);
}
// create release zip
if (this.EnableModZip)
{
- this.Log.LogMessage(MessageImportance.High, $"The mod build package is generating a release zip at {this.ModZipPath} for {this.ModFolderName}...");
- this.CreateReleaseZip(package.GetFiles(), this.ModFolderName, package.GetManifestVersion(), this.ModZipPath);
+ string zipName = this.EscapeInvalidFilenameCharacters($"{this.ModFolderName} {package.GetManifestVersion()}.zip");
+ string zipPath = Path.Combine(this.ModZipPath, zipName);
+
+ this.Log.LogMessage(MessageImportance.High, $"[mod build package] Generating the release zip at {zipPath}...");
+ this.CreateReleaseZip(package.GetFiles(), this.ModFolderName, zipPath);
}
return true;
@@ -90,7 +102,7 @@ namespace StardewModdingAPI.ModBuildConfig
}
catch (Exception ex)
{
- this.Log.LogError($"The mod build package failed trying to deploy the mod.\n{ex}");
+ this.Log.LogError($"[mod build package] Failed trying to deploy the mod.\n{ex}");
return false;
}
}
@@ -99,6 +111,29 @@ namespace StardewModdingAPI.ModBuildConfig
/*********
** Private methods
*********/
+ /// <summary>Get the properties to write to the log.</summary>
+ private IEnumerable<KeyValuePair<string, string>> GetPropertiesToLog()
+ {
+ var properties = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
+ foreach (PropertyInfo property in properties.OrderBy(p => p.Name))
+ {
+ if (property.Name == nameof(this.IgnoreModFilePatterns) && string.IsNullOrWhiteSpace(this.IgnoreModFilePatterns))
+ continue;
+
+ string name = property.Name;
+
+ string value = property.GetValue(this)?.ToString();
+ if (value == null)
+ value = "null";
+ else if (property.PropertyType == typeof(bool))
+ value = value.ToLower();
+ else
+ value = $"'{value}'";
+
+ yield return new KeyValuePair<string, string>(name, value);
+ }
+ }
+
/// <summary>Get the custom ignore patterns provided by the user.</summary>
private IEnumerable<Regex> GetCustomIgnorePatterns()
{
@@ -114,7 +149,7 @@ namespace StardewModdingAPI.ModBuildConfig
}
catch (Exception ex)
{
- this.Log.LogWarning($"Ignored invalid <{nameof(this.IgnoreModFilePatterns)}> pattern {raw}:\n{ex}");
+ this.Log.LogWarning($"[mod build package] Ignored invalid <{nameof(this.IgnoreModFilePatterns)}> pattern {raw}:\n{ex}");
continue;
}
@@ -142,17 +177,14 @@ namespace StardewModdingAPI.ModBuildConfig
/// <summary>Create a release zip in the recommended format for uploading to mod sites.</summary>
/// <param name="files">The files to include.</param>
/// <param name="modName">The name of the mod.</param>
- /// <param name="modVersion">The mod version string.</param>
- /// <param name="outputFolderPath">The absolute or relative path to the folder which should contain the generated zip file.</param>
- private void CreateReleaseZip(IDictionary<string, FileInfo> files, string modName, string modVersion, string outputFolderPath)
+ /// <param name="zipPath">The absolute path to the zip file to create.</param>
+ private void CreateReleaseZip(IDictionary<string, FileInfo> files, string modName, string zipPath)
{
- // get names
- string zipName = this.EscapeInvalidFilenameCharacters($"{modName} {modVersion}.zip");
+ // get folder name within zip
string folderName = this.EscapeInvalidFilenameCharacters(modName);
- string zipPath = Path.Combine(outputFolderPath, zipName);
// create zip file
- Directory.CreateDirectory(outputFolderPath);
+ Directory.CreateDirectory(Path.GetDirectoryName(zipPath)!);
using Stream zipStream = new FileStream(zipPath, FileMode.Create, FileAccess.Write);
using ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create);
diff --git a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj
index 5e35b7e9..605096d9 100644
--- a/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj
+++ b/src/SMAPI.ModBuildConfig/SMAPI.ModBuildConfig.csproj
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RootNamespace>StardewModdingAPI.ModBuildConfig</RootNamespace>
- <Version>3.2.0</Version>
+ <Version>3.2.1</Version>
<TargetFramework>net45</TargetFramework>
<PlatformTarget>x86</PlatformTarget>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
diff --git a/src/SMAPI.ModBuildConfig/build/smapi.targets b/src/SMAPI.ModBuildConfig/build/smapi.targets
index 0a0db190..65544b12 100644
--- a/src/SMAPI.ModBuildConfig/build/smapi.targets
+++ b/src/SMAPI.ModBuildConfig/build/smapi.targets
@@ -18,7 +18,7 @@
<!-- set default package options -->
<ModFolderName Condition="'$(ModFolderName)' == ''">$(MSBuildProjectName)</ModFolderName>
<ModZipPath Condition="'$(ModZipPath)' == ''">$(TargetDir)</ModZipPath>
- <GameModsPath Condition="'$(GameModsPath)' == ''">$([System.IO.Path]::Combine($(GamePath), 'Mods')</GameModsPath>
+ <GameModsPath Condition="'$(GameModsPath)' == ''">$([System.IO.Path]::Combine($(GamePath), 'Mods'))</GameModsPath>
<EnableModDeploy Condition="'$(EnableModDeploy)' == ''">true</EnableModDeploy>
<EnableModZip Condition="'$(EnableModZip)' == ''">true</EnableModZip>
<EnableHarmony Condition="'$(EnableHarmony)' == ''">false</EnableHarmony>
diff --git a/src/SMAPI.ModBuildConfig/package.nuspec b/src/SMAPI.ModBuildConfig/package.nuspec
index c0b0799a..05aed8f9 100644
--- a/src/SMAPI.ModBuildConfig/package.nuspec
+++ b/src/SMAPI.ModBuildConfig/package.nuspec
@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata>
<id>Pathoschild.Stardew.ModBuildConfig</id>
- <version>3.2.0</version>
+ <version>3.2.1</version>
<title>Build package for SMAPI mods</title>
<authors>Pathoschild</authors>
<owners>Pathoschild</owners>
@@ -14,9 +14,9 @@
<iconUrl>https://raw.githubusercontent.com/Pathoschild/SMAPI/develop/src/SMAPI.ModBuildConfig/assets/nuget-icon.png</iconUrl>
<description>Automates the build configuration for crossplatform Stardew Valley SMAPI mods. For SMAPI 3.0 or later.</description>
<releaseNotes>
- 3.2.0:
- - Added option to change `Mods` folder path.
- - Rewrote documentation to make it easier to read.
+ 3.2.1:
+ - Added more detailed logging.
+ - Fixed "path's format is not supported" error when using default Mods path in 3.2.
</releaseNotes>
</metadata>
<files>