diff --git a/action/default-build-script/Assets/Editor/Versioning/Git.cs b/action/default-build-script/Assets/Editor/Versioning/Git.cs
index 7c060019..c4850e52 100644
--- a/action/default-build-script/Assets/Editor/Versioning/Git.cs
+++ b/action/default-build-script/Assets/Editor/Versioning/Git.cs
@@ -30,6 +30,22 @@ namespace UnityBuilderAction.Versioning
return version;
}
+ ///
+ /// Get the version of the current tag.
+ ///
+ /// Output Format:
+ /// #.* (where # is the major version and * can be any number of any type of character)
+ ///
+ ///
+ public static string GenerateSemanticClassicVersion()
+ {
+ string version = Run(@"tag --points-at HEAD | grep v[0-9]*");
+
+ version = version.Substring(1);
+
+ return version;
+ }
+
///
/// Get the total number of commits.
///
diff --git a/action/default-build-script/Assets/Editor/Versioning/VersionApplicator.cs b/action/default-build-script/Assets/Editor/Versioning/VersionApplicator.cs
new file mode 100644
index 00000000..092bb9bc
--- /dev/null
+++ b/action/default-build-script/Assets/Editor/Versioning/VersionApplicator.cs
@@ -0,0 +1,64 @@
+using System;
+using JetBrains.Annotations;
+using UnityEditor;
+
+namespace UnityBuilderAction.Versioning
+{
+ public class VersionApplicator
+ {
+ enum Strategy
+ {
+ None,
+ Custom,
+ SemanticCommit,
+ SemanticClassic,
+ }
+
+ public static void SetVersionForBuild(string strategy, [CanBeNull] string version)
+ {
+ if (!Enum.TryParse(strategy, out Strategy validatedStrategy)) {
+ throw new Exception($"Invalid versioning argument provided. {strategy} is not a valid strategy.");
+ }
+
+ switch (validatedStrategy) {
+ case Strategy.None:
+ return;
+ case Strategy.Custom:
+ ApplyCustomVersion(version);
+ return;
+ case Strategy.SemanticCommit:
+ ApplySemanticCommitVersion();
+ return;
+ case Strategy.SemanticClassic:
+ ApplySemanticClassicVersion();
+ return;
+ default:
+ throw new NotImplementedException("Version strategy has not been implemented.");
+ }
+ }
+
+ static void ApplyCustomVersion(string version)
+ {
+ Apply(version);
+ }
+
+ static void ApplySemanticCommitVersion()
+ {
+ string version = Git.GenerateSemanticCommitVersion();
+
+ Apply(version);
+ }
+
+ static void ApplySemanticClassicVersion()
+ {
+ string version = Git.GenerateSemanticClassicVersion();
+
+ Apply(version);
+ }
+
+ static void Apply(string version)
+ {
+ PlayerSettings.bundleVersion = version;
+ }
+ }
+}
diff --git a/action/default-build-script/Assets/Editor/Versioning/VersionApplicator.cs.meta b/action/default-build-script/Assets/Editor/Versioning/VersionApplicator.cs.meta
new file mode 100644
index 00000000..a433d24c
--- /dev/null
+++ b/action/default-build-script/Assets/Editor/Versioning/VersionApplicator.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 30483367ddc84699a0da377ccb93769a
+timeCreated: 1587504315
\ No newline at end of file