Update .gitea/workflows/ci.yml

This commit is contained in:
Arlind
2025-06-20 15:35:49 +02:00
parent e3dde02ab3
commit 038ee03ce8

View File

@@ -35,53 +35,41 @@ jobs:
user_rows_file=$(mktemp)
avatar_rows_file=$(mktemp)
echo "Fetching users page 1..." >&2
users_json=$(curl -sSL \
page=1
while :; do
echo "Fetching users page $page..." >&2
users_json=$(curl --retry 3 --retry-delay 5 -sSL \
-H "Authorization: token ${{ secrets.TOKEN }}" \
-H "Cache-Control: no-cache" \
-H "Pragma: no-cache" \
"$GITEA_API/admin/users?limit=50&page=1&_ts=$(date +%s)")
"$GITEA_API/admin/users?limit=50&page=$page&_ts=$(date +%s)")
jq_type=$(echo "$users_json" | jq -r 'type' 2>/dev/null || echo "jq_error_type")
jq_length=$(echo "$users_json" | jq 'length' 2>/dev/null || echo "jq_error_length")
if [ "$jq_type" != "array" ] || [ "$jq_length" -eq 0 ]; then
echo "No users found or invalid JSON received on page 1. (Type: $jq_type, Length: $jq_length)." >&2
exit 1
fi
count=$(echo "$users_json" | jq 'length')
[ "$count" -eq 0 ] && break
i=0
while [ "$i" -lt "$jq_length" ]; do
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 -sSL \
repos_json=$(curl --retry 3 --retry-delay 5 -sSL \
-H "Authorization: token ${{ secrets.TOKEN }}" \
-H "Cache-Control: no-cache" \
-H "Pragma: no-cache" \
"$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")
if [ "$repos_type" != "array" ] || [ "$repos_count" -eq 0 ]; then
echo " No repos or invalid JSON for $user_login" >&2
i=$((i + 1))
continue
fi
[ "$repos_type" != "array" ] || [ "$repos_count" -eq 0 ] && continue
j=0
while [ "$j" -lt "$repos_count" ]; do
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
readme_json=$(curl -sSL \
http_code=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" -o temp_readme.json \
-H "Authorization: token ${{ secrets.TOKEN }}" \
-H "Cache-Control: no-cache" \
-H "Pragma: no-cache" \
"$GITEA_API/repos/$owner/$repo/contents/README.md?_ts=$(date +%s)" || echo "{}")
"$GITEA_API/repos/$owner/$repo/contents/README.md?_ts=$(date +%s)")
if echo "$readme_json" | jq -e '.content' >/dev/null 2>&1; then
[ "$http_code" != "200" ] && continue
readme_json=$(cat temp_readme.json)
content=$(echo "$readme_json" | jq -r .content | base64 -d || echo "")
echo "$content" | grep -q "^---$" && \
@@ -91,28 +79,28 @@ jobs:
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 -s \
-H 'Cache-Control: no-cache' \
-H 'Pragma: no-cache' \
--compressed "https://osu.ppy.sh/api/get_user?k=${{ secrets.OSUAPIV1 }}&u=$osu_id&type=id&_ts=$(date +%s)")
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)")
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| <tr><td>%s</td><td>%s</td><td>%s</td><td><a href=\"https://osu.ppy.sh/users/%s\">Profile</a></td><td><a href=\"%s\">Skins</a></td></tr>\n" \
printf "%s|<tr><td>%s</td><td>%s</td><td>%s</td><td><a href=\"https://osu.ppy.sh/users/%s\">Profile</a></td><td><a href=\"%s\">Skins</a></td></tr>\n" \
"$padded_rank" "$username" "$pp_rank" "$pp_country_rank" "$osu_id" "$html_url" >> "$user_rows_file"
timestamp=$(( $(date +%s) / 86400 * 86400 ))
printf "%s| <a href=\"%s\"><img src=\"https://a.ppy.sh/%s?%s\" width=175 height=175></a>\n" \
printf "%s|<a href=\"%s\"><img src=\"https://a.ppy.sh/%s?%s\" width=175 height=175></a>\n" \
"$padded_rank" "$html_url" "$osu_id" "$timestamp" >> "$avatar_rows_file"
total_valid_entries=$((total_valid_entries + 1))
fi
fi
fi
j=$((j + 1))
done
i=$((i + 1))
done
page=$((page + 1))
done
echo "user_rows_file=$user_rows_file" >> "$GITHUB_OUTPUT"
@@ -121,42 +109,51 @@ jobs:
- name: Update README with user skins
run: |
echo "# osu! Swiss Community Skin collection" > "$README_PATH"
echo "" >> "$README_PATH"
echo "Welcome to the osu! Swiss Community Skin collection, this repository archives and showcases Skins osc members use." >> "$README_PATH"
echo "" >> "$README_PATH"
echo "Enjoy looking around, click file names to download the skins and click on the images to see more about the skins." >> "$README_PATH"
echo "" >> "$README_PATH"
echo "## How do I add my skins here?" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "If you're interested in adding your skins here please follow this tutorial [how-to-use](/how-to-use.md)" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "## Skins" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "<details>" >> "$README_PATH"
echo " <summary>list instead of icons</summary>" >> "$README_PATH"
echo " <br>" >> "$README_PATH"
echo " <table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">" >> "$README_PATH"
echo " <thead>" >> "$README_PATH"
echo " <tr>" >> "$README_PATH"
echo " <th>Name</th>" >> "$README_PATH"
echo " <th>Global Rank</th>" >> "$README_PATH"
echo " <th>Country Rank</th>" >> "$README_PATH"
echo " <th>Profile</th>" >> "$README_PATH"
echo " <th>Skins</th>" >> "$README_PATH"
echo " </tr>" >> "$README_PATH"
echo " </thead>" >> "$README_PATH"
echo " <tbody>" >> "$README_PATH"
sort -t '|' -k1,1n "${{ steps.find_skins.outputs.user_rows_file }}" | cut -d'|' -f2- >> "$README_PATH"
echo " </tbody>" >> "$README_PATH"
echo " </table>" >> "$README_PATH"
echo "</details>" >> "$README_PATH"
echo "" >> "$README_PATH"
echo "<p align=\"center\">" >> "$README_PATH"
sort -t '|' -k1,1n "${{ steps.find_skins.outputs.avatar_rows_file }}" | cut -d'|' -f2- >> "$README_PATH"
user_rows_file="${{ steps.find_skins.outputs.user_rows_file }}"
avatar_rows_file="${{ steps.find_skins.outputs.avatar_rows_file }}"
cat <<EOF > "$README_PATH"
# osu! Swiss Community Skin collection
Welcome to the osu! Swiss Community Skin collection, this repository archives and showcases Skins osc members use.
Enjoy looking around, click file names to download the skins and click on the images to see more about the skins.
## How do I add my skins here?
If you're interested in adding your skins here please follow this tutorial [how-to-use](/how-to-use.md)
## Skins
<details>
<summary>list instead of icons</summary>
<br>
<table border="1" cellpadding="5" cellspacing="0">
<thead>
<tr>
<th>Name</th>
<th>Global Rank</th>
<th>Country Rank</th>
<th>Profile</th>
<th>Skins</th>
</tr>
</thead>
<tbody>
EOF
sort -t '|' -k1,1n "$user_rows_file" | cut -d'|' -f2- >> "$README_PATH"
cat <<EOF >> "$README_PATH"
</tbody>
</table>
</details>
<p align="center">
EOF
sort -t '|' -k1,1n "$avatar_rows_file" | cut -d'|' -f2- >> "$README_PATH"
echo "</p>" >> "$README_PATH"
rm -f "${{ steps.find_skins.outputs.user_rows_file }}" "${{ steps.find_skins.outputs.avatar_rows_file }}"
echo "Generated skins section and updated '$README_PATH' successfully." >&2
rm -f "$user_rows_file" "$avatar_rows_file"
- name: Configure Git
run: |