summaryrefslogtreecommitdiff
path: root/script/publish.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/publish.lua')
-rw-r--r--script/publish.lua189
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('完成')