fix(merge-sarif-files): file list too long #40

Merged
t.behrendt merged 1 commits from fix-merge-sarif-files-file-list-too-long into main 2026-02-15 16:59:38 +01:00
+8 -4
View File
@@ -27,11 +27,15 @@ runs:
# Parse YAML list: lines like " - path/to/file" or "- file" # Parse YAML list: lines like " - path/to/file" or "- file"
file_list=$(echo "$files" | sed -n 's/^[[:space:]]*-[[:space:]]*//p' | tr -d '"' | tr -d "'") file_list=$(echo "$files" | sed -n 's/^[[:space:]]*-[[:space:]]*//p' | tr -d '"' | tr -d "'")
# Collect all runs from all SARIF files (each run as one compact JSON line) # Temp file for merged runs (avoids "Argument list too long" when passing huge JSON via argv)
runs_json=$(while IFS= read -r file; do runs_temp=$(mktemp)
trap 'rm -f "$runs_temp"' EXIT
# Collect all runs from all SARIF files into temp file (streaming, no argv size limit)
while IFS= read -r file; do
[ -z "$file" ] && continue [ -z "$file" ] && continue
jq -c '.runs[]?' "$file" 2>/dev/null || true jq -c '.runs[]?' "$file" 2>/dev/null || true
done <<< "$file_list" | jq -s '.') done <<< "$file_list" | jq -s '.' > "$runs_temp"
# Take first file for version/schema, replace .runs with merged array # Take first file for version/schema, replace .runs with merged array
first_file=$(echo "$file_list" | head -1) first_file=$(echo "$file_list" | head -1)
@@ -39,4 +43,4 @@ runs:
echo "No input files given." echo "No input files given."
exit 1 exit 1
fi fi
jq -n --argjson runs "$runs_json" --slurpfile first "$first_file" '$first[0] | .runs = $runs' > "$output_file" jq -n --slurpfile runs "$runs_temp" --slurpfile first "$first_file" '$first[0] | .runs = $runs[0]' > "$output_file"