From 01500ce8cb5477f51406db60b76d8d75f918c3e9 Mon Sep 17 00:00:00 2001 From: rlittlesii <6969701+RLittlesII@users.noreply.github.com> Date: Sat, 26 Mar 2022 15:35:26 -0500 Subject: [PATCH] enhancement: Added Xamarin Apple Target abstracted IHaveBundleIdentifier abstracted IHaveInfoPlist abstracted IXamarinAppleTarget --- ...GitVersionEx.cs => GitVersionFunctions.cs} | 2 +- .../Xamarin/apple/IHaveBundleIdentifier.cs | 21 +++++ src/Nuke/Xamarin/apple/IHaveInfoPlist.cs | 16 ++++ src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs | 39 +++++++++ src/Nuke/Xamarin/{ => apple}/Plist.cs | 1 + .../Xamarin/{ => apple}/ios/ICanArchiveiOS.cs | 3 +- .../Xamarin/apple/ios/ICanBuildXamariniOS.cs | 37 +++++++++ .../{ => apple}/ios/ICanPackXamariniOS.cs | 0 .../{ => apple}/ios/IHaveiOSTargetPlatform.cs | 0 .../Xamarin/apple/mac/ICanBuildXamarinMac.cs | 36 +++++++++ .../{ => apple}/mac/ICanPackXamarinMac.cs | 0 src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs | 79 ------------------- src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs | 74 ----------------- 13 files changed, 153 insertions(+), 155 deletions(-) rename src/Nuke/{GitVersionEx.cs => GitVersionFunctions.cs} (92%) create mode 100644 src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs create mode 100644 src/Nuke/Xamarin/apple/IHaveInfoPlist.cs create mode 100644 src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs rename src/Nuke/Xamarin/{ => apple}/Plist.cs (99%) rename src/Nuke/Xamarin/{ => apple}/ios/ICanArchiveiOS.cs (92%) create mode 100644 src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs rename src/Nuke/Xamarin/{ => apple}/ios/ICanPackXamariniOS.cs (100%) rename src/Nuke/Xamarin/{ => apple}/ios/IHaveiOSTargetPlatform.cs (100%) create mode 100644 src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs rename src/Nuke/Xamarin/{ => apple}/mac/ICanPackXamarinMac.cs (100%) delete mode 100644 src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs delete mode 100644 src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs diff --git a/src/Nuke/GitVersionEx.cs b/src/Nuke/GitVersionFunctions.cs similarity index 92% rename from src/Nuke/GitVersionEx.cs rename to src/Nuke/GitVersionFunctions.cs index 12757605..bb4ccf8f 100644 --- a/src/Nuke/GitVersionEx.cs +++ b/src/Nuke/GitVersionFunctions.cs @@ -5,7 +5,7 @@ namespace Rocket.Surgery.Nuke; /// /// extensions. /// -public static class GitVersionEx +public static class GitVersionFunctions { /// /// Gets the full semantic version from . diff --git a/src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs b/src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs new file mode 100644 index 00000000..330fa98d --- /dev/null +++ b/src/Nuke/Xamarin/apple/IHaveBundleIdentifier.cs @@ -0,0 +1,21 @@ +// ReSharper disable once CheckNamespace + +namespace Rocket.Surgery.Nuke.Xamarin; + +/// +/// Has a bundle identifier. +/// +public interface IHaveBundleIdentifier : IHave +{ + /// + /// Gets the path for the info plist. + /// + [Parameter("The application bundle identifier.")] + public string BundleIdentifier => "com.rocketbooster.nuke"; + + /// + /// Gets the suffix for the bundle identifier. + /// + [Parameter("The identifier suffix.")] + public string Suffix { get; set; } +} diff --git a/src/Nuke/Xamarin/apple/IHaveInfoPlist.cs b/src/Nuke/Xamarin/apple/IHaveInfoPlist.cs new file mode 100644 index 00000000..91e0c4c1 --- /dev/null +++ b/src/Nuke/Xamarin/apple/IHaveInfoPlist.cs @@ -0,0 +1,16 @@ +using Nuke.Common.IO; + +// ReSharper disable once CheckNamespace +namespace Rocket.Surgery.Nuke.Xamarin; + +/// +/// Has an info.plist file. +/// +public interface IHaveInfoPlist : IHave +{ + /// + /// Gets the path for the info plist. + /// + [Parameter("The path to the info.plist.")] + public AbsolutePath InfoPlist { get; } +} diff --git a/src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs b/src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs new file mode 100644 index 00000000..dd5289d2 --- /dev/null +++ b/src/Nuke/Xamarin/apple/IXamarinAppleTarget.cs @@ -0,0 +1,39 @@ +using Serilog; + +// ReSharper disable once CheckNamespace +namespace Rocket.Surgery.Nuke.Xamarin; + +/// +/// Represents an application with a apple head, and associated concerns. +/// +public interface IXamarinAppleTarget : IHaveBundleIdentifier, IHaveGitVersion, IHaveInfoPlist +{ + /// + /// modify info.plist + /// + public Target ModifyInfoPlist => _ => _ + .Executes( + () => + { + Log.Verbose("Info.plist Path: {InfoPlist}", InfoPlist); + var plist = Plist.Deserialize(InfoPlist); + + Log.Verbose("Deserialized Plist:\n {@Plist}\n", plist); + + plist["CFBundleIdentifier"] = $"{BundleIdentifier}.{Suffix.ToLower()}".TrimEnd('.'); + Log.Information("CFBundleIdentifier: {CFBundleIdentifier}", plist["CFBundleIdentifier"]); + + plist["CFBundleShortVersionString"] = $"{GitVersion?.Major}.{GitVersion?.Minor}.{GitVersion?.Patch}"; + Log.Information( + "CFBundleShortVersionString: {CFBundleShortVersionString}", + plist["CFBundleShortVersionString"] + ); + + plist["CFBundleVersion"] = $"{GitVersion?.FullSemanticVersion()}"; + Log.Information("CFBundleVersion: {CFBundleVersion}", plist["CFBundleVersion"]); + + Plist.Serialize(InfoPlist, plist); + Log.Verbose("Serialized Plist:\n {@Plist}\n", plist); + } + ); +} diff --git a/src/Nuke/Xamarin/Plist.cs b/src/Nuke/Xamarin/apple/Plist.cs similarity index 99% rename from src/Nuke/Xamarin/Plist.cs rename to src/Nuke/Xamarin/apple/Plist.cs index 2ed7d315..64d6d11f 100644 --- a/src/Nuke/Xamarin/Plist.cs +++ b/src/Nuke/Xamarin/apple/Plist.cs @@ -4,6 +4,7 @@ using Nuke.Common.IO; using Serilog; +// ReSharper disable once CheckNamespace namespace Rocket.Surgery.Nuke.Xamarin; /// diff --git a/src/Nuke/Xamarin/ios/ICanArchiveiOS.cs b/src/Nuke/Xamarin/apple/ios/ICanArchiveiOS.cs similarity index 92% rename from src/Nuke/Xamarin/ios/ICanArchiveiOS.cs rename to src/Nuke/Xamarin/apple/ios/ICanArchiveiOS.cs index fb34131d..6cb9ee40 100644 --- a/src/Nuke/Xamarin/ios/ICanArchiveiOS.cs +++ b/src/Nuke/Xamarin/apple/ios/ICanArchiveiOS.cs @@ -31,11 +31,12 @@ public interface ICanArchiveiOS : IHavePackTarget, .SetProperty("Platform", iOSTargetPlatform) .SetProperty("BuildIpa", "true") .SetProperty("ArchiveOnBuild", "true") + .SetProperty("IpaPackageDir", ArtifactsDirectory / "ios") .SetConfiguration(Configuration) .SetDefaultLoggers(LogsDirectory / "package.log") .SetGitVersionEnvironment(GitVersion) .SetAssemblyVersion(GitVersion?.FullSemanticVersion()) - .SetPackageVersion(GitVersion?.NuGetVersionV2) + .SetPackageVersion(GitVersion?.FullSemanticVersion()) ) ); } diff --git a/src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs b/src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs new file mode 100644 index 00000000..f56a26aa --- /dev/null +++ b/src/Nuke/Xamarin/apple/ios/ICanBuildXamariniOS.cs @@ -0,0 +1,37 @@ +using Nuke.Common.Tools.MSBuild; +using static Nuke.Common.Tools.MSBuild.MSBuildTasks; + +#pragma warning disable CA1304 +// ReSharper disable InconsistentNaming +// ReSharper disable once CheckNamespace +namespace Rocket.Surgery.Nuke.Xamarin; + +/// +/// Xamarin iOS build +/// +public interface ICanBuildXamariniOS : IXamarinAppleTarget, + IHaveBuildTarget, + IHaveRestoreTarget, + IHaveSolution, + IHaveConfiguration, + IHaveOutputLogs, + IHaveiOSTargetPlatform, + ICan +{ + /// + /// msbuild + /// + public Target BuildiPhone => _ => _ + .DependsOn(Restore) + .Executes( + () => MSBuild( + settings => settings.SetSolutionFile(Solution) + .SetProperty("Platform", iOSTargetPlatform) + .SetConfiguration(Configuration) + .SetDefaultLoggers(LogsDirectory / "build.log") + .SetGitVersionEnvironment(GitVersion) + .SetAssemblyVersion(GitVersion?.FullSemanticVersion()) + .SetPackageVersion(GitVersion?.NuGetVersionV2) + ) + ); +} diff --git a/src/Nuke/Xamarin/ios/ICanPackXamariniOS.cs b/src/Nuke/Xamarin/apple/ios/ICanPackXamariniOS.cs similarity index 100% rename from src/Nuke/Xamarin/ios/ICanPackXamariniOS.cs rename to src/Nuke/Xamarin/apple/ios/ICanPackXamariniOS.cs diff --git a/src/Nuke/Xamarin/ios/IHaveiOSTargetPlatform.cs b/src/Nuke/Xamarin/apple/ios/IHaveiOSTargetPlatform.cs similarity index 100% rename from src/Nuke/Xamarin/ios/IHaveiOSTargetPlatform.cs rename to src/Nuke/Xamarin/apple/ios/IHaveiOSTargetPlatform.cs diff --git a/src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs b/src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs new file mode 100644 index 00000000..51e0ed68 --- /dev/null +++ b/src/Nuke/Xamarin/apple/mac/ICanBuildXamarinMac.cs @@ -0,0 +1,36 @@ +using Nuke.Common.Tools.MSBuild; +using static Nuke.Common.Tools.MSBuild.MSBuildTasks; + +#pragma warning disable CA1304 +// ReSharper disable once CheckNamespace +namespace Rocket.Surgery.Nuke.Xamarin; + +/// +/// Xamarin mac build +/// +public interface ICanBuildXamarinMac : IXamarinAppleTarget, + IHaveBuildTarget, + IHaveRestoreTarget, + IHaveSolution, + IHaveConfiguration, + IHaveOutputLogs, + ICan +{ + /// + /// msbuild + /// + public new Target Build => _ => _ + .DependsOn(Restore) + .Executes( + () => MSBuild( + settings => settings + .SetSolutionFile(Solution) + .SetProperty("Platform", TargetPlatform.AnyCPU) + .SetConfiguration(Configuration) + .SetDefaultLoggers(LogsDirectory / "build.log") + .SetGitVersionEnvironment(GitVersion) + .SetAssemblyVersion(GitVersion?.FullSemanticVersion()) + .SetPackageVersion(GitVersion?.NuGetVersionV2) + ) + ); +} diff --git a/src/Nuke/Xamarin/mac/ICanPackXamarinMac.cs b/src/Nuke/Xamarin/apple/mac/ICanPackXamarinMac.cs similarity index 100% rename from src/Nuke/Xamarin/mac/ICanPackXamarinMac.cs rename to src/Nuke/Xamarin/apple/mac/ICanPackXamarinMac.cs diff --git a/src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs b/src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs deleted file mode 100644 index cd571709..00000000 --- a/src/Nuke/Xamarin/ios/ICanBuildXamariniOS.cs +++ /dev/null @@ -1,79 +0,0 @@ -using Nuke.Common.IO; -using Nuke.Common.Tools.MSBuild; -using Serilog; -using static Nuke.Common.Tools.MSBuild.MSBuildTasks; - -#pragma warning disable CA1304 -// ReSharper disable InconsistentNaming -// ReSharper disable once CheckNamespace -namespace Rocket.Surgery.Nuke.Xamarin; - -/// -/// Xamarin iOS build -/// -public interface ICanBuildXamariniOS : IHaveBuildTarget, - IHaveRestoreTarget, - IHaveSolution, - IHaveConfiguration, - IHaveGitVersion, - IHaveOutputLogs, - IHaveiOSTargetPlatform, - ICan -{ - /// - /// Gets the path for the info plist. - /// - public AbsolutePath InfoPlist { get; } - - /// - /// Gets the path for the info plist. - /// - public string BaseBundleIdentifier => "com.rocketbooster.nuke"; - - /// - /// msbuild - /// - public Target BuildiPhone => _ => _ - .DependsOn(Restore) - .Executes( - () => MSBuild( - settings => settings.SetSolutionFile(Solution) - .SetProperty("Platform", iOSTargetPlatform) - .SetConfiguration(Configuration) - .SetDefaultLoggers(LogsDirectory / "build.log") - .SetGitVersionEnvironment(GitVersion) - .SetAssemblyVersion(GitVersion?.FullSemanticVersion()) - .SetPackageVersion(GitVersion?.NuGetVersionV2) - ) - ); - - - /// - /// modify info.plist - /// - public Target ModifyInfoPlist => _ => _ - .DependsOn(Restore) - .Executes( - () => - { - Log.Verbose("Info.plist Path: {InfoPlist}", InfoPlist); - var plist = Plist.Deserialize(InfoPlist); - var bundleIdentifier = !Equals(Configuration, XamarinConfiguration.Store.ToString()) - ? Configuration - : string.Empty; - - plist["CFBundleIdentifier"] = $"{BaseBundleIdentifier}.{bundleIdentifier.ToLower()}".TrimEnd('.'); - Log.Information("CFBundleIdentifier: {CFBundleIdentifier}", plist["CFBundleIdentifier"]); - - plist["CFBundleShortVersionString"] = $"{GitVersion?.MajorMinorPatch}"; - Log.Information( - "CFBundleShortVersionString: {CFBundleShortVersionString}", plist["CFBundleShortVersionString"] - ); - - plist["CFBundleVersion"] = $"{GitVersion?.FullSemVer.Replace('+', '.')}"; - Log.Information("CFBundleVersion: {CFBundleVersion}", plist["CFBundleVersion"]); - - Plist.Serialize(InfoPlist, plist); - } - ); -} diff --git a/src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs b/src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs deleted file mode 100644 index afb0f4b9..00000000 --- a/src/Nuke/Xamarin/mac/ICanBuildXamarinMac.cs +++ /dev/null @@ -1,74 +0,0 @@ -using Nuke.Common.IO; -using Nuke.Common.Tools.MSBuild; -using Serilog; -using static Nuke.Common.Tools.MSBuild.MSBuildTasks; - -#pragma warning disable CA1304 -// ReSharper disable once CheckNamespace -namespace Rocket.Surgery.Nuke.Xamarin; - -/// -/// Xamarin mac build -/// -public interface ICanBuildXamarinMac : IHaveBuildTarget, - IHaveRestoreTarget, - IHaveSolution, - IHaveConfiguration, - IHaveGitVersion, - IHaveOutputLogs, - ICan -{ - /// - /// Gets the path for the info plist. - /// - public AbsolutePath InfoPlist { get; } - - /// - /// Gets the path for the info plist. - /// - public string BaseBundleIdentifier => "com.rocketbooster.nuke"; - - /// - /// msbuild - /// - public new Target Build => _ => _ - .DependsOn(Restore) - .Executes( - () => MSBuild( - settings => settings - .SetSolutionFile(Solution) - .SetProperty("Platform", TargetPlatform.AnyCPU) - .SetConfiguration(Configuration) - .SetDefaultLoggers(LogsDirectory / "build.log") - .SetGitVersionEnvironment(GitVersion) - .SetAssemblyVersion(GitVersion?.FullSemanticVersion()) - .SetPackageVersion(GitVersion?.NuGetVersionV2) - ) - ); - - /// - /// modify info.plist - /// - public Target ModifyPlist => _ => _ - .Executes( - () => - { - Log.Verbose("Info.plist Path: {InfoPlist}", InfoPlist); - var plist = Plist.Deserialize(InfoPlist); - var bundleIdentifier = !Equals(Configuration, XamarinConfiguration.Store.ToString()) - ? Configuration - : string.Empty; - - plist["CFBundleIdentifier"] = $"{BaseBundleIdentifier}.{bundleIdentifier.ToLower()}".TrimEnd('.'); - Log.Information("CFBundleIdentifier: {CFBundleIdentifier}", plist["CFBundleIdentifier"]); - - plist["CFBundleShortVersionString"] = $"{GitVersion?.Major}.{GitVersion?.Minor}.{GitVersion?.Patch}"; - Log.Information("CFBundleShortVersionString: {CFBundleShortVersionString}", plist["CFBundleShortVersionString"]); - - plist["CFBundleVersion"] = $"{GitVersion?.PreReleaseNumber}"; - Log.Information("CFBundleVersion: {CFBundleVersion}", plist["CFBundleVersion"]); - - Plist.Serialize(InfoPlist, plist); - } - ); -}