diff --git a/Assets/UGF.Build.Editor.Tests/New Release Note Export Step Asset.asset b/Assets/UGF.Build.Editor.Tests/New Release Note Export Step Asset.asset new file mode 100644 index 0000000..12ced81 --- /dev/null +++ b/Assets/UGF.Build.Editor.Tests/New Release Note Export Step Asset.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5c1666f5f44ffc9b9dd64a17e7754d, type: 3} + m_Name: New Release Note Export Step Asset + m_EditorClassIdentifier: + m_path: + m_encodingType: 0 diff --git a/Assets/UGF.Build.Editor.Tests/New Release Note Export Step Asset.asset.meta b/Assets/UGF.Build.Editor.Tests/New Release Note Export Step Asset.asset.meta new file mode 100644 index 0000000..39e6229 --- /dev/null +++ b/Assets/UGF.Build.Editor.Tests/New Release Note Export Step Asset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad5177a8e1cfd224c9629ce01756b8af +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UGF.Build.Editor.Tests/New Release Note Step Asset.asset b/Assets/UGF.Build.Editor.Tests/New Release Note Step Asset.asset new file mode 100644 index 0000000..ab9650f --- /dev/null +++ b/Assets/UGF.Build.Editor.Tests/New Release Note Step Asset.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6622b7b24432465a964b9dccb59827c0, type: 3} + m_Name: New Release Note Step Asset + m_EditorClassIdentifier: diff --git a/Assets/UGF.Build.Editor.Tests/New Release Note Step Asset.asset.meta b/Assets/UGF.Build.Editor.Tests/New Release Note Step Asset.asset.meta new file mode 100644 index 0000000..c130e05 --- /dev/null +++ b/Assets/UGF.Build.Editor.Tests/New Release Note Step Asset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48997564f88353a43a4503977b4213ac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UGF.Build.Editor.Tests/New Unity Cloud Build Manifest Release Note Step Asset.asset b/Assets/UGF.Build.Editor.Tests/New Unity Cloud Build Manifest Release Note Step Asset.asset new file mode 100644 index 0000000..737ac2d --- /dev/null +++ b/Assets/UGF.Build.Editor.Tests/New Unity Cloud Build Manifest Release Note Step Asset.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bcfe52b5278f40a9a5fde4b51a12daed, type: 3} + m_Name: New Unity Cloud Build Manifest Release Note Step Asset + m_EditorClassIdentifier: diff --git a/Assets/UGF.Build.Editor.Tests/New Unity Cloud Build Manifest Release Note Step Asset.asset.meta b/Assets/UGF.Build.Editor.Tests/New Unity Cloud Build Manifest Release Note Step Asset.asset.meta new file mode 100644 index 0000000..5a037da --- /dev/null +++ b/Assets/UGF.Build.Editor.Tests/New Unity Cloud Build Manifest Release Note Step Asset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7749ef54ced6bdd4caaad2554317c816 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/UGF.Build/Editor/ReleaseNotes.meta b/Packages/UGF.Build/Editor/ReleaseNotes.meta new file mode 100644 index 0000000..93d72c5 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 425c5016f600422d8f11329f1dce5a7b +timeCreated: 1668885473 \ No newline at end of file diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteData.cs b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteData.cs new file mode 100644 index 0000000..a4e7636 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteData.cs @@ -0,0 +1,63 @@ +using System; +using System.Reflection; +using System.Text; +using UnityEditor; + +namespace UGF.Build.Editor.ReleaseNotes +{ + public class ReleaseNoteData + { + private readonly StringBuilder m_builder = new StringBuilder(); + + public void AddLine(string value) + { + if (string.IsNullOrEmpty(value)) throw new ArgumentException("Value cannot be null or empty.", nameof(value)); + + m_builder.AppendLine(value); + } + + public void AddField(string name, object value) + { + if (string.IsNullOrEmpty(name)) throw new ArgumentException("Value cannot be null or empty.", nameof(name)); + + m_builder.AppendFormat("- {0}: '{1}'.", name, value); + m_builder.AppendLine(); + } + + public void AddSpace() + { + m_builder.AppendLine(); + } + + public void AddData(object data) + { + if (data == null) throw new ArgumentNullException(nameof(data)); + + Type type = data.GetType(); + PropertyInfo[] properties = type.GetProperties(); + + AddLine(ObjectNames.NicifyVariableName(type.Name)); + + foreach (PropertyInfo property in properties) + { + if (property.CanRead) + { + string name = property.Name; + object value = property.GetValue(data); + + AddField(name, value); + } + } + } + + public void Clear() + { + m_builder.Clear(); + } + + public string GetString() + { + return m_builder.ToString(); + } + } +} diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteData.cs.meta b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteData.cs.meta new file mode 100644 index 0000000..bd8469b --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ab34b3b718aa4a6786cdc15932c67795 +timeCreated: 1668885475 \ No newline at end of file diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStep.cs b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStep.cs new file mode 100644 index 0000000..b669707 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStep.cs @@ -0,0 +1,28 @@ +using System; +using System.IO; +using System.Text; +using UGF.RuntimeTools.Runtime.Contexts; + +namespace UGF.Build.Editor.ReleaseNotes +{ + public class ReleaseNoteExportStep : BuildStep + { + public string Path { get; } + public Encoding Encoding { get; } + + public ReleaseNoteExportStep(string path, Encoding encoding) + { + if (string.IsNullOrEmpty(path)) throw new ArgumentException("Value cannot be null or empty.", nameof(path)); + + Path = path; + Encoding = encoding ?? throw new ArgumentNullException(nameof(encoding)); + } + + protected override void OnExecute(IBuildSetup setup, IContext context) + { + var data = context.Get(); + + File.WriteAllText(Path, data.GetString(), Encoding); + } + } +} diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStep.cs.meta b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStep.cs.meta new file mode 100644 index 0000000..600c289 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStep.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9a331be92f8244fc8f372fb2e5a921bc +timeCreated: 1668885622 \ No newline at end of file diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStepAsset.cs b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStepAsset.cs new file mode 100644 index 0000000..bca7b1c --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStepAsset.cs @@ -0,0 +1,20 @@ +using UGF.RuntimeTools.Runtime.Encodings; +using UnityEngine; + +namespace UGF.Build.Editor.ReleaseNotes +{ + [CreateAssetMenu(menuName = "Unity Game Framework/Build/Release Note Export Step", order = 2000)] + public class ReleaseNoteExportStepAsset : BuildStepAsset + { + [SerializeField] private string m_path; + [SerializeField] private EncodingType m_encodingType = EncodingType.Default; + + public string Path { get { return m_path; } set { m_path = value; } } + public EncodingType EncodingType { get { return m_encodingType; } set { m_encodingType = value; } } + + protected override IBuildStep OnBuild() + { + return new ReleaseNoteExportStep(m_path, EncodingUtility.GetEncoding(m_encodingType)); + } + } +} diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStepAsset.cs.meta b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStepAsset.cs.meta new file mode 100644 index 0000000..476be9e --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteExportStepAsset.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3a5c1666f5f44ffc9b9dd64a17e7754d +timeCreated: 1668885701 \ No newline at end of file diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStep.cs b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStep.cs new file mode 100644 index 0000000..c679c70 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStep.cs @@ -0,0 +1,12 @@ +using UGF.RuntimeTools.Runtime.Contexts; + +namespace UGF.Build.Editor.ReleaseNotes +{ + public class ReleaseNoteStep : BuildStep + { + protected override void OnExecute(IBuildSetup setup, IContext context) + { + context.Add(new ReleaseNoteData()); + } + } +} diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStep.cs.meta b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStep.cs.meta new file mode 100644 index 0000000..010f850 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStep.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1a76aa40ab3a4a8a8b947343a73a6aa3 +timeCreated: 1668885534 \ No newline at end of file diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStepAsset.cs b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStepAsset.cs new file mode 100644 index 0000000..ab95dc3 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStepAsset.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace UGF.Build.Editor.ReleaseNotes +{ + [CreateAssetMenu(menuName = "Unity Game Framework/Build/Release Note Step", order = 2000)] + public class ReleaseNoteStepAsset : BuildStepAsset + { + protected override IBuildStep OnBuild() + { + return new ReleaseNoteStep(); + } + } +} diff --git a/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStepAsset.cs.meta b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStepAsset.cs.meta new file mode 100644 index 0000000..da8ab12 --- /dev/null +++ b/Packages/UGF.Build/Editor/ReleaseNotes/ReleaseNoteStepAsset.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6622b7b24432465a964b9dccb59827c0 +timeCreated: 1668885559 \ No newline at end of file diff --git a/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStep.cs b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStep.cs new file mode 100644 index 0000000..96ccbee --- /dev/null +++ b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStep.cs @@ -0,0 +1,17 @@ +using UGF.Build.Editor.ReleaseNotes; +using UGF.Build.Runtime.UnityCloud; +using UGF.RuntimeTools.Runtime.Contexts; + +namespace UGF.Build.Editor.UnityCloud +{ + public class UnityCloudBuildManifestReleaseNoteStep : BuildStep + { + protected override void OnExecute(IBuildSetup setup, IContext context) + { + var releaseNote = context.Get(); + var manifest = context.Get(); + + releaseNote.AddData(manifest); + } + } +} diff --git a/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStep.cs.meta b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStep.cs.meta new file mode 100644 index 0000000..d9d69e6 --- /dev/null +++ b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStep.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 704d391b01bd41b183dd588bed9e4f0a +timeCreated: 1668885809 \ No newline at end of file diff --git a/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStepAsset.cs b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStepAsset.cs new file mode 100644 index 0000000..19fa843 --- /dev/null +++ b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStepAsset.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace UGF.Build.Editor.UnityCloud +{ + [CreateAssetMenu(menuName = "Unity Game Framework/Build/Unity Cloud Build Manifest Release Note Step", order = 2000)] + public class UnityCloudBuildManifestReleaseNoteStepAsset : BuildStepAsset + { + protected override IBuildStep OnBuild() + { + return new UnityCloudBuildManifestReleaseNoteStep(); + } + } +} diff --git a/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStepAsset.cs.meta b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStepAsset.cs.meta new file mode 100644 index 0000000..4c05396 --- /dev/null +++ b/Packages/UGF.Build/Editor/UnityCloud/UnityCloudBuildManifestReleaseNoteStepAsset.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bcfe52b5278f40a9a5fde4b51a12daed +timeCreated: 1668885869 \ No newline at end of file