99 lines
3.0 KiB
Bash
99 lines
3.0 KiB
Bash
#!/bin/bash
|
|
# ============================================================
|
|
# aop_commit_age.sh - Look up last successful time in good_table.csv
|
|
#
|
|
# CSV format (good_table.csv):
|
|
# name,yaml/path,link,status,vLLM Git information,vLLM-Ascend Git information,time
|
|
#
|
|
# Finds rows matching config_name where status=success,
|
|
# picks the most recent "time" column, and calculates age.
|
|
#
|
|
# Args: $1 = config_name
|
|
# $2 = csv_path
|
|
#
|
|
# Writes to $GITHUB_OUTPUT:
|
|
# commit_age_days - days since last success
|
|
# is_old - true if > 3 days
|
|
# last_status - status from table
|
|
# last_date - date from table
|
|
# ============================================================
|
|
set -euo pipefail
|
|
|
|
CONFIG_NAME="${1:-}"
|
|
CSV_PATH="${GOOD_TABLE:-$2}"
|
|
|
|
if [ -z "$CONFIG_NAME" ]; then
|
|
echo "ERROR: no config name provided"
|
|
exit 1
|
|
fi
|
|
|
|
echo ">>> Looking up config : ${CONFIG_NAME}"
|
|
echo ">>> CSV path : ${CSV_PATH}"
|
|
|
|
if [ ! -f "$CSV_PATH" ]; then
|
|
echo ">>> CSV not found → skip"
|
|
echo "is_old=true" >> "$GITHUB_OUTPUT"
|
|
echo "commit_age_days=99" >> "$GITHUB_OUTPUT"
|
|
echo "last_status=unknown" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
# Find matching rows, only consider success rows (match name column only)
|
|
ROWS=$(grep "^${CONFIG_NAME}," "$CSV_PATH" | grep -F ',success,' || true)
|
|
|
|
if [ -z "$ROWS" ]; then
|
|
echo ">>> No success row for '${CONFIG_NAME}' → skip"
|
|
echo "is_old=true" >> "$GITHUB_OUTPUT"
|
|
echo "commit_age_days=99" >> "$GITHUB_OUTPUT"
|
|
echo "last_status=unknown" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
# Pick most recent success row
|
|
BEST_ROW=""
|
|
BEST_DATE=""
|
|
while IFS= read -r row; do
|
|
date_str=$(echo "$row" | awk -F',' '{print $NF}' | xargs)
|
|
[ -z "$date_str" ] && continue
|
|
if [ -z "$BEST_DATE" ] || [[ "$date_str" > "$BEST_DATE" ]]; then
|
|
BEST_ROW="$row"
|
|
BEST_DATE="$date_str"
|
|
fi
|
|
done <<< "$ROWS"
|
|
|
|
if [ -z "$BEST_ROW" ]; then
|
|
echo ">>> No valid date in success rows → skip"
|
|
echo "is_old=true" >> "$GITHUB_OUTPUT"
|
|
echo "commit_age_days=99" >> "$GITHUB_OUTPUT"
|
|
echo "last_status=unknown" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
LAST_STATUS=$(echo "$BEST_ROW" | awk -F',' '{print $4}' | xargs)
|
|
LAST_DATE="$BEST_DATE"
|
|
|
|
echo ">>> Matched row: ${BEST_ROW}"
|
|
echo "last_status=${LAST_STATUS}" >> "$GITHUB_OUTPUT"
|
|
echo "last_date=${LAST_DATE}" >> "$GITHUB_OUTPUT"
|
|
|
|
LAST_TS=$(date -d "$LAST_DATE" +%s 2>/dev/null || true)
|
|
if [ -z "$LAST_TS" ]; then
|
|
echo ">>> Could not parse date: ${LAST_DATE} → skip"
|
|
echo "is_old=true" >> "$GITHUB_OUTPUT"
|
|
echo "commit_age_days=99" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
NOW=$(date +%s)
|
|
AGE_DAYS=$(( (NOW - LAST_TS) / 86400 ))
|
|
|
|
echo "commit_age_days=${AGE_DAYS}" >> "$GITHUB_OUTPUT"
|
|
|
|
if [ "$AGE_DAYS" -gt 3 ]; then
|
|
echo "is_old=true" >> "$GITHUB_OUTPUT"
|
|
echo ">>> ${CONFIG_NAME} last_status=${LAST_STATUS} date=${LAST_DATE} age=${AGE_DAYS}d (> 3 days) → old"
|
|
else
|
|
echo "is_old=false" >> "$GITHUB_OUTPUT"
|
|
echo ">>> ${CONFIG_NAME} last_status=${LAST_STATUS} date=${LAST_DATE} age=${AGE_DAYS}d (<= 3 days) → recent"
|
|
fi
|