test(M00): 增加README配置一致性检查
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$readmePath = "README.md"
|
||||
$configPath = "docs/configuration.md"
|
||||
$baselinePath = "docs/current-baseline.md"
|
||||
$expectedSpec = "V5.2.md"
|
||||
$expectedOrigin = "ssh://git@git.txyundm.cn:2222/panda/qipai.git"
|
||||
|
||||
foreach ($path in @($readmePath, $configPath, $baselinePath, $expectedSpec)) {
|
||||
if (-not (Test-Path $path)) {
|
||||
throw "Required README/config baseline file missing: $path"
|
||||
}
|
||||
}
|
||||
|
||||
$versionFiles = Get-ChildItem -File -Filter "V*.md" | Sort-Object Name
|
||||
$currentSpec = $versionFiles[-1].Name
|
||||
if ($currentSpec -ne $expectedSpec) {
|
||||
throw "Current highest V*.md must be $expectedSpec, actual: $currentSpec"
|
||||
}
|
||||
|
||||
$readme = Get-Content -Raw -Encoding UTF8 $readmePath
|
||||
$config = Get-Content -Raw -Encoding UTF8 $configPath
|
||||
$spec = Get-Content -Raw -Encoding UTF8 $expectedSpec
|
||||
$baseline = Get-Content -Raw -Encoding UTF8 $baselinePath
|
||||
|
||||
$recentEngineeringLabel = [regex]::Unescape("\u6700\u8fd1\u5de5\u7a0b\u63d0\u4ea4")
|
||||
$nextEngineeringLabel = [regex]::Unescape("\u4e0b\u4e00\u5de5\u7a0b\u76ee\u6807")
|
||||
$pendingWord = [regex]::Unescape("\u5f85")
|
||||
|
||||
$requiredSharedValues = @(
|
||||
"V5.2.md",
|
||||
"D:\qipai",
|
||||
"/mnt/d/qipai",
|
||||
$expectedOrigin,
|
||||
"https://api.txyundm.cn",
|
||||
"https://api.txyundm.cn/app-api",
|
||||
"https://api.txyundm.cn/admin-api",
|
||||
"101.42.38.246:1883",
|
||||
"admin123",
|
||||
"EMQX",
|
||||
"5.8.9",
|
||||
"MQTTX",
|
||||
"1.13.0"
|
||||
)
|
||||
|
||||
foreach ($value in $requiredSharedValues) {
|
||||
if (-not $readme.Contains($value)) {
|
||||
throw "README missing required value: $value"
|
||||
}
|
||||
if (-not $spec.Contains($value)) {
|
||||
throw "V5.2 missing required value: $value"
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($value in @("V5.2.md", $expectedOrigin, "admin123", "101.42.38.246:1883")) {
|
||||
if (-not $config.Contains($value)) {
|
||||
throw "configuration.md missing required value: $value"
|
||||
}
|
||||
}
|
||||
|
||||
$readmeLines = Get-Content -Encoding UTF8 $readmePath
|
||||
$recentLine = $readmeLines | Where-Object { $_.Contains($recentEngineeringLabel) } | Select-Object -First 1
|
||||
$nextLine = $readmeLines | Where-Object { $_.Contains($nextEngineeringLabel) } | Select-Object -First 1
|
||||
if (-not $recentLine) {
|
||||
throw "README missing recent engineering commit line"
|
||||
}
|
||||
if (-not $nextLine) {
|
||||
throw "README missing next engineering target line"
|
||||
}
|
||||
|
||||
if ($recentLine.Contains($pendingWord)) {
|
||||
throw "README recent engineering commit is still a placeholder"
|
||||
}
|
||||
if ($nextLine.Contains($pendingWord)) {
|
||||
throw "README next engineering target is still a placeholder"
|
||||
}
|
||||
|
||||
$latestEngineeringCommit = $null
|
||||
$logLines = & git log --format="%h %s" -40
|
||||
foreach ($line in $logLines) {
|
||||
if ($line -notmatch "^[0-9a-f]+ docs\(") {
|
||||
$latestEngineeringCommit = ($line -split "\s+", 2)[0]
|
||||
break
|
||||
}
|
||||
}
|
||||
if (-not $latestEngineeringCommit) {
|
||||
throw "Could not find a recent engineering commit"
|
||||
}
|
||||
|
||||
if ($readme -notmatch [regex]::Escape($latestEngineeringCommit)) {
|
||||
throw "README recent engineering commit must reference latest engineering commit $latestEngineeringCommit"
|
||||
}
|
||||
|
||||
if ($baseline -notmatch '(?m)^>\s*audited_commit:\s*`?[0-9a-f]{7,40}`?') {
|
||||
throw "current-baseline.md must record audited_commit"
|
||||
}
|
||||
if ($baseline -notmatch '(?m)^>\s*next_engineering_target:\s*\S') {
|
||||
throw "current-baseline.md must record next_engineering_target"
|
||||
}
|
||||
|
||||
Write-Host "PASS: README, V5.2 and configuration index are consistent."
|
||||
@@ -10,6 +10,10 @@ $requiredPaths = @(
|
||||
"deploy/README.md",
|
||||
"deploy/VERSION",
|
||||
"docs/current-baseline.md",
|
||||
"README.md",
|
||||
"V5.1.md",
|
||||
"V5.2.md",
|
||||
"docs/configuration.md",
|
||||
"docs/module-status.md",
|
||||
"docs/feature-status.md",
|
||||
"docs/workspace-status.md",
|
||||
@@ -23,6 +27,7 @@ $requiredPaths = @(
|
||||
"scripts/dev/windows/check-large-files.ps1",
|
||||
"scripts/dev/windows/check-line-endings.ps1",
|
||||
"scripts/dev/windows/check-release-manifest.ps1",
|
||||
"scripts/dev/windows/check-readme-config.ps1",
|
||||
"scripts/dev/windows/check-status-docs.ps1",
|
||||
"scripts/dev/wsl/check-env.sh",
|
||||
"scripts/dev/wsl/check-emqx.sh",
|
||||
|
||||
@@ -7,6 +7,7 @@ $ErrorActionPreference = "Stop"
|
||||
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-repo-completeness.ps1
|
||||
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-release-manifest.ps1
|
||||
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-status-docs.ps1
|
||||
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-readme-config.ps1
|
||||
|
||||
if (Test-Path "package.json") {
|
||||
npm run lint --if-present
|
||||
|
||||
Reference in New Issue
Block a user