Files
RebootKit/Editor/Build/BuildVersionBumper.cs
2025-07-30 05:51:39 +02:00

72 lines
2.7 KiB
C#
Executable File

using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;
namespace RebootKit.Editor.Build {
class BuildVersionBumper : IPostprocessBuildWithReport {
public int callbackOrder => 0;
public void OnPostprocessBuild(BuildReport report) {
VersionUpdater.IncrementPatch();
}
}
static class VersionUpdater {
public static bool IncrementVersion(int incrementMajor = 0, int incrementMinor = 0, int incrementPatch = 0) {
if (TryParseVersion(PlayerSettings.bundleVersion, out int major, out int minor, out int patch)) {
major += incrementMajor;
minor += incrementMinor;
patch += incrementPatch;
string newVersion = $"{major}.{minor}.{patch}";
if (SetVersion(newVersion)) {
Debug.Log($"Updated version to: {newVersion}");
} else {
Debug.LogError($"Failed to update version to: {newVersion}");
return false;
}
} else {
Debug.LogError($"Failed to parse current version: {PlayerSettings.bundleVersion}");
return false;
}
return true;
}
public static bool IncrementMajor() => IncrementVersion(incrementMajor: 1);
public static bool IncrementMinor() => IncrementVersion(incrementMinor: 1);
public static bool IncrementPatch() => IncrementVersion(incrementPatch: 1);
static bool SetVersion(string newVersion) {
if (!IsValidVersionFormat(newVersion)) {
Debug.LogError($"Invalid version format: {newVersion}. Expected format: maj.min.ver");
return false;
}
PlayerSettings.bundleVersion = newVersion;
Debug.Log($"Application version updated to: {newVersion}");
return true;
}
static bool IsValidVersionFormat(string version) {
string[] parts = version.Split('.');
return parts.Length == 3 && int.TryParse(parts[0], out _) && int.TryParse(parts[1], out _) && int.TryParse(parts[2], out _);
}
static bool TryParseVersion(string version, out int major, out int minor, out int patch) {
major = -1;
minor = -1;
patch = -1;
string[] parts = version.Split('.');
if (parts.Length != 3) {
return false;
}
return int.TryParse(parts[0], out major) &&
int.TryParse(parts[1], out minor) &&
int.TryParse(parts[2], out patch);
}
}
}