fix(GOV-009): 完成脚手架审查整改
This commit is contained in:
@@ -73,8 +73,8 @@ export function assertSafeDevelopmentConfiguration(config) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 客户端与服务端分别校验,防止用 MySQL 8 客户端生成带有 5.7 无法稳定恢复的语法,
|
||||
* 同时核对数据库自身字符规则,而不是信任 env 中的声明值。
|
||||
* 客户端保持 5.7 系列以生成兼容导出;服务端固定 5.7.42,避免开发、测试和生产
|
||||
* 由不同补丁行为产生漂移。同时核对数据库真实字符规则,而不是信任 env 声明。
|
||||
*/
|
||||
export function assertMysql57Metadata(metadata) {
|
||||
if (!/^5\.7\.\d+(?:[-+].*)?$/.test(metadata.mysqlClientVersion ?? '')) {
|
||||
@@ -85,8 +85,8 @@ export function assertMysql57Metadata(metadata) {
|
||||
`mysqldump 客户端必须为 5.7.x,实际 ${metadata.mysqldumpClientVersion || '(空)'}`,
|
||||
);
|
||||
}
|
||||
if (!/^5\.7\.\d+(?:[-+].*)?$/.test(metadata.serverVersion ?? '')) {
|
||||
throw new Error(`MySQL 服务端必须为 5.7.x,实际 ${metadata.serverVersion || '(空)'}`);
|
||||
if (!/^5\.7\.42(?:[-+].*)?$/.test(metadata.serverVersion ?? '')) {
|
||||
throw new Error(`MySQL 服务端必须为 5.7.42,实际 ${metadata.serverVersion || '(空)'}`);
|
||||
}
|
||||
requireExactValue(metadata.databaseCharset, REQUIRED_CHARSET, '开发数据库字符集不符合要求');
|
||||
requireExactValue(
|
||||
@@ -320,7 +320,9 @@ export function buildCapturedArtifacts(metadata, sql) {
|
||||
throw new Error(`应用版本格式无效:${metadata.applicationVersion || '(空)'}`);
|
||||
}
|
||||
const normalizedSql = normalizeSchemaSql(sql);
|
||||
if (!normalizedSql.trim()) {
|
||||
const objectCounts = countSchemaObjects(normalizedSql);
|
||||
// mysqldump 对空库仍会输出会话 SET 与头尾注释;结构对象计数为零才是空库判据。
|
||||
if (Object.values(objectCounts).every((count) => count === 0)) {
|
||||
return buildCapturedEmptyArtifacts(metadata);
|
||||
}
|
||||
const schemaSha256 = sha256(normalizedSql);
|
||||
@@ -328,7 +330,7 @@ export function buildCapturedArtifacts(metadata, sql) {
|
||||
...metadata,
|
||||
status: 'captured',
|
||||
captured: true,
|
||||
objectCounts: countSchemaObjects(normalizedSql),
|
||||
objectCounts,
|
||||
schemaSha256,
|
||||
});
|
||||
return Object.freeze({
|
||||
@@ -661,7 +663,7 @@ export function runBaselineGeneration(options) {
|
||||
assertMysql57Metadata({
|
||||
mysqlClientVersion,
|
||||
mysqldumpClientVersion,
|
||||
serverVersion: '5.7.0-pending-server-check',
|
||||
serverVersion: '5.7.42-pending-server-check',
|
||||
databaseCharset: REQUIRED_CHARSET,
|
||||
databaseCollation: REQUIRED_COLLATION,
|
||||
});
|
||||
@@ -713,11 +715,7 @@ export function getCurrentReleasedVersion(repositoryRoot) {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* not_applicable 清单只记录生成当时 MySQL 未启用,不能永久替代真实结构基线。
|
||||
* 每次校验都重新读取固定开发环境配置;一旦开发库启用,旧清单立即失效,强制
|
||||
* 下一版本开发开始前先从开发库生成 captured 基线。
|
||||
*/
|
||||
/** 已发布清单是不可变历史;当前开发配置只决定下一次基线生成结果。 */
|
||||
export function assertNotApplicableMatchesDevelopmentConfiguration(repositoryRoot, result) {
|
||||
// 已发布清单记录的是发布当时的数据库启用状态。当前开发配置只能决定下一份
|
||||
// 基线如何生成,不能反向否定或改写已发布版本的历史事实。
|
||||
|
||||
Reference in New Issue
Block a user