@lark-project/cli
Version:
飞书项目插件开发工具
91 lines (90 loc) • 5.82 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addPublishCommand = void 0;
// ⚠️ 改命令名 / flag / alias 时,同步 grep `lpm` skills/ .claude/skills/ 修文档引用
const path_1 = __importDefault(require("path"));
const types_1 = require("../../types");
const logger_1 = require("../../utils/logger");
const run_script_1 = __importDefault(require("../../utils/run-script"));
const validate_tools_1 = require("../../utils/validate-tools");
function addPublishCommand(program) {
program
.command('publish')
.description('Publish a plugin version.')
.option('--release-notes <release-notes>', '版本描述 / release notes(中文)。普通插件必填;AI 插件忽略(release_app 不消费)')
.option('--artifact-version <artifact-version>', '构建产物版本(由 `lpm release` 输出)。普通插件必填;无前端产物的 AI 应用可省略(按 "0" 处理),开了节点卡片的 ai_node 仍需传')
.option('--version <version>', '版本号(示例:1.0.0);普通插件不传则 patch +1。AI 插件忽略')
.option('--store <store>', '发布当前版本至插件商店:yes / no(不传则继承上一版本)。AI 插件强制 yes')
.option('--upgrade <upgrade>', '更新已安装版本:manual(管理员手动)/ all(自动更新全部)/ limit(指定范围自动更新)[目前只支持 manual]。AI 插件忽略', 'manual')
.option('--scene-type <scene-type>', 'AI 插件用:1=企业版 / 2=ISV 版(默认 1)。普通插件忽略', '1')
// .option('--upgrade-limit-version <upgrade-limit-version>', 'upgrade=limit 时必填:范围版本号')
// .option(
// '--upgrade-limit-type <upgrade-limit-type>',
// 'upgrade=limit 时可选:higher(高于该版本)/ lower(低于该版本)',
// 'higher',
// )
.action(options => {
var _a, _b, _c, _d, _e, _f, _g, _h;
const version = (_a = options.version) === null || _a === void 0 ? void 0 : _a.trim();
const releaseNotes = (_b = options.releaseNotes) === null || _b === void 0 ? void 0 : _b.trim();
const artifactVersion = (_c = options.artifactVersion) === null || _c === void 0 ? void 0 : _c.trim();
const store = (_d = options.store) === null || _d === void 0 ? void 0 : _d.trim();
const upgrade = ((_e = options.upgrade) === null || _e === void 0 ? void 0 : _e.trim()) || 'manual';
const upgradeLimitVersion = (_f = options.upgradeLimitVersion) === null || _f === void 0 ? void 0 : _f.trim();
const upgradeLimitType = (_g = options.upgradeLimitType) === null || _g === void 0 ? void 0 : _g.trim();
const sceneTypeRaw = ((_h = options.sceneType) === null || _h === void 0 ? void 0 : _h.trim()) || '1';
if (version && !(0, validate_tools_1.isValidPluginVersion)(version)) {
logger_1.logger.error(`The version "${version}" is not valid (expected semver x.y.z, e.g. 1.2.3 — leading zeros not allowed except for the digit 0 itself).`);
process.exit(1);
}
// --release-notes / --artifact-version 是否必填由 service 入口按 app_type + resources 决定
// (普通插件必填 artifactVersion;无前端产物的 AI 应用可省略)。command 层不再强校验,避免
// 普通使用者首次给 AI 应用发版时被这条卡住。
const sceneTypeNum = Number(sceneTypeRaw);
if (sceneTypeNum !== 1 && sceneTypeNum !== 2) {
logger_1.logger.error(`--scene-type must be 1 (Builtin) or 2 (ISV), got "${sceneTypeRaw}".`);
process.exit(1);
}
if (store !== undefined && store !== 'yes' && store !== 'no') {
logger_1.logger.error(`--store must be "yes" or "no" (omit to inherit from previous version), got "${store}"`);
process.exit(1);
}
if (upgrade !== 'manual' && upgrade !== 'all' && upgrade !== 'limit') {
logger_1.logger.error(`The upgrade "${upgrade}" is not valid (allowed values: "manual" | "all" | "limit"; defaults to "manual" when omitted).`);
process.exit(1);
}
if (upgrade === 'limit') {
if (!upgradeLimitVersion || !(0, validate_tools_1.isValidPluginVersion)(upgradeLimitVersion)) {
logger_1.logger.error(`The upgradeLimitVersion "${upgradeLimitVersion}" is required when --upgrade=limit and must be a semver x.y.z (e.g. 1.2.3).`);
process.exit(1);
}
if (upgradeLimitType !== 'higher' && upgradeLimitType !== 'lower') {
logger_1.logger.error(`The upgradeLimitType "${upgradeLimitType}" is not valid (allowed values: "higher" | "lower"; required when --upgrade=limit).`);
process.exit(1);
}
}
if (upgrade !== 'limit' && (options.upgradeLimitVersion || options.upgradeLimitType)) {
logger_1.logger.error('The upgradeLimitVersion/upgradeLimitType is only available when upgrade=limit.');
process.exit(1);
}
(0, run_script_1.default)(path_1.default.join(__dirname, '../dispatcher'), [
'--command',
types_1.ECommandName.publish,
'--payload',
JSON.stringify({
version,
releaseNotes,
artifactVersion,
store,
upgrade,
upgradeLimitVersion,
upgradeLimitType,
sceneType: sceneTypeNum,
}),
]);
});
}
exports.addPublishCommand = addPublishCommand;