kit.program/kit/src/remote/publish.js
2024-03-07 15:50:13 +08:00

79 lines
3.1 KiB
JavaScript

const path = require("path")
const fs = require("fs")
const JSON5 = require('json5')
const { pipeline } = require('node:stream/promises');
const objutil = require("../util/objutil")
module.exports = async function publish(remote, meta){
let curPath = process.cwd();
const metaFilePath = path.resolve( curPath, "meta.json" );
if ( ! fs.existsSync( metaFilePath ) ) {
$logger.error("当前路径不包含 meta.json")
return
}
const metaFile = fs.readFileSync(metaFilePath);
const localMeta = JSON5.parse( metaFile );
// 更新版本
const date = new Date();
localMeta.version = `${localMeta.version}.${date.getFullYear()}${(date.getMonth() + 1).toString().padStart(2, '0')}${date.getDate().toString().padStart(2, '0')}${date.getHours().toString().padStart(2, '0')}${date.getMinutes().toString().padStart(2, '0')}${date.getSeconds().toString().padStart(2, '0')}`;
// 确认目录
// const directoryItems = await remote.getDirectoryContents("/modules");
// const modulesFolder = remote.getFileInfoByName(directoryItems, localMeta.id)
if ( ! await remote.client.exists("/modules/" + localMeta.id) ) {
// 创建文件夹
await remote.client.createDirectory("/modules/" + localMeta.id);
}
// 先更新文件
for (let dist of localMeta.dist ) {
const folder = "/modules/" + localMeta.id + "/" + localMeta.version + "/" + dist.os + "/" + dist.platform
await remote.wMkdir( folder );
$logger.info("upload dist", dist.path, fs.existsSync(dist.path))
await remote.wUpload( dist.path , folder + "/" + dist.filename );
}
// remote meta
let remoteMeta = {
"versions" : []
}
try {
const remoteMetaStr = await remote.client.getFileContents("/modules/" + localMeta.id + "/meta.json", { format: "text" });
remoteMeta = JSON5.parse( remoteMetaStr )
} catch (e) {
}
remoteMeta.id = localMeta.id;
remoteMeta.name = localMeta.name;
remoteMeta.desc = localMeta.desc;
remoteMeta.type = localMeta.type;
remoteMeta.vcs = localMeta.vcs;
// 废弃
// remoteMeta.platform = "cross" === localMeta.platform ? ["X86_64", "ARM64"] : localMeta.platform;
// remoteMeta.os = "cross" === localMeta.os ? ["Windows", "Linux", "Alpine"] : localMeta.os;
const dist = objutil.copy(localMeta.dist)
for (let d of dist) {
delete dist.path
}
remoteMeta.latest = {
version : localMeta.version,
dist
}
remoteMeta.versions.push(remoteMeta.latest)
if ( remoteMeta.versions.length >= 20 ) {
remoteMeta.versions = remoteMeta.versions.slice(0, 20);
}
await remote.client.putFileContents("/modules/" + localMeta.id + "/meta.json", JSON5.stringify(remoteMeta, null, 4) , { overwrite: true });
$logger.info("发布成功")
}