@@ -191,35 +191,83 @@ jobs:
191191 cd algolia
192192 PRODUCT="${PRODUCT:-1}"
193193 echo "Setting product=\"$PRODUCT\" for Algolia JSON files (only when missing/empty)."
194-
194+
195+ echo "Found JSON files:"
196+ ls -la *.json || true
197+
195198 for f in *.json; do
196- echo "Processing $f ..."
197- if jq -e 'type == "array"' "$f" >/dev/null 2>&1; then
198- jq --arg p "$PRODUCT" 'map(if (.product == null or .product == "") then . + {product:$p} else . end)' "$f" > "$f.tmp"
199- mv "$f.tmp" "$f"
200- elif jq -e 'has("records") and (.records | type == "array")' "$f" >/dev/null 2>&1; then
201- jq --arg p "$PRODUCT" '.records = (.records | map(if (.product == null or .product == "") then . + {product:$p} else . end))' "$f" > "$f.tmp"
202- mv "$f.tmp" "$f"
203- elif jq -e 'type == "object"' "$f" >/dev/null 2>&1; then
204- jq --arg p "$PRODUCT" 'if (.product == null or .product == "") then . + {product:$p} else . end' "$f" > "$f.tmp"
205- mv "$f.tmp" "$f"
206- else
207- echo "Unknown top-level JSON type for $f — attempting NDJSON-per-line patch."
208- tmp="$(mktemp)"
209- while IFS= read -r line || [ -n "$line" ]; do
210- trimmed="$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
211- if [ -z "$trimmed" ]; then
212- echo "" >> "$tmp"
213- continue
214- fi
215- if echo "$trimmed" | jq -e '.' >/dev/null 2>&1; then
216- echo "$trimmed" | jq -c --arg p "$PRODUCT" 'if (.product == null or .product == "") then . + {product:$p} else . end' >> "$tmp"
217- else
218- echo "$line" >> "$tmp"
219- fi
220- done < "$f"
221- mv "$tmp" "$f"
222- fi
199+ echo
200+ echo "---- Processing $f ----"
201+ if [ ! -s "$f" ]; then
202+ echo "Skipping empty file: $f (size 0)"
203+ continue
204+ fi
205+
206+ echo "Size: $(wc -c < "$f") bytes"
207+ echo "Head (first 2 lines / 200 bytes):"
208+ head -c 200 "$f" || true
209+ echo
210+ echo "-----"
211+
212+ if jq -e '.' "$f" >/dev/null 2>&1; then
213+ echo "$f is valid JSON — attempting structural update with jq..."
214+
215+ jq --arg p "$PRODUCT" '
216+ if type == "array" then
217+ map(if (.product == null or .product == "") then . + {product:$p} else . end)
218+ elif (type == "object" and has("records") and (.records|type == "array")) then
219+ .records = (.records | map(if (.product == null or .product == "") then . + {product:$p} else . end))
220+ elif type == "object" then
221+ if (.product == null or .product == "") then . + {product:$p} else . end
222+ else
223+ .
224+ end
225+ ' "$f" > "$f.tmp"
226+
227+ if [ ! -s "$f.tmp" ]; then
228+ echo "Warning: jq produced empty output for $f — falling back to NDJSON per-line update."
229+ rm -f "$f.tmp"
230+ else
231+ mv "$f.tmp" "$f"
232+ echo "Patched $f (whole-file JSON path)."
233+ continue
234+ fi
235+ else
236+ echo "$f is not parseable as a single JSON value — attempting NDJSON per-line update."
237+ fi
238+
239+ tmp="$(mktemp)"
240+ while IFS= read -r line || [ -n "$line" ]; do
241+ trimmed="$(printf '%s' "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
242+ if [ -z "$trimmed" ]; then
243+ printf '\n' >> "$tmp"
244+ continue
245+ fi
246+
247+ if printf '%s' "$trimmed" | jq -e '.' >/dev/null 2>&1; then
248+ printf '%s\n' "$trimmed" | jq -c --arg p "$PRODUCT" 'if (.product == null or .product == "") then . + {product:$p} else . end' >> "$tmp"
249+ else
250+ printf '%s\n' "$line" >> "$tmp"
251+ fi
252+ done < "$f"
253+
254+ if [ -s "$tmp" ]; then
255+ mv "$tmp" "$f"
256+ echo "Patched $f (NDJSON path)."
257+ else
258+ rm -f "$tmp"
259+ echo "Error: NDJSON fallback produced empty file for $f — leaving original intact and aborting."
260+ exit 1
261+ fi
262+ done
263+
264+ echo
265+ echo "Final files summary:"
266+ for f in *.json; do
267+ echo "-> $f : $(wc -c < "$f") bytes"
268+ echo " head:"
269+ head -c 200 "$f" || true
270+ echo
223271 done
224272
225273 - name : Setup Algolia CLI
0 commit comments