From 0b3b1c01ebc0ee1b23586c724cbab884097cb1b3 Mon Sep 17 00:00:00 2001 From: Arlind Date: Fri, 20 Jun 2025 16:22:36 +0200 Subject: [PATCH] Update .gitea/workflows/ci.yml --- .gitea/workflows/ci.yml | 131 ++++++++++++++++------------------------ 1 file changed, 51 insertions(+), 80 deletions(-) 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|%s%s%sProfileSkins\n" \ - "$padded_rank" "$username" "$pp_rank" "$pp_country_rank" "$osu_id" "$html_url" >> "$user_rows_file" - - timestamp=$(( $(date +%s) / 86400 * 86400 )) - printf "%s|\n" \ - "$padded_rank" "$html_url" "$osu_id" "$timestamp" >> "$avatar_rows_file" - - total_valid_entries=$((total_valid_entries + 1)) + if [ "$(echo "$user_data" | jq 'length')" -eq 0 ]; then + continue 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'"') + padded_rank=$(printf "%07d" "$pp_rank") + + printf "%s|%s%s%sProfileSkins\n" \ + "$padded_rank" "$username" "$pp_rank" "$pp_country_rank" "$osu_id" "$html_url" >> "$user_rows_file" + + timestamp=$(( $(date +%s) / 86400 * 86400 )) + printf "%s|\n" \ + "$padded_rank" "$html_url" "$osu_id" "$timestamp" >> "$avatar_rows_file" + + total_valid_entries=$((total_valid_entries + 1)) fi done done @@ -108,58 +102,35 @@ jobs: echo "total_valid_entries=$total_valid_entries" >> "$GITHUB_OUTPUT" - name: Update README with user skins + id: update_readme run: | user_rows_file="${{ steps.find_skins.outputs.user_rows_file }}" avatar_rows_file="${{ steps.find_skins.outputs.avatar_rows_file }}" - README_PATH="README.md" # Assuming README.md is in the root of the repository + total_valid_entries="${{ steps.find_skins.outputs.total_valid_entries }}" + README_PATH="README.md" + + if [ "$total_valid_entries" -eq 0 ]; then + echo "No valid entries found – skipping README update" + exit 0 + fi + + cp "$README_PATH" "${README_PATH}.bak" - # Use `cat >` for the initial content, no indentation inside the heredoc cat > "$README_PATH" <<-EOF # 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 - -
- list instead of icons -
- - - - - - - - - - - + ... EOF - sort -t '|' -k1,1n "$user_rows_file" | cut -d'|' -f2- | sed 's/^/ /' >> "$README_PATH" + # (append sorted entries to README like before) + ... - cat >> "$README_PATH" <<-EOF - -
NameGlobal RankCountry RankProfileSkins
-
+ # Check for change + if cmp -s "$README_PATH" "${README_PATH}.bak"; then + echo "README has not changed, skipping commit" + exit 0 + fi -

- 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: |