Update build.lua

This commit is contained in:
Ale32bit 2016-11-07 19:33:49 +01:00 committed by GitHub
parent 17c9ae51f4
commit baa06a07d5

View file

@ -3,6 +3,7 @@ if not sPhone then
print("build requires sPhone") print("build requires sPhone")
end end
if #args < 2 then if #args < 2 then
print("sPhone Application Package Builder")
print("Usage: build <App Folder> <Output>") print("Usage: build <App Folder> <Output>")
return return
end end
@ -10,7 +11,7 @@ end
local dir = args[1] local dir = args[1]
local output = args[2] local output = args[2]
local final = {} local final = {}
local builderVersion = 1 local builderVersion = 1.1
if not fs.exists(dir) or not fs.isDir(dir) then if not fs.exists(dir) or not fs.isDir(dir) then
print("Input must be a folder") print("Input must be a folder")
@ -63,9 +64,23 @@ print("Name:",_config.name)
print("Author:",_config.author) print("Author:",_config.author)
print("Version:",_config.version) print("Version:",_config.version)
print("ID:",_config.id) print("ID:",_config.id)
print("Main:",_config.main)
if not _config.id then
printError("ID not found")
print("Build aborted")
return
end
if not _config.main then
printError("Main file not set")
print("Build aborted")
return
end
if string.getExtension(output) ~= "spk" then if string.getExtension(output) ~= "spk" then
printError("TIP: Use .spk extension") output = output..".spk"
end end
print("Building...") print("Building...")
@ -77,7 +92,87 @@ result["config"] = textutils.serialize(_config)
local newResult = textutils.serialize(result) local newResult = textutils.serialize(result)
local info = "--\n-- sPhone Application Package\n-- Built with SPK builder "..builderVersion.."\n--" local info = "--\n-- sPhone Application Package\n-- Built with SPK builder "..builderVersion.."\n--"
local f = fs.open(output,"w") local f = fs.open("/tmp/build/spk/builds/".._config.id,"w")
f.write(info.."\n"..newResult) f.write(info.."\n"..newResult)
f.close() f.close()
print("Testing...")
local f = fs.open("/tmp/build/spk/builds/".._config.id,"r")
local script = f.readAll()
f.close()
script = textutils.unserialize(script)
if not script then
print("SPK corrupted")
print("Build aborted")
return
end
local function writeFile(patha,contenta)
local file = fs.open(patha,"w")
file.write(contenta)
file.close()
end
function writeDown(inputa,dira)
for i,v in pairs(inputa) do
if type(v) == "table" then
writeDown(v,dira.."/"..i)
elseif type(v) == "string" then
writeFile(dira.."/"..i,v)
end
end
end
writeDown(textutils.unserialize(script.files),"/tmp/build/spk/tests/".._config.id.."/files")
local f = fs.open("/tmp/build/spk/tests/".._config.id.."/.spk","w")
f.write(textutils.serialize(_config))
f.close()
print("Running test...")
local ok, err = pcall(function()
setfenv(loadfile("/tmp/build/spk/tests/".._config.id.."/files/".._config.main), setmetatable({
spk = {
getName = function()
return (_config.name or nil)
end,
getID = function()
return (_config.id or nil)
end,
getPath = function()
return "/tmp/build/spk/tests/".._config.id
end,
getDataPath = function()
return "/tmp/build/spk/tests/".._config.id.."/data"
end,
getAuthor = function()
return (_config.author or nil)
end,
getVersion = function()
return (_config.version or nil)
end,
open = function(file, mode)
return fs.open("/tmp/build/spk/tests/".._config.id.."/data/"..file,mode)
end,
},
string = string,
sPhone = sPhone,
}, {__index = getfenv()}))
end)
if not ok then
print("Test failed")
print(err)
print("Build aborted")
return
end
print("Test completed")
fs.copy("/tmp/build/spk/builds/".._config.id,output)