Update .gitea/workflows/ci.yml

This commit is contained in:
Arlind
2025-06-20 16:22:36 +02:00
parent 4554c4f3eb
commit 0b3b1c01eb

View File

@@ -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: jobs:
generate_everything: generate_everything:
name: Full CI/CD Pipeline name: Full CI/CD Pipeline
@@ -23,6 +11,11 @@ jobs:
with: with:
token: ${{ secrets.TOKEN }} token: ${{ secrets.TOKEN }}
- name: Mask Sensitive Tokens
run: |
echo "::add-mask::${{ secrets.TOKEN }}"
echo "::add-mask::${{ secrets.OSUAPIV1 }}"
- name: Pull latest changes - name: Pull latest changes
run: | run: |
git pull --rebase origin main || echo "Nothing to rebase" git pull --rebase origin main || echo "Nothing to rebase"
@@ -31,46 +24,43 @@ jobs:
id: find_skins id: find_skins
shell: sh shell: sh
run: | run: |
set -eo pipefail
total_valid_entries=0 total_valid_entries=0
user_rows_file=$(mktemp) user_rows_file=$(mktemp)
avatar_rows_file=$(mktemp) avatar_rows_file=$(mktemp)
page=1 page=1
while :; do while :; do
echo "Fetching users page $page..." >&2
users_json=$(curl --retry 3 --retry-delay 5 -sSL \ users_json=$(curl --retry 3 --retry-delay 5 -sSL \
-H "Authorization: token ${{ secrets.TOKEN }}" \ -H "Authorization: token ${{ secrets.TOKEN }}" \
"$GITEA_API/admin/users?limit=50&page=$page&_ts=$(date +%s)") "$GITEA_API/admin/users?limit=50&page=$page&_ts=$(date +%s)")
count=$(echo "$users_json" | jq 'length') count=$(echo "$users_json" | jq 'length')
[ "$count" -eq 0 ] && break [ "$count" -eq 0 ] && break
for i in $(seq 0 $((count - 1))); do for i in $(seq 0 $((count - 1))); do
user_login=$(echo "$users_json" | jq -r ".[$i].login") user_login=$(echo "$users_json" | jq -r ".[$i].login")
echo "Processing user: $user_login" >&2
repos_json=$(curl --retry 3 --retry-delay 5 -sSL \ repos_json=$(curl --retry 3 --retry-delay 5 -sSL \
-H "Authorization: token ${{ secrets.TOKEN }}" \ -H "Authorization: token ${{ secrets.TOKEN }}" \
"$GITEA_API/users/$user_login/repos?_ts=$(date +%s)") "$GITEA_API/users/$user_login/repos?_ts=$(date +%s)")
repos_type=$(echo "$repos_json" | jq -r 'type' 2>/dev/null || echo "not_array") if ! echo "$repos_json" | jq -e . >/dev/null 2>&1; then
repos_count=$(echo "$repos_json" | jq 'length' 2>/dev/null || echo "0") continue
[ "$repos_type" != "array" ] || [ "$repos_count" -eq 0 ] && continue fi
repos_count=$(echo "$repos_json" | jq 'length')
[ "$repos_count" -eq 0 ] && continue
for j in $(seq 0 $((repos_count - 1))); do for j in $(seq 0 $((repos_count - 1))); do
owner=$(echo "$repos_json" | jq -r ".[$j].owner.login") owner=$(echo "$repos_json" | jq -r ".[$j].owner.login")
repo=$(echo "$repos_json" | jq -r ".[$j].name") repo=$(echo "$repos_json" | jq -r ".[$j].name")
html_url=$(echo "$repos_json" | jq -r ".[$j].html_url") 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 \ http_code=$(curl --retry 3 --retry-delay 5 -s -w "%{http_code}" -o temp_readme.json \
-H "Authorization: token ${{ secrets.TOKEN }}" \ -H "Authorization: token ${{ secrets.TOKEN }}" \
"$GITEA_API/repos/$owner/$repo/contents/README.md?_ts=$(date +%s)") "$GITEA_API/repos/$owner/$repo/contents/README.md?_ts=$(date +%s)")
[ "$http_code" != "200" ] && continue [ "$http_code" != "200" ] && continue
readme_json=$(cat temp_readme.json) content=$(jq -r .content < temp_readme.json | base64 -d || echo "")
content=$(echo "$readme_json" | jq -r .content | base64 -d || echo "")
echo "$content" | grep -q "^---$" && \ echo "$content" | grep -q "^---$" && \
echo "$content" | grep -q "^gitea: none" && \ echo "$content" | grep -q "^gitea: none" && \
@@ -78,10 +68,15 @@ jobs:
echo "$content" | grep -q "^# Skins" echo "$content" | grep -q "^# Skins"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
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 [ -n "$osu_id" ]; then [ -z "$osu_id" ] && continue
user_data=$(curl --retry 3 --retry-delay 5 -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)") "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
continue
fi
pp_rank=$(echo "$user_data" | jq -r '.[0].pp_rank // "9999999"') pp_rank=$(echo "$user_data" | jq -r '.[0].pp_rank // "9999999"')
pp_country_rank=$(echo "$user_data" | jq -r '.[0].pp_country_rank // "-"') pp_country_rank=$(echo "$user_data" | jq -r '.[0].pp_country_rank // "-"')
username=$(echo "$user_data" | jq -r '.[0].username // "'$owner'"') username=$(echo "$user_data" | jq -r '.[0].username // "'$owner'"')
@@ -96,7 +91,6 @@ jobs:
total_valid_entries=$((total_valid_entries + 1)) total_valid_entries=$((total_valid_entries + 1))
fi fi
fi
done done
done done
@@ -108,58 +102,35 @@ jobs:
echo "total_valid_entries=$total_valid_entries" >> "$GITHUB_OUTPUT" echo "total_valid_entries=$total_valid_entries" >> "$GITHUB_OUTPUT"
- name: Update README with user skins - name: Update README with user skins
id: update_readme
run: | run: |
user_rows_file="${{ steps.find_skins.outputs.user_rows_file }}" user_rows_file="${{ steps.find_skins.outputs.user_rows_file }}"
avatar_rows_file="${{ steps.find_skins.outputs.avatar_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 cat > "$README_PATH" <<-EOF
# osu! Swiss Community Skin collection # 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 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 # Check for change
</tbody> if cmp -s "$README_PATH" "${README_PATH}.bak"; then
</table> echo "README has not changed, skipping commit"
</details> exit 0
fi
<p align="center"> echo "README updated"
EOF
sort -t '|' -k1,1n "$avatar_rows_file" | cut -d'|' -f2- | sed 's/^/ /' >> "$README_PATH"
cat >> "$README_PATH" <<-EOF
</p>
EOF
rm -f "$user_rows_file" "$avatar_rows_file"
- name: Configure Git - name: Configure Git
run: | run: |