I’m trying to generate a list of all my projects and sort it by last analysis date. There are projects that are on the list that are tagged as "never"analyzed but when I check it through the sonarqube ui it is recently analyzed.
Need someone to point me to the right API Call to use so I can adjust my script.
#!/bin/bash
SONAR_URL=""
SONAR_TOKEN=""
OUTPUT="projects.csv"
PAGE_SIZE=500
# Step 1: Build a lookup of key -> lastAnalysisDate from admin endpoint
declare -A DATES
PAGE=1; TOTAL=1
while (( (PAGE - 1) * PAGE_SIZE < TOTAL )); do
RESPONSE=$(curl -sf -u "$SONAR_TOKEN:" \
"${SONAR_URL}/api/projects/search?ps=${PAGE_SIZE}&p=${PAGE}")
TOTAL=$(echo "$RESPONSE" | jq '.paging.total')
while IFS=$'\t' read -r key date; do
DATES["$key"]="$date"
done < <(echo "$RESPONSE" | jq -r '.components[] | [.key, (.lastAnalysisDate // "never")] | @tsv')
PAGE=$(( PAGE + 1 ))
done
# Step 2: Fetch all visible projects and enrich with dates and overall status from lookup
echo "key,name,lastAnalysisDate,overallStatus" > "$OUTPUT"
PAGE=1; TOTAL=1
while (( (PAGE - 1) * PAGE_SIZE < TOTAL )); do
RESPONSE=$(curl -sf -u "$SONAR_TOKEN:" \
"${SONAR_URL}/api/components/search_projects?s=analysisDate&asc=no&ps=${PAGE_SIZE}&p=${PAGE}")
TOTAL=$(echo "$RESPONSE" | jq '.paging.total')
while IFS=$'\t' read -r key name status; do
date="${DATES[$key]:-never}"
printf '"%s","%s","%s","%s"\n' "${key//\"/\"\"}" "${name//\"/\"\"}" "$date" "$status"
done < <(echo "$RESPONSE" | jq -r '.components[] | [.key, .name, (.measures // [] | map(select(.metric == "alert_status")) | first | .value // "NONE")] | @tsv') >> "$OUTPUT"
PAGE=$(( PAGE + 1 ))
done
echo "Saved $(($(wc -l < "$OUTPUT") - 1)) projects to $OUTPUT"