From d59d314f1d3feb03e9d5f6b122cd5dd2e93c6aca Mon Sep 17 00:00:00 2001 From: Arlind Date: Wed, 11 Jun 2025 13:48:09 +0200 Subject: [PATCH] Update .gitea/workflows/ci.yml --- .gitea/workflows/ci.yml | 199 +++++++++++++--------------------------- 1 file changed, 65 insertions(+), 134 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index edf5beb..d048413 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -603,7 +603,7 @@ jobs: SKINS_JSON_FILE="${{ github.workspace }}/.gitea/workflows/skins.json" DESC_FILE=$(mktemp) - echo "Step 1: Extracting descriptions from skins.json..." + echo "Step 1: Extracting descriptions..." jq -r '.descriptions | to_entries[] | "\(.key)=\(.value)"' "$SKINS_JSON_FILE" > "$DESC_FILE" echo "Step 2: Starting to build README..." @@ -621,178 +621,109 @@ jobs: echo "**Go back to [osc/skins](https://git.sulejmani.xyz/osc/skins)**" >> "$README_PATH" echo "" >> "$README_PATH" - get_desc() { - key=$1 - grep -- "^${key}=" "$DESC_FILE" 2>/dev/null | cut -d '=' -f2- - } + get_desc() { grep -- "^$1=" "$DESC_FILE" 2>/dev/null | cut -d '=' -f2-; } ORDER_FILE=$(mktemp) - JSON_SKINS_TMP=$(mktemp) - SEEN_HEADERS_FILE=$(mktemp) - - echo "Step 3: Extracting order from skins.json..." + echo "Step 3: Reading order..." jq -r '.order[]' "$SKINS_JSON_FILE" > "$ORDER_FILE" - cp "$ORDER_FILE" "$JSON_SKINS_TMP" - echo "Step 4: Processing ordered skins..." + echo "Step 4: Rendering ordered skins..." while IFS= read -r skin; do - echo " Processing skin (order): $skin" dir="$DANSER_SKINS_DIR/$skin" - if [ ! -d "$dir" ]; then - echo " Skipping missing directory: $dir" - continue - fi + [ ! -d "$dir" ] && continue - ini_file=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n 1 || true) - skin_header="$skin" - if [ -f "$ini_file" ]; then - name_line=$(grep -i '^[[:space:]]*name:' "$ini_file" | head -n 1 || true) - if [ -n "${name_line:-}" ]; then - new_name=$(echo "$name_line" | cut -d ':' -f2- | sed 's/^[[:space:]]*//') - new_name=$(sanitize_filename "$new_name") - [ -n "$new_name" ] && skin_header="$new_name" + ini="$dir/skin.ini" + header="$skin" + if [ -f "$ini" ]; then + name_line=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1) + if [ -n "$name_line" ]; then + val="${name_line#*:}" + header="$(sanitize_filename "${val#"${val%%[![:space:]]*}"}")" fi fi - skin_header=$(printf '%s' "$skin_header" | tr -d '\r\n' | sed -e 's/[[:space:]]*$//') + base="$(printf "%s/%s" "$skin" "$header" | sed 's/ /%20/g')" + img="${base}.gif" + panel="${base}.png" + osk="${base}.osk" + mod="${base}-mod-icons.png" - if grep -F -x -q -- "$skin_header" "$SEEN_HEADERS_FILE"; then - echo " Already seen skin header: $skin_header" - continue - fi - echo "$skin_header" >> "$SEEN_HEADERS_FILE" - - escaped_img=$(printf "%s" "$skin_header.gif" | sed 's/ /%20/g') - escaped_osk=$(printf "%s" "$skin_header.osk" | sed 's/ /%20/g') - - echo " Writing skin: $skin_header" - echo "## [$skin_header]($REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/$escaped_osk)" >> "$README_PATH" + echo "## [$header]($REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/$osk)" >> "$README_PATH" echo "" >> "$README_PATH" - skin_desc=$(get_desc "$skin") - if [ -n "$skin_desc" ]; then - echo "$skin_desc" >> "$README_PATH" - echo "" >> "$README_PATH" - fi + desc=$(get_desc "$skin") + [ -n "$desc" ] && { echo "$desc" >> "$README_PATH"; echo "" >> "$README_PATH"; } - if [ -f "$ini_file" ]; then - author_line=$(grep -i '^[[:space:]]*Author:' "$ini_file" | head -n 1 || true) - if [ -n "${author_line:-}" ]; then - author=$(echo "$author_line" | cut -d ':' -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') - if [ -n "$author" ]; then - echo "**Author:** $author" >> "$README_PATH" - echo "" >> "$README_PATH" - fi + if [ -f "$ini" ]; then + author_line=$(grep -i '^[[:space:]]*Author:' "$ini" | head -n1) + if [ -n "$author_line" ]; then + auth="${author_line#*:}" + auth="${auth#"${auth%%[![:space:]]*}"}" + [ -n "$auth" ] && { echo "**Author:** $auth" >> "$README_PATH"; echo "" >> "$README_PATH"; } fi fi - echo "![$skin_header Gameplay](media/gameplay/$escaped_img)" >> "$README_PATH" + echo "![$header Gameplay](media/gameplay/$img)" >> "$README_PATH" + echo "" >> "$README_PATH" + echo "![$header Ranking Panel](media/panel/$panel)" >> "$README_PATH" + echo "" >> "$README_PATH" + echo "![$header Mods](media/icons/$mod)" >> "$README_PATH" echo "" >> "$README_PATH" - - if [ -f "media/panel/${skin_header}.png" ]; then - escaped_panel=$(printf "%s" "${skin_header}.png" | sed 's/ /%20/g') - echo "![$skin_header Ranking Panel](media/panel/$escaped_panel)" >> "$README_PATH" - echo "" >> "$README_PATH" - fi - - mod_icon_file="${skin_header}-mod-icons.png" - if [ -f "media/icons/$mod_icon_file" ]; then - escaped_mod=$(printf "%s" "$mod_icon_file" | sed 's/ /%20/g') - echo "![$skin_header Mods](media/icons/$escaped_mod)" >> "$README_PATH" - echo "" >> "$README_PATH" - fi done < "$ORDER_FILE" - echo "Step 5: Processing extra skins..." + echo "Step 5: Rendering extra skins..." find "$DANSER_SKINS_DIR" -mindepth 1 -maxdepth 1 -type d | while IFS= read -r dir; do skin=$(basename "$dir") - echo " Processing extra skin: $skin" + grep -qx "$skin" "$ORDER_FILE" && continue - ini_file=$(find "$dir" -maxdepth 1 -iname "skin.ini" | head -n 1 || true) - skin_header="$skin" - if [ -f "$ini_file" ]; then - name_line=$(grep -i '^[[:space:]]*name:' "$ini_file" | head -n 1 || true) - if [ -n "${name_line:-}" ]; then - new_name=$(echo "$name_line" | cut -d ':' -f2- | sed 's/^[[:space:]]*//') - new_name=$(sanitize_filename "$new_name") - [ -n "$new_name" ] && skin_header="$new_name" + ini="$dir/skin.ini" + header="$skin" + if [ -f "$ini" ]; then + name_line=$(grep -i '^[[:space:]]*Name:' "$ini" | head -n1) + if [ -n "$name_line" ]; then + val="${name_line#*:}" + header="$(sanitize_filename "${val#"${val%%[![:space:]]*}"}")" fi fi - skin_header=$(printf '%s' "$skin_header" | tr -d '\r\n' | sed -e 's/[[:space:]]*$//') + base="$(printf "%s/%s" "$skin" "$header" | sed 's/ /%20/g')" + img="${base}.gif" + panel="${base}.png" + osk="${base}.osk" + mod="${base}-mod-icons.png" - if grep -F -x -q -- "$skin_header" "$SEEN_HEADERS_FILE"; then - echo " Already seen (extra): $skin_header" - continue - fi - - if grep -F -x -q -- "$skin" "$JSON_SKINS_TMP"; then - echo " Already ordered (extra): $skin" - continue - fi - - echo "$skin_header" >> "$SEEN_HEADERS_FILE" - - escaped_img=$(printf "%s" "$skin_header.gif" | sed 's/ /%20/g') - escaped_osk=$(printf "%s" "$skin_header.osk" | sed 's/ /%20/g') - - echo " Writing extra skin: $skin_header" - echo "## [$skin_header]($REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/$escaped_osk)" >> "$README_PATH" + echo "## [$header]($REGISTRY_URL/$USER_REPOSITORY/media/tag/$new_tag/export/$osk)" >> "$README_PATH" echo "" >> "$README_PATH" - if [ -f "$ini_file" ]; then - author_line=$(grep -i '^[[:space:]]*Author:' "$ini_file" | head -n 1 || true) - if [ -n "${author_line:-}" ]; then - author=$(echo "$author_line" | cut -d ':' -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') - if [ -n "$author" ]; then - echo "**Author:** $author" >> "$README_PATH" - echo "" >> "$README_PATH" - fi + if [ -f "$ini" ]; then + author_line=$(grep -i '^[[:space:]]*Author:' "$ini" | head -n1) + if [ -n "$author_line" ]; then + auth="${author_line#*:}" + auth="${auth#"${auth%%[![:space:]]*}"}" + [ -n "$auth" ] && { echo "**Author:** $auth" >> "$README_PATH"; echo "" >> "$README_PATH"; } fi fi - echo "![$skin_header Gameplay](media/gameplay/$escaped_img)" >> "$README_PATH" + echo "![$header Gameplay](media/gameplay/$img)" >> "$README_PATH" + echo "" >> "$README_PATH" + echo "![$header Ranking Panel](media/panel/$panel)" >> "$README_PATH" + echo "" >> "$README_PATH" + echo "![$header Mods](media/icons/$mod)" >> "$README_PATH" echo "" >> "$README_PATH" - - if [ -f "media/panel/${skin_header}.png" ]; then - escaped_panel=$(printf "%s" "${skin_header}.png" | sed 's/ /%20/g') - echo "![$skin_header Ranking Panel](media/panel/$escaped_panel)" >> "$README_PATH" - echo "" >> "$README_PATH" - fi - - mod_icon_file="${skin_header}-mod-icons.png" - if [ -f "media/icons/$mod_icon_file" ]; then - escaped_mod=$(printf "%s" "$mod_icon_file" | sed 's/ /%20/g') - echo "![$skin_header Mods](media/icons/$escaped_mod)" >> "$README_PATH" - echo "" >> "$README_PATH" - fi done - echo "Step 7: Writing Build History section..." + echo "Step 6: Build History..." echo "# Build History" >> "$README_PATH" echo "" >> "$README_PATH" echo "| Version | Date |" >> "$README_PATH" echo "| ------- | ---- |" >> "$README_PATH" - - echo " Getting latest commit date..." - current_commit_date=$(TZ="Europe/Zurich" date -d "$(git log -1 --format=%cI)" "+%d.%m.%Y %H:%M:%S") - echo " Latest commit date: $current_commit_date" - echo "| [\`$new_tag (Current)\`](https://git.sulejmani.xyz/arlind/skins/src/tag/$new_tag/README.md) | $current_commit_date |" >> "$README_PATH" - - echo " Checking for old tags..." - old_tags=$(git tag --sort=-v:refname | grep -v "^$new_tag$" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' || true) - - if [ -n "$old_tags" ]; then - echo " Found old tags:" - echo "$old_tags" | while read -r tag; do - echo " Processing tag: $tag" - tag_date=$(git log -1 --format=%ci "$tag") - formatted_date=$(TZ="Europe/Zurich" date -d "$tag_date" "+%d.%m.%Y %H:%M:%S") - echo "| [\`$tag\`](https://git.sulejmani.xyz/arlind/skins/src/tag/$tag/README.md) | $formatted_date |" >> "$README_PATH" - done - else - echo " No old tags found. Skipping old tags section." - fi + commit_date=$(TZ="Europe/Zurich" date -d "$(git log -1 --format=%cI)" "+%d.%m.%Y %H:%M:%S") + echo "| [\`$new_tag (Current)\`](https://git.sulejmani.xyz/arlind/skins/src/tag/$new_tag/README.md) | $commit_date |" >> "$README_PATH" + for tag in $(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | grep -v "^$new_tag$"); do + date=$(git log -1 --format=%ci "$tag") + fmt=$(TZ="Europe/Zurich" date -d "$date" "+%d.%m.%Y %H:%M:%S") + echo "| [\`$tag\`](https://git.sulejmani.xyz/arlind/skins/src/tag/$tag/README.md) | $fmt |" >> "$README_PATH" + done echo "README generation completed successfully."