diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index f4f0069..58beacb 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -18,19 +18,26 @@ jobs: image: ${{ vars.CONTAINER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest steps: - - name: Checkout Repository - uses: actions/checkout@v4 - with: - token: ${{ secrets.TOKEN }} - - name: Mask Sensitive Tokens run: | echo "::add-mask::${{ secrets.TOKEN }}" echo "::add-mask::${{ secrets.OSUAPIV1 }}" + - name: Checkout Repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.TOKEN }} + - name: Pull latest changes run: | - git pull --rebase origin main || echo "Nothing to rebase" + # Pull latest changes to prevent push conflicts + git remote set-url origin https://x-access-token:${{ secrets.TOKEN }}@${{ github.repository_owner }}.gitea.io/${{ github.repository }}.git + git fetch origin main + git rebase origin/main || { + echo "⚠️ Git rebase failed, likely due to conflicts." + git rebase --abort || true + exit 1 + } - name: Find Skin Repositories for all users id: find_skins @@ -39,6 +46,7 @@ jobs: total_valid_entries=0 user_rows_file=$(mktemp) avatar_rows_file=$(mktemp) + trap 'rm -f "$user_rows_file" "$avatar_rows_file" temp_dir.json temp_readme.json' EXIT page=1 while :; do @@ -65,70 +73,63 @@ jobs: continue fi - repos_count=$(echo "$repos_json" | jq 'length') - echo " 📦 Found $repos_count repos" - - if [ "$repos_count" -eq 0 ]; then - echo - continue - fi - - 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") - html_url=$(echo "$repos_json" | jq -r ".[$j].html_url") + echo "$repos_json" | jq -c '.[]' | xargs -n1 -P4 -I{} bash -c ' + repo_data="{}" + owner=$(echo "$repo_data" | jq -r ".owner.login") + repo=$(echo "$repo_data" | jq -r ".name") + html_url=$(echo "$repo_data" | jq -r ".html_url") echo " → Repo: $owner/$repo" - dir_code=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" -o temp_dir.json \ + dir_code=$(curl --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 5 -s -w "%{http_code}" -o temp_dir.json \ -H "Authorization: token ${{ secrets.TOKEN }}" \ "$GITEA_API/repos/$owner/$repo/contents/Skins?_ts=$(date +%s)") if [ "$dir_code" != "200" ]; then - echo " ❌ Skipped: No 'Skins/' directory found (HTTP $dir_code)" - continue + echo " ❌ Skipped: No Skins/ dir (HTTP $dir_code)" + exit 0 fi - readme_code=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" -o temp_readme.json \ + readme_code=$(curl --connect-timeout 5 --max-time 10 --retry 3 --retry-delay 5 -s -w "%{http_code}" -o temp_readme.json \ -H "Authorization: token ${{ secrets.TOKEN }}" \ "$GITEA_API/repos/$owner/$repo/contents/README.md?_ts=$(date +%s)") if [ "$readme_code" != "200" ]; then - echo " ❌ Skipped: No README.md found to extract osuid (HTTP $readme_code)" - continue + echo " ❌ Skipped: No README.md (HTTP $readme_code)" + exit 0 fi content=$(jq -r .content < temp_readme.json | base64 -d || echo "") - osu_id=$(echo "$content" | awk '/osuid:[ ]*[0-9]+/ { match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH); exit }') + osu_id=$(echo "$content" | awk "/osuid:[ ]*[0-9]+/ { match(\$0, /[0-9]+/); print substr(\$0, RSTART, RLENGTH); exit }") if [ -z "$osu_id" ]; then - echo " ❌ Skipped: osuid not found in README" - continue + echo " ❌ Skipped: no osuid" + exit 0 fi - user_data=$(curl --retry 3 --retry-delay 5 -s \ + user_data=$(curl --connect-timeout 5 --max-time 10 --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" | jq 'length')" -eq 0 ]; then - echo " ❌ Skipped: osu! API returned no data for osuid $osu_id" - continue + if [ "$(echo "$user_data" | jq length)" -eq 0 ]; then + echo " ❌ Skipped: osu! API no data" + exit 0 fi - pp_rank=$(echo "$user_data" | jq -r '.[0].pp_rank // "9999999"') - pp_country_rank=$(echo "$user_data" | jq -r '.[0].pp_country_rank // "-"') - username=$(echo "$user_data" | jq -r '.[0].username // "'$owner'"') + pp_rank=$(echo "$user_data" | jq -r ".[0].pp_rank // \\"9999999\\"") + pp_country_rank=$(echo "$user_data" | jq -r ".[0].pp_country_rank // \\"-\\"") + username=$(echo "$user_data" | jq -r ".[0].username // \\"$owner\\"") padded_rank=$(printf "%07d" "$pp_rank") - printf "%s|