188 lines
5.8 KiB
GDScript
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
|