mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-20 12:45:05 +00:00
52 lines
2.3 KiB
Lua
52 lines
2.3 KiB
Lua
local args: any = ...
|
|
assert(args, "no arguments passed to script")
|
|
|
|
local input: buffer = args.BinaryInput
|
|
|
|
local AssetService = game:GetService("AssetService")
|
|
local SerializationService = game:GetService("SerializationService")
|
|
local EncodingService = game:GetService("EncodingService")
|
|
|
|
local input_hash: buffer = EncodingService:ComputeBufferHash(input, Enum.HashAlgorithm.Sha256)
|
|
local hex_hash: { string } = table.create(buffer.len(input_hash))
|
|
for i = 0, buffer.len(input_hash) - 1 do
|
|
table.insert(hex_hash, string.format("%02x", buffer.readu8(input_hash, i)))
|
|
end
|
|
|
|
print(`Deserializing plugin file (size: {buffer.len(input)} bytes, hash: {table.concat(hex_hash, "")})`)
|
|
local plugin = SerializationService:DeserializeInstancesAsync(input)[1]
|
|
|
|
local UploadDetails = require(plugin.UploadDetails) :: any
|
|
local PLUGIN_ID = UploadDetails.assetId
|
|
local PLUGIN_NAME = UploadDetails.name
|
|
local PLUGIN_DESCRIPTION = UploadDetails.description
|
|
local PLUGIN_CREATOR_ID = UploadDetails.creatorId
|
|
local PLUGIN_CREATOR_TYPE = UploadDetails.creatorType
|
|
|
|
assert(typeof(PLUGIN_ID) == "number", "UploadDetails did not contain a number field 'assetId'")
|
|
assert(typeof(PLUGIN_NAME) == "string", "UploadDetails did not contain a string field 'name'")
|
|
assert(typeof(PLUGIN_DESCRIPTION) == "string", "UploadDetails did not contain a string field 'description'")
|
|
assert(typeof(PLUGIN_CREATOR_ID) == "number", "UploadDetails did not contain a number field 'creatorId'")
|
|
assert(typeof(PLUGIN_CREATOR_TYPE) == "string", "UploadDetails did not contain a string field 'creatorType'")
|
|
assert(
|
|
Enum.AssetCreatorType:FromName(PLUGIN_CREATOR_TYPE) ~= nil,
|
|
"UploadDetails field 'creatorType' was not a valid member of Enum.AssetCreatorType"
|
|
)
|
|
|
|
print(`Uploading to {PLUGIN_ID}`)
|
|
print(`Plugin Name: {PLUGIN_NAME}`)
|
|
print(`Plugin Description: {PLUGIN_DESCRIPTION}`)
|
|
|
|
local result, version_or_err = AssetService:CreateAssetVersionAsync(plugin, Enum.AssetType.Plugin, PLUGIN_ID, {
|
|
["Name"] = PLUGIN_NAME,
|
|
["Description"] = PLUGIN_DESCRIPTION,
|
|
["CreatorId"] = PLUGIN_CREATOR_ID,
|
|
["CreatorType"] = Enum.AssetCreatorType:FromName(PLUGIN_CREATOR_TYPE),
|
|
})
|
|
|
|
if result ~= Enum.CreateAssetResult.Success then
|
|
error(`Plugin failed to upload because: {result.Name} - {version_or_err}`)
|
|
end
|
|
|
|
print(`Plugin uploaded successfully. New version is {version_or_err}.`)
|