Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
Falcon
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Walter Huang
Falcon
Commits
14dc04f9
Commit
14dc04f9
authored
Jun 26, 2025
by
Lin Wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: diff with not ai en master site
parent
8483e8ac
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
71 additions
and
65 deletions
+71
-65
package.json
package.json
+2
-1
section_selectors.ts
src/constant/section_selectors.ts
+43
-37
diffWithDeepDiff.ts
src/detect_section_selector_masters/diffWithDeepDiff.ts
+22
-25
index.ts
src/detect_section_selector_masters/index.ts
+0
-1
sendDiffToGoogleSheets.ts
...detect_section_selector_masters/sendDiffToGoogleSheets.ts
+4
-1
No files found.
package.json
View file @
14dc04f9
...
...
@@ -32,6 +32,6 @@
"task:slack"
:
"bun run task && 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: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
src/constant/section_selectors.ts
View file @
14dc04f9
// 如果 diff AI site, 是拿所有 AI site 跟非 AI 的英文 site 进行对比
export
const
diffBaselineId
=
"27328697"
;
export
const
section_selectors
=
[
"27328697"
,
"27328389"
,
...
...
@@ -20,24 +23,24 @@ export const section_selectors = [
]
export
const
sectionSelectorLanguages
:
Record
<
string
,
string
>
=
{
"27328697"
:
"EN"
,
"27328389"
:
"DE"
,
"27328392"
:
"ES"
,
"27328396"
:
"PT"
,
"27328399"
:
"FR"
,
"27328401"
:
"IT"
,
"27328404"
:
"JP"
,
"27328406"
:
"ID"
,
"27328408"
:
"NL"
,
"27328410"
:
"FI"
,
"27328412"
:
"SV"
,
"27328414"
:
"CS"
,
"27328415"
:
"RO"
,
"27328416"
:
"CN_ZH"
,
"27328417"
:
"CN_TW"
,
"27328419"
:
"AR"
,
"27665235"
:
"NO"
,
"27656391"
:
"PL"
"27328697"
:
"EN
-NOT-AI
"
,
"27328389"
:
"DE
-NOT-AI
"
,
"27328392"
:
"ES
-NOT-AI
"
,
"27328396"
:
"PT
-NOT-AI
"
,
"27328399"
:
"FR
-NOT-AI
"
,
"27328401"
:
"IT
-NOT-AI
"
,
"27328404"
:
"JP
-NOT-AI
"
,
"27328406"
:
"ID
-NOT-AI
"
,
"27328408"
:
"NL
-NOT-AI
"
,
"27328410"
:
"FI
-NOT-AI
"
,
"27328412"
:
"SV
-NOT-AI
"
,
"27328414"
:
"CS
-NOT-AI
"
,
"27328415"
:
"RO
-NOT-AI
"
,
"27328416"
:
"CN_ZH
-NOT-AI
"
,
"27328417"
:
"CN_TW
-NOT-AI
"
,
"27328419"
:
"AR
-NOT-AI
"
,
"27665235"
:
"NO
-NOT-AI
"
,
"27656391"
:
"PL
-NOT-AI
"
}
export
const
ai_section_selectors
=
[
...
...
@@ -58,26 +61,28 @@ export const ai_section_selectors = [
"29278371"
,
"29279914"
,
"29278297"
,
"29279930"
"29279930"
,
...(
process
.
env
.
USE_AI_SELECTORS
?
[
diffBaselineId
]
:
[])
]
export
const
aiSectionSelectorsLanguages
:
Record
<
string
,
string
>
=
{
"29279960"
:
"EN"
,
"29286540"
:
"DE"
,
"29286613"
:
"ES"
,
"29286646"
:
"PT"
,
"29278357"
:
"FR"
,
"29286780"
:
"IT"
,
"29278350"
:
"JP"
,
"29286835"
:
"ID"
,
"29286857"
:
"NL"
,
"29279949"
:
"FI"
,
"29278331"
:
"SV"
,
"29278319"
:
"CS"
,
"29278287"
:
"RO"
,
"29278284"
:
"CN_ZH"
,
"29278371"
:
"CN_TW"
,
"29279914"
:
"AR"
,
"29278297"
:
"NO"
,
"29279930"
:
"PL"
"29279960"
:
"EN-AI"
,
"29286540"
:
"DE-AI"
,
"29286613"
:
"ES-AI"
,
"29286646"
:
"PT-AI"
,
"29278357"
:
"FR-AI"
,
"29286780"
:
"IT-AI"
,
"29278350"
:
"JP-AI"
,
"29286835"
:
"ID-AI"
,
"29286857"
:
"NL-AI"
,
"29279949"
:
"FI-AI"
,
"29278331"
:
"SV-AI"
,
"29278319"
:
"CS-AI"
,
"29278287"
:
"RO-AI"
,
"29278284"
:
"CN_ZH-AI"
,
"29278371"
:
"CN_TW-AI"
,
"29279914"
:
"AR-AI"
,
"29278297"
:
"NO-AI"
,
"29279930"
:
"PL-AI"
,
...(
process
.
env
.
USE_AI_SELECTORS
?
{
[
diffBaselineId
]:
sectionSelectorLanguages
[
diffBaselineId
]
}
:
{})
}
\ No newline at end of file
src/detect_section_selector_masters/diffWithDeepDiff.ts
View file @
14dc04f9
...
...
@@ -2,7 +2,7 @@
import
{
diff
}
from
'deep-diff'
;
import
{
readFileSync
,
writeFileSync
,
mkdirSync
,
rmSync
}
from
'fs'
;
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
const
srcDir
=
'src/detect_section_selector_masters/extractOutput'
;
...
...
@@ -19,12 +19,8 @@ const useAiSelectors = process.env.USE_AI_SELECTORS === 'true';
// 根据环境变量选择使用哪个 selector 数组
const
selectedSelectors
=
useAiSelectors
?
ai_section_selectors
:
section_selectors
;
const
selectedLanguages
=
useAiSelectors
?
aiSectionSelectorsLanguages
:
sectionSelectorLanguages
;
// Baseline section ID (override via BASELINE_ID env variable)
const
EN_SITE_ID
=
27328697
;
const
AI_EN_SITE_ID
=
29279960
;
const
baselineId
=
useAiSelectors
?
AI_EN_SITE_ID
:
EN_SITE_ID
;
const
baselineFile
=
`
${
baselineId
}
_extract.json`
;
const
baselineFile
=
`
${
diffBaselineId
}
_extract.json`
;
// Read baseline data
const
baselinePath
=
join
(
srcDir
,
baselineFile
);
...
...
@@ -34,7 +30,7 @@ const baselineData = JSON.parse(readFileSync(baselinePath, 'utf-8'));
const
ignoreFields
=
[
'category'
,
'pageUid'
,
'pageTitle'
,
'id'
,
'path'
];
selectedSelectors
.
filter
(
id
=>
Number
(
id
)
!==
b
aselineId
)
.
filter
(
id
=>
Number
(
id
)
!==
diffB
aselineId
)
.
forEach
(
otherId
=>
{
const
otherFile
=
`
${
otherId
}
_extract.json`
;
const
otherPath
=
join
(
srcDir
,
otherFile
);
...
...
@@ -50,25 +46,25 @@ selectedSelectors
const
pageA
=
baselineData
[
first
]
||
{};
const
pageB
=
otherData
[
first
]
||
{};
// Build flattened context keys with language prefix
const
langA
=
selectedLanguages
[
b
aselineId
];
const
langA
=
selectedLanguages
[
diffB
aselineId
];
const
langB
=
selectedLanguages
[
otherId
];
// pageUid, pageTitle, sectionIndex
context
[
`
${
langA
}
:category
`
]
=
pageA
.
category
;
context
[
`
${
langB
}
:category
`
]
=
pageB
.
category
;
context
[
`
${
langA
}
:subcategory
`
]
=
pageA
.
pageTitle
;
context
[
`
${
langB
}
:subcategory
`
]
=
pageB
.
pageTitle
;
context
[
`
${
langA
}
:sectionIndex
`
]
=
pageA
.
sectionIndex
;
context
[
`
${
langB
}
:sectionIndex
`
]
=
pageB
.
sectionIndex
;
context
[
`
${
langA
}
:pageUid
`
]
=
pageA
.
pageUid
;
context
[
`
${
langB
}
:pageUid
`
]
=
pageB
.
pageUid
;
context
[
`
category:
${
langA
}
`
]
=
pageA
.
category
;
context
[
`
category:
${
langB
}
`
]
=
pageB
.
category
;
context
[
`
subcategory:
${
langA
}
`
]
=
pageA
.
pageTitle
;
context
[
`
subcategory:
${
langB
}
`
]
=
pageB
.
pageTitle
;
context
[
`
sectionIndex:
${
langA
}
`
]
=
pageA
.
sectionIndex
;
context
[
`
sectionIndex:
${
langB
}
`
]
=
pageB
.
sectionIndex
;
context
[
`
pageUid:
${
langA
}
`
]
=
pageA
.
pageUid
;
context
[
`
pageUid:
${
langB
}
`
]
=
pageB
.
pageUid
;
const
idx
=
change
.
path
.
indexOf
(
'result'
);
if
(
idx
!==
-
1
)
{
const
itemIdx
=
change
.
path
[
idx
+
1
];
// Attach id and path with language prefix
context
[
`
${
langA
}
:id
`
]
=
pageA
.
result
?.[
itemIdx
]?.
id
||
'Not Applicable'
;
context
[
`
${
langB
}
:id
`
]
=
pageB
.
result
?.[
itemIdx
]?.
id
||
'Not Applicable'
;
context
[
`
${
langA
}
:path
`
]
=
pageA
.
result
?.[
itemIdx
]?.
path
||
'Not Applicable'
;
context
[
`
${
langB
}
:path
`
]
=
pageB
.
result
?.[
itemIdx
]?.
path
||
'Not Applicable'
;
context
[
`
id:
${
langA
}
`
]
=
pageA
.
result
?.[
itemIdx
]?.
id
||
'Not Applicable'
;
context
[
`
id:
${
langB
}
`
]
=
pageB
.
result
?.[
itemIdx
]?.
id
||
'Not Applicable'
;
context
[
`
path:
${
langA
}
`
]
=
pageA
.
result
?.[
itemIdx
]?.
path
||
'Not Applicable'
;
context
[
`
path:
${
langB
}
`
]
=
pageB
.
result
?.[
itemIdx
]?.
path
||
'Not Applicable'
;
}
}
return
{
...
change
,
context
};
...
...
@@ -94,16 +90,16 @@ selectedSelectors
newV
=
(
change
as
any
).
item
.
rhs
;
}
return
{
[
`
${
selectedLanguages
[
baselineId
]}
VS
${
selectedLanguages
[
otherId
]}
更改类型
`
]:
type
,
[
`
更改类型:
${
selectedLanguages
[
diffBaselineId
]}
vs
${
selectedLanguages
[
otherId
]}
`
]:
type
,
"字段类型"
:
pathStr
,
[
`
${
selectedLanguages
[
baselineId
]}
:模版值
`
]:
oldV
||
'Not Applicable'
,
[
`
${
selectedLanguages
[
otherId
]}
:模版值
`
]:
newV
||
'Not Applicable'
,
[
`
模版值:
${
selectedLanguages
[
diffBaselineId
]}
`
]:
oldV
||
'Not Applicable'
,
[
`
模版值:
${
selectedLanguages
[
otherId
]}
`
]:
newV
||
'Not Applicable'
,
...
change
.
context
};
});
const
outFile
=
`
${
selectedLanguages
[
b
aselineId
]}
_vs_
${
selectedLanguages
[
otherId
]}
_diff.json`
;
const
outFile
=
`
${
selectedLanguages
[
diffB
aselineId
]}
_vs_
${
selectedLanguages
[
otherId
]}
_diff.json`
;
const
outPath
=
join
(
outDir
,
outFile
);
writeFileSync
(
outPath
,
JSON
.
stringify
(
semantic
,
null
,
2
),
'utf-8'
);
console
.
log
(
`✅ Diff between
${
b
aselineId
}
and
${
otherId
}
written to
${
join
(
outDir
,
outFile
)}
${
useAiSelectors
?
'(AI selectors)'
:
''
}
`
);
console
.
log
(
`✅ Diff between
${
diffB
aselineId
}
and
${
otherId
}
written to
${
join
(
outDir
,
outFile
)}
${
useAiSelectors
?
'(AI selectors)'
:
''
}
`
);
});
\ No newline at end of file
src/detect_section_selector_masters/index.ts
View file @
14dc04f9
...
...
@@ -22,7 +22,6 @@ const useAiSelectors = process.env.USE_AI_SELECTORS === 'true';
// 根据环境变量选择使用哪个 selector 数组
const
selectedSelectors
=
useAiSelectors
?
ai_section_selectors
:
section_selectors
;
const
selectedLanguages
=
useAiSelectors
?
aiSectionSelectorsLanguages
:
sectionSelectorLanguages
;
// 确保输出目录存在
let
outDir
=
''
...
...
src/detect_section_selector_masters/sendDiffToGoogleSheets.ts
View file @
14dc04f9
...
...
@@ -4,7 +4,10 @@ import { readdirSync, readFileSync } from 'fs';
import
{
join
}
from
'path'
;
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
auth
=
new
google
.
auth
.
GoogleAuth
({
keyFile
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment