Skip to content

Commit 1b81574

Browse files
committed
ci: request reindex when frontmatter changes
Detect frontmatter diffs in changed docs pages and send frontmatterChanged to markdown revalidation once per run. Fail the workflow when reindex was requested but not successfully triggered. Made-with: Cursor
1 parent ff53f85 commit 1b81574

File tree

1 file changed

+60
-1
lines changed

1 file changed

+60
-1
lines changed

.github/workflows/revalidate-sdk-content.yml

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,38 +41,80 @@ jobs:
4141
if [ -z "$CHANGED_FILES" ]; then
4242
echo "No MDX files changed in /docs/pages/ directory"
4343
echo "filePaths=[]" >> $GITHUB_OUTPUT
44+
echo "frontmatterChanged=false" >> $GITHUB_OUTPUT
4445
exit 0
4546
fi
4647
48+
# Detect whether any changed file has frontmatter changes
49+
FRONTMATTER_CHANGED=false
50+
extract_frontmatter() {
51+
local ref="$1"
52+
local path="$2"
53+
54+
if ! git cat-file -e "${ref}:${path}" 2>/dev/null; then
55+
return 0
56+
fi
57+
58+
git show "${ref}:${path}" | awk '
59+
NR == 1 && $0 != "---" { exit }
60+
NR == 1 && $0 == "---" { in_frontmatter = 1; next }
61+
in_frontmatter && $0 == "---" { exit }
62+
in_frontmatter { print }
63+
'
64+
}
65+
66+
while IFS= read -r FILE; do
67+
[ -z "$FILE" ] && continue
68+
OLD_FRONTMATTER=$(extract_frontmatter "${{ github.event.before }}" "$FILE")
69+
NEW_FRONTMATTER=$(extract_frontmatter "${{ github.event.after }}" "$FILE")
70+
71+
if [ "$OLD_FRONTMATTER" != "$NEW_FRONTMATTER" ]; then
72+
FRONTMATTER_CHANGED=true
73+
echo "Frontmatter changed in: $FILE"
74+
break
75+
fi
76+
done <<< "$CHANGED_FILES"
77+
4778
# Strip docs/ prefix to get file paths matching Redis cache keys
4879
# e.g., docs/pages/reference/... -> pages/reference/...
4980
FILE_PATHS_JSON=$(echo "$CHANGED_FILES" | sed 's|^docs/||' | jq -R -s -c 'split("\n") | map(select(length > 0))')
5081
5182
FILE_COUNT=$(echo "$FILE_PATHS_JSON" | jq 'length')
5283
echo "Found $FILE_COUNT changed files"
84+
echo "frontmatterChanged: $FRONTMATTER_CHANGED"
5385
echo "filePaths=$FILE_PATHS_JSON" >> $GITHUB_OUTPUT
86+
echo "frontmatterChanged=$FRONTMATTER_CHANGED" >> $GITHUB_OUTPUT
5487
5588
- name: Call revalidation API
5689
if: steps.changed-files.outputs.filePaths != '[]'
5790
run: |
5891
ALL_PATHS='${{ steps.changed-files.outputs.filePaths }}'
92+
FRONTMATTER_CHANGED='${{ steps.changed-files.outputs.frontmatterChanged }}'
5993
TOTAL=$(echo "$ALL_PATHS" | jq 'length')
6094
BATCH_SIZE=50
6195
SUCCEEDED=0
6296
FAILED=0
6397
BATCH_NUM=0
98+
REINDEX_CHECKED=false
99+
REINDEX_FAILED=false
64100
65101
echo "Revalidating $TOTAL files in batches of $BATCH_SIZE"
66102
67103
for ((i = 0; i < TOTAL; i += BATCH_SIZE)); do
68104
BATCH_NUM=$((BATCH_NUM + 1))
69105
BATCH=$(echo "$ALL_PATHS" | jq -c ".[$i:$((i + BATCH_SIZE))]")
70106
CHUNK_SIZE=$(echo "$BATCH" | jq 'length')
107+
INCLUDE_REINDEX=false
71108
72109
echo ""
73110
echo "=== Batch $BATCH_NUM ($CHUNK_SIZE paths, $((i + CHUNK_SIZE))/$TOTAL) ==="
74111
75-
PAYLOAD=$(jq -n --argjson paths "$BATCH" '{filePaths: $paths}')
112+
if [ "$FRONTMATTER_CHANGED" = "true" ] && [ "$REINDEX_CHECKED" = "false" ]; then
113+
INCLUDE_REINDEX=true
114+
PAYLOAD=$(jq -n --argjson paths "$BATCH" '{filePaths: $paths, frontmatterChanged: true}')
115+
else
116+
PAYLOAD=$(jq -n --argjson paths "$BATCH" '{filePaths: $paths}')
117+
fi
76118
77119
HTTP_CODE=$(curl -X POST "${{ secrets.DOCS_SITE_URL }}/docs/api/revalidate/markdown" \
78120
-H "Authorization: Bearer ${{ secrets.DOCS_SITE_API_KEY }}" \
@@ -102,6 +144,18 @@ jobs:
102144
FAILED=$((FAILED + CHUNK_SIZE))
103145
fi
104146
147+
if [ "$INCLUDE_REINDEX" = "true" ]; then
148+
REINDEX_CHECKED=true
149+
REINDEX_TRIGGERED=$(jq -r '.reindexTriggered.triggered // "false"' response.json 2>/dev/null || echo "false")
150+
if [ "$REINDEX_TRIGGERED" != "true" ]; then
151+
REINDEX_FAILED=true
152+
REINDEX_ERROR=$(jq -r '.reindexTriggered.error // "Reindex trigger failed or was not returned by API"' response.json 2>/dev/null || echo "Unable to parse reindex response")
153+
echo "::error::Reindex requested but not triggered: $REINDEX_ERROR"
154+
else
155+
echo "✅ Reindex workflow trigger acknowledged"
156+
fi
157+
fi
158+
105159
if [ $((i + BATCH_SIZE)) -lt "$TOTAL" ]; then
106160
sleep 2
107161
fi
@@ -116,4 +170,9 @@ jobs:
116170
exit 1
117171
fi
118172
173+
if [ "$REINDEX_FAILED" = "true" ]; then
174+
echo "::error::Frontmatter changed, but reindex was not successfully triggered"
175+
exit 1
176+
fi
177+
119178
echo "::notice::Successfully revalidated $SUCCEEDED files"

0 commit comments

Comments
 (0)