Commit 14dc04f9 by Lin Wang

fix: diff with not ai en master site

parent 8483e8ac
...@@ -32,6 +32,6 @@ ...@@ -32,6 +32,6 @@
"task:slack": "bun run task && bun run send-diff", "task:slack": "bun run task && bun run send-diff",
"task:slack:ai": "bun run task:ai && bun run send-diff", "task:slack:ai": "bun run task:ai && bun run send-diff",
"task:gsheet": "bun run task && bun run send-gsheet", "task:gsheet": "bun run task && bun run send-gsheet",
"task:gsheet:ai": "bun run task:ai && bun run send-gsheet" "task:gsheet:ai": "bun run task:ai && USE_AI_SELECTORS=true bun run send-gsheet"
} }
} }
\ No newline at end of file
// 如果 diff AI site, 是拿所有 AI site 跟非 AI 的英文 site 进行对比
export const diffBaselineId = "27328697";
export const section_selectors = [ export const section_selectors = [
"27328697", "27328697",
"27328389", "27328389",
...@@ -20,24 +23,24 @@ export const section_selectors = [ ...@@ -20,24 +23,24 @@ export const section_selectors = [
] ]
export const sectionSelectorLanguages: Record<string, string> = { export const sectionSelectorLanguages: Record<string, string> = {
"27328697": "EN", "27328697": "EN-NOT-AI",
"27328389": "DE", "27328389": "DE-NOT-AI",
"27328392": "ES", "27328392": "ES-NOT-AI",
"27328396": "PT", "27328396": "PT-NOT-AI",
"27328399": "FR", "27328399": "FR-NOT-AI",
"27328401": "IT", "27328401": "IT-NOT-AI",
"27328404": "JP", "27328404": "JP-NOT-AI",
"27328406": "ID", "27328406": "ID-NOT-AI",
"27328408": "NL", "27328408": "NL-NOT-AI",
"27328410": "FI", "27328410": "FI-NOT-AI",
"27328412": "SV", "27328412": "SV-NOT-AI",
"27328414": "CS", "27328414": "CS-NOT-AI",
"27328415": "RO", "27328415": "RO-NOT-AI",
"27328416": "CN_ZH", "27328416": "CN_ZH-NOT-AI",
"27328417": "CN_TW", "27328417": "CN_TW-NOT-AI",
"27328419": "AR", "27328419": "AR-NOT-AI",
"27665235": "NO", "27665235": "NO-NOT-AI",
"27656391": "PL" "27656391": "PL-NOT-AI"
} }
export const ai_section_selectors = [ export const ai_section_selectors = [
...@@ -58,26 +61,28 @@ export const ai_section_selectors = [ ...@@ -58,26 +61,28 @@ export const ai_section_selectors = [
"29278371", "29278371",
"29279914", "29279914",
"29278297", "29278297",
"29279930" "29279930",
...(process.env.USE_AI_SELECTORS ? [diffBaselineId] : [])
] ]
export const aiSectionSelectorsLanguages: Record<string, string> = { export const aiSectionSelectorsLanguages: Record<string, string> = {
"29279960": "EN", "29279960": "EN-AI",
"29286540": "DE", "29286540": "DE-AI",
"29286613": "ES", "29286613": "ES-AI",
"29286646": "PT", "29286646": "PT-AI",
"29278357": "FR", "29278357": "FR-AI",
"29286780": "IT", "29286780": "IT-AI",
"29278350": "JP", "29278350": "JP-AI",
"29286835": "ID", "29286835": "ID-AI",
"29286857": "NL", "29286857": "NL-AI",
"29279949": "FI", "29279949": "FI-AI",
"29278331": "SV", "29278331": "SV-AI",
"29278319": "CS", "29278319": "CS-AI",
"29278287": "RO", "29278287": "RO-AI",
"29278284": "CN_ZH", "29278284": "CN_ZH-AI",
"29278371": "CN_TW", "29278371": "CN_TW-AI",
"29279914": "AR", "29279914": "AR-AI",
"29278297": "NO", "29278297": "NO-AI",
"29279930": "PL" "29279930": "PL-AI",
...(process.env.USE_AI_SELECTORS ? { [diffBaselineId]: sectionSelectorLanguages[diffBaselineId] } : {})
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
import { diff } from 'deep-diff'; import { diff } from 'deep-diff';
import { readFileSync, writeFileSync, mkdirSync, rmSync } from 'fs'; import { readFileSync, writeFileSync, mkdirSync, rmSync } from 'fs';
import { join } from 'path'; import { join } from 'path';
import { section_selectors, sectionSelectorLanguages, ai_section_selectors, aiSectionSelectorsLanguages } from '../constant/section_selectors'; import { section_selectors, sectionSelectorLanguages, ai_section_selectors, aiSectionSelectorsLanguages, diffBaselineId } from '../constant/section_selectors';
// Directory containing JSON outputs to compare // Directory containing JSON outputs to compare
const srcDir = 'src/detect_section_selector_masters/extractOutput'; const srcDir = 'src/detect_section_selector_masters/extractOutput';
...@@ -19,12 +19,8 @@ const useAiSelectors = process.env.USE_AI_SELECTORS === 'true'; ...@@ -19,12 +19,8 @@ const useAiSelectors = process.env.USE_AI_SELECTORS === 'true';
// 根据环境变量选择使用哪个 selector 数组 // 根据环境变量选择使用哪个 selector 数组
const selectedSelectors = useAiSelectors ? ai_section_selectors : section_selectors; const selectedSelectors = useAiSelectors ? ai_section_selectors : section_selectors;
const selectedLanguages = useAiSelectors ? aiSectionSelectorsLanguages : sectionSelectorLanguages; const selectedLanguages = useAiSelectors ? aiSectionSelectorsLanguages : sectionSelectorLanguages;
// Baseline section ID (override via BASELINE_ID env variable) // Baseline section ID (override via BASELINE_ID env variable)
const EN_SITE_ID = 27328697; const baselineFile = `${diffBaselineId}_extract.json`;
const AI_EN_SITE_ID = 29279960;
const baselineId = useAiSelectors ? AI_EN_SITE_ID : EN_SITE_ID;
const baselineFile = `${baselineId}_extract.json`;
// Read baseline data // Read baseline data
const baselinePath = join(srcDir, baselineFile); const baselinePath = join(srcDir, baselineFile);
...@@ -34,7 +30,7 @@ const baselineData = JSON.parse(readFileSync(baselinePath, 'utf-8')); ...@@ -34,7 +30,7 @@ const baselineData = JSON.parse(readFileSync(baselinePath, 'utf-8'));
const ignoreFields = ['category', 'pageUid', 'pageTitle', 'id', 'path']; const ignoreFields = ['category', 'pageUid', 'pageTitle', 'id', 'path'];
selectedSelectors selectedSelectors
.filter(id => Number(id) !== baselineId) .filter(id => Number(id) !== diffBaselineId)
.forEach(otherId => { .forEach(otherId => {
const otherFile = `${otherId}_extract.json`; const otherFile = `${otherId}_extract.json`;
const otherPath = join(srcDir, otherFile); const otherPath = join(srcDir, otherFile);
...@@ -50,25 +46,25 @@ selectedSelectors ...@@ -50,25 +46,25 @@ selectedSelectors
const pageA = baselineData[first] || {}; const pageA = baselineData[first] || {};
const pageB = otherData[first] || {}; const pageB = otherData[first] || {};
// Build flattened context keys with language prefix // Build flattened context keys with language prefix
const langA = selectedLanguages[baselineId]; const langA = selectedLanguages[diffBaselineId];
const langB = selectedLanguages[otherId]; const langB = selectedLanguages[otherId];
// pageUid, pageTitle, sectionIndex // pageUid, pageTitle, sectionIndex
context[`${langA}:category`] = pageA.category; context[`category:${langA}`] = pageA.category;
context[`${langB}:category`] = pageB.category; context[`category:${langB}`] = pageB.category;
context[`${langA}:subcategory`] = pageA.pageTitle; context[`subcategory:${langA}`] = pageA.pageTitle;
context[`${langB}:subcategory`] = pageB.pageTitle; context[`subcategory:${langB}`] = pageB.pageTitle;
context[`${langA}:sectionIndex`] = pageA.sectionIndex; context[`sectionIndex:${langA}`] = pageA.sectionIndex;
context[`${langB}:sectionIndex`] = pageB.sectionIndex; context[`sectionIndex:${langB}`] = pageB.sectionIndex;
context[`${langA}:pageUid`] = pageA.pageUid; context[`pageUid:${langA}`] = pageA.pageUid;
context[`${langB}:pageUid`] = pageB.pageUid; context[`pageUid:${langB}`] = pageB.pageUid;
const idx = change.path.indexOf('result'); const idx = change.path.indexOf('result');
if (idx !== -1) { if (idx !== -1) {
const itemIdx = change.path[idx + 1]; const itemIdx = change.path[idx + 1];
// Attach id and path with language prefix // Attach id and path with language prefix
context[`${langA}:id`] = pageA.result?.[itemIdx]?.id || 'Not Applicable'; context[`id:${langA}`] = pageA.result?.[itemIdx]?.id || 'Not Applicable';
context[`${langB}:id`] = pageB.result?.[itemIdx]?.id || 'Not Applicable'; context[`id:${langB}`] = pageB.result?.[itemIdx]?.id || 'Not Applicable';
context[`${langA}:path`] = pageA.result?.[itemIdx]?.path || 'Not Applicable'; context[`path:${langA}`] = pageA.result?.[itemIdx]?.path || 'Not Applicable';
context[`${langB}:path`] = pageB.result?.[itemIdx]?.path || 'Not Applicable'; context[`path:${langB}`] = pageB.result?.[itemIdx]?.path || 'Not Applicable';
} }
} }
return { ...change, context }; return { ...change, context };
...@@ -94,16 +90,16 @@ selectedSelectors ...@@ -94,16 +90,16 @@ selectedSelectors
newV = (change as any).item.rhs; newV = (change as any).item.rhs;
} }
return { return {
[`${selectedLanguages[baselineId]} VS ${selectedLanguages[otherId]} 更改类型`]: type, [`更改类型:${selectedLanguages[diffBaselineId]} vs ${selectedLanguages[otherId]}`]: type,
"字段类型": pathStr, "字段类型": pathStr,
[`${selectedLanguages[baselineId]}:模版值`]: oldV || 'Not Applicable', [`模版值:${selectedLanguages[diffBaselineId]}`]: oldV || 'Not Applicable',
[`${selectedLanguages[otherId]}:模版值`]: newV || 'Not Applicable', [`模版值:${selectedLanguages[otherId]}`]: newV || 'Not Applicable',
...change.context ...change.context
}; };
}); });
const outFile = `${selectedLanguages[baselineId]}_vs_${selectedLanguages[otherId]}_diff.json`; const outFile = `${selectedLanguages[diffBaselineId]}_vs_${selectedLanguages[otherId]}_diff.json`;
const outPath = join(outDir, outFile); const outPath = join(outDir, outFile);
writeFileSync(outPath, JSON.stringify(semantic, null, 2), 'utf-8'); writeFileSync(outPath, JSON.stringify(semantic, null, 2), 'utf-8');
console.log(`✅ Diff between ${baselineId} and ${otherId} written to ${join(outDir, outFile)} ${useAiSelectors ? '(AI selectors)' : ''}`); console.log(`✅ Diff between ${diffBaselineId} and ${otherId} written to ${join(outDir, outFile)} ${useAiSelectors ? '(AI selectors)' : ''}`);
}); });
\ No newline at end of file
...@@ -22,7 +22,6 @@ const useAiSelectors = process.env.USE_AI_SELECTORS === 'true'; ...@@ -22,7 +22,6 @@ const useAiSelectors = process.env.USE_AI_SELECTORS === 'true';
// 根据环境变量选择使用哪个 selector 数组 // 根据环境变量选择使用哪个 selector 数组
const selectedSelectors = useAiSelectors ? ai_section_selectors : section_selectors; const selectedSelectors = useAiSelectors ? ai_section_selectors : section_selectors;
const selectedLanguages = useAiSelectors ? aiSectionSelectorsLanguages : sectionSelectorLanguages;
// 确保输出目录存在 // 确保输出目录存在
let outDir = '' let outDir = ''
......
...@@ -4,7 +4,10 @@ import { readdirSync, readFileSync } from 'fs'; ...@@ -4,7 +4,10 @@ import { readdirSync, readFileSync } from 'fs';
import { join } from 'path'; import { join } from 'path';
async function uploadAllToSheets() { async function uploadAllToSheets() {
const spreadsheetId = process.env.GOOGLE_SHEET_ID!; const useAiSelectors = process.env.USE_AI_SELECTORS === 'true';
const spreadsheetId = useAiSelectors
? process.env.GOOGLE_SHEET_AI_ID!
: process.env.GOOGLE_SHEET_ID!;
const keyFile = process.env.GOOGLE_SERVICE_ACCOUNT_KEY_FILE!; const keyFile = process.env.GOOGLE_SERVICE_ACCOUNT_KEY_FILE!;
const auth = new google.auth.GoogleAuth({ const auth = new google.auth.GoogleAuth({
keyFile, keyFile,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment