diff options
Diffstat (limited to 'script/publish.lua')
-rw-r--r-- | script/publish.lua | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/script/publish.lua b/script/publish.lua new file mode 100644 index 00000000..7d0321aa --- /dev/null +++ b/script/publish.lua @@ -0,0 +1,189 @@ +local currentPath = debug.getinfo(1, 'S').source:sub(2) +local rootPath = currentPath:gsub('[^/\\]-$', '') +if rootPath == '' then + rootPath = './' +end +dofile(rootPath .. 'platform.lua') +local fs = require 'bee.filesystem' +local subprocess = require 'bee.subprocess' +local platform = require 'bee.platform' +ROOT = fs.absolute(fs.path(rootPath):parent_path()) +EXTENSION = ROOT:parent_path() + +require 'utility' +local json = require 'json' + +local function loadPackage() + local buf = io.load(EXTENSION / 'package.json') + if not buf then + error(ROOT:string() .. '|' .. EXTENSION:string()) + end + local package = json.decode(buf) + return package.version +end + +local function updateNodeModules(out, postinstall) + local current = fs.current_path() + fs.current_path(out) + local cmd = io.popen(postinstall) + for line in cmd:lines 'l' do + print(line) + end + local suc = cmd:close() + if not suc then + error('更新NodeModules失败!') + end + fs.current_path(current) +end + +local function createDirectory(version) + local out = EXTENSION / 'publish' / version + fs.create_directories(out) + return out +end + +local function copyFiles(root, out) + return function (dirs) + local count = 0 + local function copy(relative, mode) + local source = root / relative + local target = out / relative + if not fs.exists(source) then + return + end + if fs.is_directory(source) then + fs.create_directory(target) + if mode == true then + for path in source:list_directory() do + copy(relative / path:filename(), true) + end + else + for name, v in pairs(mode) do + copy(relative / name, v) + end + end + else + fs.copy_file(source, target) + count = count + 1 + end + end + + copy(fs.path '', dirs) + return count + end +end + +local function runTest(root) + local ext = platform.OS == 'Windows' and '.exe' or '' + local exe = root / platform.OS / 'bin' / 'lua-language-server' .. ext + local test = root / 'test.lua' + local lua = subprocess.spawn { + exe, + test, + '-E', + cwd = root, + stdout = true, + stderr = true, + } + for line in lua.stdout:lines 'l' do + print(line) + end + lua:wait() + local err = lua.stderr:read 'a' + if err ~= '' then + error(err) + end +end + +local function removeFiles(out) + return function (dirs) + local function remove(relative, mode) + local target = out / relative + if not fs.exists(target) then + return + end + if fs.is_directory(target) then + if mode == true then + for path in target:list_directory() do + remove(relative / path:filename(), true) + end + fs.remove(target) + else + for name, v in pairs(mode) do + remove(relative / name, v) + end + end + else + fs.remove(target) + end + end + + remove(fs.path '', dirs) + end +end + +local version = loadPackage() +print('版本号为:' .. version) + +local out = createDirectory(version) + +print('清理目录...') +removeFiles(out)(true) + +print('开始复制文件...') +local count = copyFiles(EXTENSION , out) { + ['client'] = { + ['node_modules'] = true, + ['out'] = true, + ['package-lock.json'] = true, + ['package.json'] = true, + ['tsconfig.json'] = true, + }, + ['server'] = { + ['Windows'] = true, + ['macOS'] = true, + ['Linux'] = true, + ['libs'] = true, + ['locale'] = true, + ['src'] = true, + ['test'] = true, + ['main.lua'] = true, + ['platform.lua'] = true, + ['test.lua'] = true, + ['build_package.lua'] = true, + }, + ['images'] = { + ['logo.png'] = true, + }, + ['syntaxes'] = true, + ['package-lock.json'] = true, + ['package.json'] = true, + ['README.md'] = true, + ['tsconfig.json'] = true, + ['package.nls.json'] = true, + ['package.nls.zh-cn.json'] = true, +} +print(('复制了[%d]个文件'):format(count)) + +print('开始测试...') +runTest(out / 'server') + +print('删除多余文件...') +removeFiles(out) { + ['server'] = { + ['log'] = true, + ['test'] = true, + ['test.lua'] = true, + ['build_package.lua'] = true, + }, +} + +local path = EXTENSION / 'publish' / 'lua' +print('清理发布目录...') +removeFiles(path)(true) + +print('复制到发布目录...') +local count = copyFiles(out, path)(true) +print(('复制了[%d]个文件'):format(count)) + +print('完成') |