From f6f15ad6f22a886d546f5b123cb069b600f2422c Mon Sep 17 00:00:00 2001 From: Arlind Date: Sat, 22 Nov 2025 23:34:26 +0100 Subject: [PATCH] Update .gitea/workflows/ci.yml --- .gitea/workflows/ci.yml | 68 +++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 30 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index f854c21..1c4cb34 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -36,7 +36,6 @@ jobs: name: Find Skin Repositories and Generate Tables run: | set -eo pipefail - mkdir -p "$ARTIFACT_PATH" total_valid_entries=0 @@ -46,32 +45,36 @@ jobs: page=1 while :; do - users_json=$(curl --retry 3 --retry-delay 5 -sSL \ + # Fetch user list + users_response=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" \ -H "Authorization: token ${{ secrets.TOKEN }}" \ "$GITEA_API/admin/users?limit=50&page=$page&_ts=$(date +%s)") - if ! echo "$users_json" | json_valid; then - echo "❌ Invalid users JSON on page $page. Skipping." - echo "$users_json" > "$ARTIFACT_PATH/invalid_users_page_$page.json" + users_code=$(printf "%s" "$users_response" | tail -c 3) + users_json=$(printf "%s" "$users_response" | head -c -3) + + if [ "$users_code" != "200" ] || ! echo "$users_json" | json_valid; then + echo "❌ Invalid users JSON on page $page (HTTP $users_code)" + echo "$users_json" > "$ARTIFACT_PATH/invalid_users_page_${page}.json" break fi count=$(echo "$users_json" | jq 'length') [ "$count" -eq 0 ] && break - echo "📄 Found $count users on page $page" + # Loop through users for i in $(seq 0 $((count - 1))); do user_login=$(echo "$users_json" | jq -r ".[$i].login") echo "🔍 User: $user_login" - # Fetch repos + # Fetch repos for user repos_response=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" \ -H "Authorization: token ${{ secrets.TOKEN }}" \ "$GITEA_API/users/$user_login/repos?_ts=$(date +%s)") - repos_code="${repos_response: -3}" - repos_json="${repos_response::-3}" + repos_code=$(printf "%s" "$repos_response" | tail -c 3) + repos_json=$(printf "%s" "$repos_response" | head -c -3) if [ "$repos_code" != "200" ] || ! echo "$repos_json" | json_valid; then echo " ❌ Invalid repo list for $user_login (HTTP $repos_code)" @@ -84,6 +87,7 @@ jobs: [ "$repos_count" -eq 0 ] && continue + # Loop through repos for j in $(seq 0 $((repos_count - 1))); do owner=$(echo "$repos_json" | jq -r ".[$j].owner.login") repo=$(echo "$repos_json" | jq -r ".[$j].name") @@ -91,11 +95,12 @@ jobs: echo " → Repo: $owner/$repo" - # Check Skins/ directory + # Check Skins directory dir_response=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" \ - -H "Authorization: token ${{ secrets.TOKEN }}" \ - "$GITEA_API/repos/$owner/$repo/contents/Skins?_ts=$(date +%s)") - dir_code="${dir_response: -3}" + -H "Authorization: token ${{ secrets.TOKEN }}" \ + "$GITEA_API/repos/$owner/$repo/contents/Skins?_ts=$(date +%s)") + + dir_code=$(printf "%s" "$dir_response" | tail -c 3) if [ "$dir_code" != "200" ]; then echo " ❌ Skipped: No Skins/ directory (HTTP $dir_code)" @@ -104,42 +109,44 @@ jobs: # Check README.md readme_response=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" \ - -H "Authorization: token ${{ secrets.TOKEN }}" \ - "$GITEA_API/repos/$owner/$repo/contents/README.md?_ts=$(date +%s)") - readme_code="${readme_response: -3}" - readme_json="${readme_response::-3}" + -H "Authorization: token ${{ secrets.TOKEN }}" \ + "$GITEA_API/repos/$owner/$repo/contents/README.md?_ts=$(date +%s)") + readme_code=$(printf "%s" "$readme_response" | tail -c 3) + readme_json=$(printf "%s" "$readme_response" | head -c -3) if [ "$readme_code" != "200" ] || ! echo "$readme_json" | json_valid; then - echo " ❌ Skipped: No README.md or JSON invalid (HTTP $readme_code)" + echo " ❌ Skipped: No README.md or invalid JSON (HTTP $readme_code)" continue fi - content=$(echo "$readme_json" | jq -r .content | base64 -d || echo "") + # Decode README content + content=$(echo "$readme_json" | jq -r .content | base64 -d 2>/dev/null || echo "") # Extract osuid - osu_id=$(echo "$content" | grep -oE "osuid:[ ]*[0-9]+" | grep -oE "[0-9]+" | head -1) + osu_id=$(printf "%s" "$content" | grep -oE "osuid:[ ]*[0-9]+" | grep -oE "[0-9]+" | head -1) if [ -z "$osu_id" ]; then echo " ❌ Skipped: No osuid in README" continue fi - # Fetch osu! user data - user_data=$(curl -s \ + # Fetch osu! API + osu_response=$(curl --retry 3 --retry-delay 5 -s \ "https://osu.ppy.sh/api/get_user?k=${{ secrets.OSUAPIV1 }}&u=$osu_id&type=id&_ts=$(date +%s)") - if ! echo "$user_data" | json_valid; then - echo " ❌ Invalid osu! API response for $osu_id" + if ! echo "$osu_response" | json_valid; then + echo " ❌ Invalid osu! API JSON for $osu_id" continue fi - if [ "$(echo "$user_data" | jq 'length')" -eq 0 ]; then + if [ "$(echo "$osu_response" | jq 'length')" -eq 0 ]; then echo " 🚫 Restricted or banned user" username="$owner" pp_rank="RESTRICTED" pp_country_rank="RESTRICTED" padded_rank="9999999" + profile_url="https://osu.ppy.sh/users/$osu_id" avatar_url="https://a.ppy.sh/$osu_id?$(( $(date +%s)/86400*86400 ))" @@ -153,11 +160,12 @@ jobs: continue fi - # Normal user - pp_rank=$(echo "$user_data" | jq -r '.[0].pp_rank // "9999999"') - pp_country_rank=$(echo "$user_data" | jq -r '.[0].pp_country_rank // "-"') - country=$(echo "$user_data" | jq -r '.[0].country // "-"') - username=$(echo "$user_data" | jq -r '.[0].username // "'$owner'"') + # Normal account + pp_rank=$(echo "$osu_response" | jq -r '.[0].pp_rank // "9999999"') + pp_country_rank=$(echo "$osu_response" | jq -r '.[0].pp_country_rank // "-"') + country=$(echo "$osu_response" | jq -r '.[0].country // "-"') + username=$(echo "$osu_response" | jq -r '.[0].username // "'$owner'"') + padded_rank=$(printf "%07d" "$pp_rank") if [ "$pp_country_rank" != "-" ] && [ "$country" != "-" ]; then