Joey Eamigh 9989fab018
addons?
2025-10-10 14:07:23 -04:00

188 lines
5.8 KiB
GDScript

class_name YourBuil
extends Object
## A wrapper for build data saved during export.
##
## This class is used to reference build data that is generated when
## exporting a project.
## It can [b]only[/b] be used in exported builds with the YourBuil plugin
## enabled. Otherwise its methods will return default values.
## [br][br]
## [YourBuil] should not be instantiated. Instead call its static members
## and methods like so:
## [codeblock]
## var my_str = YourBuil.git_branch + "-" + YourBuil.get_date_string()
## [/codeblock]
# Filename of the build data file available only in exported builds
const _BUILD_DATA_PATH := "res://addons/your_buil/temp.json"
## The [JSON] resource that this class is a wrapper for,
## or [code]null[/code] outside of exported builds.
## The file itself is created during export and deleted after export.
## [br][br]
## You can save copies using [method ResourceSaver.save]:
## [codeblock]
## ResourceSaver.save(YourBuil.json, "res://your_buil.json")
## [/codeblock]
static var json: JSON:
get:
# Lazy load build data file
if json == null and ResourceLoader.exists(_BUILD_DATA_PATH):
json = load(_BUILD_DATA_PATH)
return json
## The current branch, or the empty string [code]""[/code]
## if the project is not in a git repository.
## [br][br]
## This is the result of running [code]git rev-parse --abbrev-ref HEAD[/code]
## in the project directory during export.
static var git_branch: String:
get:
if json == null:
return ""
return json.data.git.branch
## The number of commits in the line from the initial commit to the
## last commit, or [code]0[/code] if the project is not in a git repository.
## [br][br]
## This is the result of running [code]git rev-list --count HEAD[/code]
## in the project directory during export.
static var git_commit_count: int:
get:
if json == null:
return 0
return json.data.git.commit_count
## The hash of the last commit, or the empty string [code]""[/code]
## if the project is not in a git repository.
## This is 40 characters long. Use [method get_git_commit_hash] to shorten it.
## [br][br]
## This is the result of running [code]git rev-parse HEAD[/code]
## in the project directory during export.
static var git_commit_hash: String:
get:
if json == null:
return ""
return json.data.git.commit_hash
## The tag of the last commit, or the empty string [code]""[/code]
## if it has no tag or if the project is not in a git repository.
## If the last commit has more than one tag, the tag will be determined
## following a deterministic process.
## [br][br]
## This is the result of running [code]git describe --exact-match --tags[/code]
## in the project directory during export.
static var git_tag: String:
get:
if json == null:
return ""
return json.data.git.tag
## The year in UTC, or [code]1[/code] outside of exported builds.
## [br][br]
## This is obtained by calling
## [method Time.get_datetime_dict_from_system] during export.
static var year: int:
get:
if json == null:
return 1
return json.data.time.year
## The month in UTC, or [code]1[/code] (January) outside of exported builds.
## [br][br]
## This is obtained by calling
## [method Time.get_datetime_dict_from_system] during export.
static var month: Time.Month:
get:
if json == null:
return 1
return json.data.time.month
## The day in UTC, or [code]1[/code] outside of exported builds.
## [br][br]
## This is obtained by calling
## [method Time.get_datetime_dict_from_system] during export.
static var day: int:
get:
if json == null:
return 1
return json.data.time.day
## The hour in UTC, or [code]0[/code] outside of exported builds.
## [br][br]
## This is obtained by calling
## [method Time.get_datetime_dict_from_system] during export.
static var hour: int:
get:
if json == null:
return 0
return json.data.time.hour
## The minute in UTC, or [code]0[/code] outside of exported builds.
## [br][br]
## This is obtained by calling
## [method Time.get_datetime_dict_from_system] during export.
static var minute: int:
get:
if json == null:
return 0
return json.data.time.minute
## The second in UTC, or [code]0[/code] outside of exported builds.
## [br][br]
## This is obtained by calling
## [method Time.get_datetime_dict_from_system] during export.
static var second: int:
get:
if json == null:
return 0
return json.data.time.second
## Returns [code]true[/code] if build data was saved.
## That should be when the project was exported with the
## YourBuil plugin enabled.
static func has_data() -> bool:
return json != null
## Returns [code]true[/code] if git build data was saved.
## That should be when the project was exported with the
## YourBuil plugin enabled and within a git repository.
static func has_git_data() -> bool:
return not git_commit_hash.is_empty()
## Returns [code]true[/code] if the last commit was tagged.
## This is equivalent to [code]YourBuil.git_tag != ""[/code].
static func has_git_tag() -> bool:
return git_tag != ""
## Returns [member git_commit_hash] shortened to the first
## [param length] characters,
## or returns the empty string [code]""[/code] if the project is not
## in a git repository.
static func get_git_commit_hash(length: int = 40) -> String:
if not has_git_data:
return ""
return git_commit_hash.substr(0, length)
## Arranges [member year], [member month], and [member day] to
## the format YYYY-MM-DD.
static func get_date_string() -> String:
var padded_year := str(year).pad_zeros(4)
var padded_month := str(month).pad_zeros(2)
var padded_day := str(day).pad_zeros(2)
return padded_year + "-" + padded_month + "-" + padded_day
## Arranges [member hour], [member minute], and [member second] to
## the format hh:mm:ss.
static func get_time_string() -> String:
var padded_hour := str(hour).pad_zeros(2)
var padded_minute := str(minute).pad_zeros(2)
var padded_second := str(second).pad_zeros(2)
return padded_hour + ":" + padded_minute + ":" + padded_second