#!/bin/bash set -euo pipefail SONAR_URL="http://192.168.1.2:9001" PROJECT="Warehouse-Management-System" OUTPUT="sonarqube-issues.csv" TMP=$(mktemp) if [ -z "${SONAR_TOKEN:-}" ]; then echo "SONAR_TOKEN is not set" exit 1 fi echo "Downloading SonarQube issues for $PROJECT..." echo '[]' > "$TMP" PAGE=1 PAGE_SIZE=500 while true; do echo "Fetching page $PAGE..." RESPONSE=$(curl --connect-timeout 5 --max-time 60 -sS \ -u "$SONAR_TOKEN:" \ "$SONAR_URL/api/issues/search?componentKeys=$PROJECT&ps=$PAGE_SIZE&p=$PAGE") COUNT=$(echo "$RESPONSE" | jq '.issues | length') TOTAL=$(echo "$RESPONSE" | jq '.total') echo " $COUNT issues received ($TOTAL total)" jq -s '.[0] + .[1].issues' "$TMP" <(echo "$RESPONSE") > "$TMP.new" mv "$TMP.new" "$TMP" [ "$COUNT" -lt "$PAGE_SIZE" ] && break PAGE=$((PAGE + 1)) done jq -r ' [ "Severity", "Type", "Status", "Rule", "File", "Line", "Message", "Effort", "Assignee", "Author", "Created", "Updated" ], (.[] | [ .severity, .type, .status, .rule, (.component | sub("^Warehouse-Management-System:";"")), (.line // ""), .message, (.effort // ""), (.assignee // ""), (.author // ""), .creationDate, .updateDate ]) | @csv ' "$TMP" > "$OUTPUT" rm "$TMP" echo echo "Complete." echo "Report: $OUTPUT" echo "Issues exported: $(($(wc -l < "$OUTPUT") - 1))"