mirror of
https://github.com/certd/certd.git
synced 2026-07-17 11:37:32 +08:00
Merge branch 'v2-dev' into v2_audit_log
This commit is contained in:
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.42.5](https://github.com/certd/certd/compare/v1.42.4...v1.42.5) (2026-07-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.42.4](https://github.com/certd/certd/compare/v1.42.3...v1.42.4) (2026-07-11)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-huawei",
|
||||
"private": false,
|
||||
"version": "1.42.4",
|
||||
"version": "1.42.5",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
"types": "./dist/d/index.d.ts",
|
||||
@@ -26,9 +26,10 @@
|
||||
"@typescript-eslint/eslint-plugin": "^8.26.1",
|
||||
"@typescript-eslint/parser": "^8.26.1",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^8.57.0",
|
||||
"esmock": "^2.7.5",
|
||||
"prettier": "3.3.3",
|
||||
"tslib": "^2.8.1"
|
||||
},
|
||||
"gitHead": "268cd6cc9cb4f1f3d5d5d77859a82f18f0cb6db7"
|
||||
"gitHead": "83495b32138cf831b4ea02054d12981d9787ebf0"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.42.5](https://github.com/certd/certd/compare/v1.42.4...v1.42.5) (2026-07-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.42.4](https://github.com/certd/certd/compare/v1.42.3...v1.42.4) (2026-07-11)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-iframe",
|
||||
"private": false,
|
||||
"version": "1.42.4",
|
||||
"version": "1.42.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -37,5 +37,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "268cd6cc9cb4f1f3d5d5d77859a82f18f0cb6db7"
|
||||
"gitHead": "83495b32138cf831b4ea02054d12981d9787ebf0"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.42.5](https://github.com/certd/certd/compare/v1.42.4...v1.42.5) (2026-07-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.42.4](https://github.com/certd/certd/compare/v1.42.3...v1.42.4) (2026-07-11)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/jdcloud",
|
||||
"version": "1.42.4",
|
||||
"version": "1.42.5",
|
||||
"description": "jdcloud openApi sdk",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
@@ -35,6 +35,7 @@
|
||||
"chai": "^5.1.0",
|
||||
"config": "^1.30.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^8.57.0",
|
||||
"esmock": "^2.7.5",
|
||||
"js-yaml": "^3.11.0",
|
||||
"mocha": "^10.6.0",
|
||||
@@ -62,5 +63,5 @@
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
"gitHead": "268cd6cc9cb4f1f3d5d5d77859a82f18f0cb6db7"
|
||||
"gitHead": "83495b32138cf831b4ea02054d12981d9787ebf0"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.42.5](https://github.com/certd/certd/compare/v1.42.4...v1.42.5) (2026-07-15)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.42.4](https://github.com/certd/certd/compare/v1.42.3...v1.42.4) (2026-07-11)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-k8s",
|
||||
"private": false,
|
||||
"version": "1.42.4",
|
||||
"version": "1.42.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -21,7 +21,7 @@
|
||||
"lint": "eslint --fix"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.42.4",
|
||||
"@certd/basic": "^1.42.5",
|
||||
"@kubernetes/client-node": "0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -38,5 +38,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "268cd6cc9cb4f1f3d5d5d77859a82f18f0cb6db7"
|
||||
"gitHead": "83495b32138cf831b4ea02054d12981d9787ebf0"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.42.5](https://github.com/certd/certd/compare/v1.42.4...v1.42.5) (2026-07-15)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复上传到cos报runtimeDepsService未初始化的问题 ([167b303](https://github.com/certd/certd/commit/167b303faeca02cc11cf97e4be2a3df914852167))
|
||||
|
||||
## [1.42.4](https://github.com/certd/certd/compare/v1.42.3...v1.42.4) (2026-07-11)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/lib-server",
|
||||
"version": "1.42.4",
|
||||
"version": "1.42.5",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -29,11 +29,11 @@
|
||||
],
|
||||
"license": "AGPL",
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.42.4",
|
||||
"@certd/basic": "^1.42.4",
|
||||
"@certd/pipeline": "^1.42.4",
|
||||
"@certd/plugin-lib": "^1.42.4",
|
||||
"@certd/plus-core": "^1.42.4",
|
||||
"@certd/acme-client": "^1.42.5",
|
||||
"@certd/basic": "^1.42.5",
|
||||
"@certd/pipeline": "^1.42.5",
|
||||
"@certd/plugin-lib": "^1.42.5",
|
||||
"@certd/plus-core": "^1.42.5",
|
||||
"@midwayjs/cache": "3.14.0",
|
||||
"@midwayjs/core": "3.20.11",
|
||||
"@midwayjs/i18n": "3.20.13",
|
||||
@@ -69,5 +69,5 @@
|
||||
"typeorm": "^0.3.20",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "268cd6cc9cb4f1f3d5d5d77859a82f18f0cb6db7"
|
||||
"gitHead": "83495b32138cf831b4ea02054d12981d9787ebf0"
|
||||
}
|
||||
|
||||
@@ -1,15 +1,6 @@
|
||||
import { HttpClient, ILogger, utils } from "@certd/basic";
|
||||
import {upperFirst} from "lodash-es";
|
||||
import {
|
||||
accessRegistry,
|
||||
FormItemProps,
|
||||
IAccessService,
|
||||
IRuntimeDepsService,
|
||||
IServiceGetter,
|
||||
PluginRequestHandleReq,
|
||||
Registrable
|
||||
} from "@certd/pipeline";
|
||||
|
||||
import { upperFirst } from "lodash-es";
|
||||
import { accessRegistry, FormItemProps, IAccessService, IServiceGetter, PluginRequestHandleReq, Registrable, getRuntimeDepsService } from "@certd/pipeline";
|
||||
|
||||
export type AddonRequestHandleReqInput<T = any> = {
|
||||
id?: number;
|
||||
@@ -19,7 +10,7 @@ export type AddonRequestHandleReqInput<T = any> = {
|
||||
|
||||
export type AddonRequestHandleReq<T = any> = {
|
||||
addonType: string;
|
||||
} &PluginRequestHandleReq<AddonRequestHandleReqInput<T>>;
|
||||
} & PluginRequestHandleReq<AddonRequestHandleReqInput<T>>;
|
||||
|
||||
export type AddonInputDefine = FormItemProps & {
|
||||
title: string;
|
||||
@@ -48,8 +39,6 @@ export type AddonInstanceConfig = {
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
export interface IAddon {
|
||||
ctx: AddonContext;
|
||||
[key: string]: any;
|
||||
@@ -67,13 +56,9 @@ export abstract class BaseAddon implements IAddon {
|
||||
ctx!: AddonContext;
|
||||
http!: HttpClient;
|
||||
logger!: ILogger;
|
||||
runtimeDepsService?: IRuntimeDepsService;
|
||||
|
||||
async importRuntime(specifier: string) {
|
||||
if (!this.runtimeDepsService) {
|
||||
return await import(specifier);
|
||||
}
|
||||
return await this.runtimeDepsService.importRuntime(specifier, this.logger);
|
||||
return await getRuntimeDepsService().importRuntime(specifier, this.logger);
|
||||
}
|
||||
|
||||
title!: string;
|
||||
@@ -85,7 +70,7 @@ export abstract class BaseAddon implements IAddon {
|
||||
if (accessId == null) {
|
||||
throw new Error("您还没有配置授权");
|
||||
}
|
||||
const accessService = await this.ctx.serviceGetter.get<IAccessService>("accessService")
|
||||
const accessService = await this.ctx.serviceGetter.get<IAccessService>("accessService");
|
||||
let res: any = null;
|
||||
if (isCommon) {
|
||||
res = await accessService.getCommonById(accessId);
|
||||
@@ -118,15 +103,12 @@ export abstract class BaseAddon implements IAddon {
|
||||
this.ctx = ctx;
|
||||
this.http = ctx.http;
|
||||
this.logger = ctx.logger;
|
||||
if (!this.runtimeDepsService && this.ctx.serviceGetter) {
|
||||
this.runtimeDepsService = await this.ctx.serviceGetter.get("runtimeDepsService");
|
||||
}
|
||||
}
|
||||
setDefine = (define:AddonDefine) => {
|
||||
setDefine = (define: AddonDefine) => {
|
||||
this.define = define;
|
||||
};
|
||||
|
||||
async onRequest(req:AddonRequestHandleReq) {
|
||||
async onRequest(req: AddonRequestHandleReq) {
|
||||
if (!req.action) {
|
||||
throw new Error("action is required");
|
||||
}
|
||||
@@ -144,10 +126,8 @@ export abstract class BaseAddon implements IAddon {
|
||||
}
|
||||
throw new Error(`action ${req.action} not found`);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
export interface IAddonGetter {
|
||||
getById<T = any>(id: any): Promise<T>;
|
||||
getCommonById<T = any>(id: any): Promise<T>;
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.42.5](https://github.com/certd/certd/compare/v1.42.4...v1.42.5) (2026-07-15)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 给SQLITE_IOERR_WRITE增加友好报错提示,将certd:latest镜像改为certd:slim ([b91c9e4](https://github.com/certd/certd/commit/b91c9e4ea671cb359ef164e27864de1d66cba9d3))
|
||||
|
||||
## [1.42.4](https://github.com/certd/certd/compare/v1.42.3...v1.42.4) (2026-07-11)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/midway-flyway-js",
|
||||
"version": "1.42.4",
|
||||
"version": "1.42.5",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -52,5 +52,5 @@
|
||||
"typeorm": "^0.3.20",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "268cd6cc9cb4f1f3d5d5d77859a82f18f0cb6db7"
|
||||
"gitHead": "83495b32138cf831b4ea02054d12981d9787ebf0"
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs';
|
||||
import { QueryRunner, Table } from 'typeorm';
|
||||
import { FlywayHistory } from './entity.js';
|
||||
import * as crypto from 'crypto';
|
||||
import * as path from "path";
|
||||
import * as fs from "fs";
|
||||
import { QueryRunner, Table } from "typeorm";
|
||||
import { FlywayHistory } from "./entity.js";
|
||||
import * as crypto from "crypto";
|
||||
|
||||
/**
|
||||
* 脚本文件信息
|
||||
@@ -32,10 +32,10 @@ const DefaultLogger = {
|
||||
},
|
||||
};
|
||||
|
||||
let customLogger:any = null;
|
||||
export function setFlywayLogger (logger: any) {
|
||||
let customLogger: any = null;
|
||||
export function setFlywayLogger(logger: any) {
|
||||
customLogger = logger;
|
||||
};
|
||||
}
|
||||
|
||||
export class Flyway {
|
||||
scriptDir;
|
||||
@@ -45,8 +45,8 @@ export class Flyway {
|
||||
connection;
|
||||
logger;
|
||||
constructor(opts: any) {
|
||||
this.scriptDir = opts.scriptDir ?? 'db/migration';
|
||||
this.flywayTableName = opts.flywayTableName ?? 'flyway_history';
|
||||
this.scriptDir = opts.scriptDir ?? "db/migration";
|
||||
this.flywayTableName = opts.flywayTableName ?? "flyway_history";
|
||||
this.baseline = opts.baseline ?? false;
|
||||
this.allowHashNotMatch = opts.allowHashNotMatch ?? false;
|
||||
this.logger = customLogger || opts.logger || DefaultLogger;
|
||||
@@ -54,9 +54,9 @@ export class Flyway {
|
||||
}
|
||||
|
||||
async run(ignores?: (RegExp | string)[]) {
|
||||
this.logger.info('[ midfly ] start-------------');
|
||||
this.logger.info("[ midfly ] start-------------");
|
||||
if (!fs.existsSync(this.scriptDir)) {
|
||||
this.logger.info('[ midfly ] scriptDir<' + this.scriptDir + '> not found');
|
||||
this.logger.info("[ midfly ] scriptDir<" + this.scriptDir + "> not found");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ export class Flyway {
|
||||
continue;
|
||||
}
|
||||
if (!file.isBaseline) {
|
||||
this.logger.info('need exec script file: ', file.script);
|
||||
this.logger.info("need exec script file: ", file.script);
|
||||
//执行sql文件
|
||||
if (/\.sql$/.test(file.script)) {
|
||||
await this.execSql(filepath, queryRunner);
|
||||
@@ -87,7 +87,7 @@ export class Flyway {
|
||||
// await this.execJsOrTs(filepath, t);
|
||||
// }
|
||||
} else {
|
||||
this.logger.info('baseline script file: ', file.script);
|
||||
this.logger.info("baseline script file: ", file.script);
|
||||
}
|
||||
await this.storeSqlExecLog(file.script, filepath, true, queryRunner);
|
||||
await queryRunner.commitTransaction();
|
||||
@@ -95,10 +95,15 @@ export class Flyway {
|
||||
this.logger.error(err);
|
||||
await this.storeSqlExecLog(file.script, filepath, false, queryRunner);
|
||||
await queryRunner.rollbackTransaction();
|
||||
|
||||
if (err.code === "SQLITE_IOERR_WRITE") {
|
||||
this.logger.warn("SQLite数据库写入失败,可能您的操作系统版本太低,请将「certd:latest」镜像改为「certd:slim」即可。(如需指定版本可以修改成「certd:[version]-slim」)", file.script);
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
this.logger.info('[ midfly ] end-------------');
|
||||
this.logger.info("[ midfly ] end-------------");
|
||||
}
|
||||
|
||||
private async storeSqlExecLog(filename: string, filepath: string, success: boolean, queryRunner: QueryRunner) {
|
||||
@@ -160,17 +165,17 @@ export class Flyway {
|
||||
name: this.flywayTableName,
|
||||
columns: [
|
||||
{
|
||||
name: 'id',
|
||||
name: "id",
|
||||
type: this.connection.driver.normalizeType({
|
||||
type: this.connection.driver.mappedDataTypes.migrationId,
|
||||
}),
|
||||
isGenerated: true,
|
||||
generationStrategy: 'increment',
|
||||
generationStrategy: "increment",
|
||||
isPrimary: true,
|
||||
isNullable: false,
|
||||
},
|
||||
{
|
||||
name: 'timestamp',
|
||||
name: "timestamp",
|
||||
type: this.connection.driver.normalizeType({
|
||||
type: this.connection.driver.mappedDataTypes.migrationTimestamp,
|
||||
}),
|
||||
@@ -178,23 +183,23 @@ export class Flyway {
|
||||
isNullable: false,
|
||||
},
|
||||
{
|
||||
name: 'name',
|
||||
name: "name",
|
||||
type: this.connection.driver.normalizeType({
|
||||
type: this.connection.driver.mappedDataTypes.migrationName,
|
||||
}),
|
||||
isNullable: false,
|
||||
},
|
||||
{
|
||||
name: 'hash',
|
||||
name: "hash",
|
||||
type: this.connection.driver.normalizeType({
|
||||
type: this.connection.driver.mappedDataTypes.migrationName,
|
||||
}),
|
||||
isNullable: true,
|
||||
},
|
||||
{
|
||||
name: 'success',
|
||||
name: "success",
|
||||
type: this.connection.driver.normalizeType({
|
||||
type: 'boolean',
|
||||
type: "boolean",
|
||||
}),
|
||||
isNullable: true,
|
||||
},
|
||||
@@ -210,7 +215,7 @@ export class Flyway {
|
||||
}
|
||||
let ret = false;
|
||||
for (const ignore of ignores) {
|
||||
if (typeof ignore === 'string' && file === ignore) {
|
||||
if (typeof ignore === "string" && file === ignore) {
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
@@ -233,20 +238,20 @@ export class Flyway {
|
||||
if (history.hash !== hash && this.allowHashNotMatch === false) {
|
||||
throw new Error(file + `hash conflict ,old: ${history.hash} != new: ${hash}`);
|
||||
}
|
||||
this.logger.info('[ midfly ] script<' + file + '> already executed');
|
||||
this.logger.info("[ midfly ] script<" + file + "> already executed");
|
||||
return true;
|
||||
}
|
||||
this.logger.info('[ midfly ] script<' + file + '> not yet execute');
|
||||
this.logger.info("[ midfly ] script<" + file + "> not yet execute");
|
||||
return false;
|
||||
}
|
||||
|
||||
private async getFileHash(filepath: string) {
|
||||
const content = fs.readFileSync(filepath).toString();
|
||||
return crypto.createHash('md5').update(content.toString()).digest('hex');
|
||||
return crypto.createHash("md5").update(content.toString()).digest("hex");
|
||||
}
|
||||
|
||||
private async execSql(filepath: string, queryRunner: QueryRunner) {
|
||||
this.logger.info('[ midfly ] exec ', filepath);
|
||||
this.logger.info("[ midfly ] exec ", filepath);
|
||||
const content = fs.readFileSync(filepath).toString().trim();
|
||||
const arr = this.splitSql2Array(content);
|
||||
for (const s of arr) {
|
||||
@@ -255,11 +260,11 @@ export class Flyway {
|
||||
}
|
||||
|
||||
private async execOnePart(sql: string, queryRunner: QueryRunner) {
|
||||
this.logger.debug('exec sql index: ', sql);
|
||||
this.logger.debug("exec sql index: ", sql);
|
||||
try {
|
||||
await queryRunner.query(sql);
|
||||
} catch (err: any) {
|
||||
this.logger.error('exec sql error : ', err.message, err);
|
||||
this.logger.error("exec sql error : ", err.message, err);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
@@ -275,11 +280,11 @@ export class Flyway {
|
||||
|
||||
const temp = String(str).trim();
|
||||
|
||||
if (temp === 'null') {
|
||||
if (temp === "null") {
|
||||
return [];
|
||||
}
|
||||
|
||||
const semicolon = ';';
|
||||
const semicolon = ";";
|
||||
const deepChars = ['"', "'"];
|
||||
const splits = [];
|
||||
|
||||
@@ -289,7 +294,7 @@ export class Flyway {
|
||||
|
||||
if (deepChars.indexOf(charAt) >= 0) {
|
||||
//如果是深度char
|
||||
if (i !== 0 && temp.charAt(i - 1) === '\\') {
|
||||
if (i !== 0 && temp.charAt(i - 1) === "\\") {
|
||||
//如果前一个是转义字符,忽略它
|
||||
} else {
|
||||
//说明需要进出深度了
|
||||
|
||||
Reference in New Issue
Block a user