diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index c6672bf..022fca0 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -1,15 +1,3 @@ -name: Update Community Skins README - -on: - schedule: - - cron: '*/5 * * * *' - workflow_dispatch: - -env: - README_PATH: "${{ github.workspace }}/README.md" - IMAGE_NAME: osc/skins-image - GITEA_API: https://${{ vars.CONTAINER_REGISTRY }}/api/v1 - jobs: generate_everything: name: Full CI/CD Pipeline @@ -23,6 +11,11 @@ jobs: with: token: ${{ secrets.TOKEN }} + - name: Mask Sensitive Tokens + run: | + echo "::add-mask::${{ secrets.TOKEN }}" + echo "::add-mask::${{ secrets.OSUAPIV1 }}" + - name: Pull latest changes run: | git pull --rebase origin main || echo "Nothing to rebase" @@ -31,46 +24,43 @@ jobs: id: find_skins shell: sh run: | + set -eo pipefail total_valid_entries=0 user_rows_file=$(mktemp) avatar_rows_file=$(mktemp) page=1 while :; do - echo "Fetching users page $page..." >&2 users_json=$(curl --retry 3 --retry-delay 5 -sSL \ -H "Authorization: token ${{ secrets.TOKEN }}" \ "$GITEA_API/admin/users?limit=50&page=$page&_ts=$(date +%s)") - count=$(echo "$users_json" | jq 'length') [ "$count" -eq 0 ] && break for i in $(seq 0 $((count - 1))); do user_login=$(echo "$users_json" | jq -r ".[$i].login") - echo "Processing user: $user_login" >&2 - repos_json=$(curl --retry 3 --retry-delay 5 -sSL \ -H "Authorization: token ${{ secrets.TOKEN }}" \ "$GITEA_API/users/$user_login/repos?_ts=$(date +%s)") - repos_type=$(echo "$repos_json" | jq -r 'type' 2>/dev/null || echo "not_array") - repos_count=$(echo "$repos_json" | jq 'length' 2>/dev/null || echo "0") - [ "$repos_type" != "array" ] || [ "$repos_count" -eq 0 ] && continue + if ! echo "$repos_json" | jq -e . >/dev/null 2>&1; then + continue + fi + + repos_count=$(echo "$repos_json" | jq 'length') + [ "$repos_count" -eq 0 ] && continue 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 " Checking repo: $repo" >&2 http_code=$(curl --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)") - [ "$http_code" != "200" ] && continue - readme_json=$(cat temp_readme.json) - content=$(echo "$readme_json" | jq -r .content | base64 -d || echo "") + content=$(jq -r .content < temp_readme.json | base64 -d || echo "") echo "$content" | grep -q "^---$" && \ echo "$content" | grep -q "^gitea: none" && \ @@ -78,24 +68,28 @@ jobs: echo "$content" | grep -q "^# Skins" if [ $? -eq 0 ]; then osu_id=$(echo "$content" | awk '/osuid:[ ]*[0-9]+/ { match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH); exit }') - if [ -n "$osu_id" ]; then - user_data=$(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)") + [ -z "$osu_id" ] && continue - 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") + user_data=$(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)") - printf "%s|
| Name | -Global Rank | -Country Rank | -Profile | -Skins | -
|---|
- EOF - - sort -t '|' -k1,1n "$avatar_rows_file" | cut -d'|' -f2- | sed 's/^/ /' >> "$README_PATH" - - cat >> "$README_PATH" <<-EOF -
- EOF - - rm -f "$user_rows_file" "$avatar_rows_file" + echo "README updated" - name: Configure Git run: |