From de9b663b74209f9a7a7d00662a12060db139909d Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Mon, 10 Nov 2025 21:55:14 +0100 Subject: [PATCH] Update daily_README.yaml --- .github/workflows/daily_README.yaml | 123 +++++++++------------------- 1 file changed, 40 insertions(+), 83 deletions(-) diff --git a/.github/workflows/daily_README.yaml b/.github/workflows/daily_README.yaml index 515e2eb34..c7b048be0 100644 --- a/.github/workflows/daily_README.yaml +++ b/.github/workflows/daily_README.yaml @@ -23,9 +23,9 @@ jobs: sudo chmod +x /usr/local/bin/yq - name: Create README file + shell: bash run: | set -euo pipefail - echo "Starting" # Prepare template @@ -33,7 +33,7 @@ jobs: ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)" sed -i "/%%ADDONS_LIST%%/d" README2.md - # Helper: resolve config path (json/yaml/yml) + # Helper to locate config get_cfg() { local dir="$1" for ext in json yaml yml; do @@ -45,8 +45,7 @@ jobs: return 1 } - # Sort/rename addon folders by .name (supports JSON & YAML) - # shellcheck disable=SC2046 + # Sort/rename addons for f in $( find -- * -maxdepth 0 -type d | sort -r ); do CFG="$(get_cfg "$f" || true)" if [ -n "${CFG:-}" ]; then @@ -63,24 +62,27 @@ jobs: CFG="$(get_cfg "$f" || true)" [ -n "${CFG:-}" ] || continue - echo "Project $f" + echo "Processing $f" - # Folder name for links/badges (restore later) + # Handle folder rename reference if [ -f "$f/oldname" ]; then FOLDERNAME="$(cat "$f/oldname")"; else FOLDERNAME="$f"; fi - - # Determine extension for shields (json/yaml) EXT="${CFG##*.}" BADGE_KIND="json" - case "$EXT" in - yaml|yml) BADGE_KIND="yaml" ;; - esac + [[ "$EXT" =~ ^ya?ml$ ]] && BADGE_KIND="yaml" - # Read fields via yq (works for JSON & YAML) + # Extract values NAME="$(yq -r '.name // ""' "$CFG")" DESCRIPTION="$(yq -r '.description // ""' "$CFG")" PANEL_ICON="$(yq -r '.panel_icon // ""' "$CFG")" + SCHEMA_STR="$(yq -o=json '.schema // {}' "$CFG" | tr -d '\n' || true)" + SERVICES="$(yq -r '.services[]? // empty' "$CFG" | tr '\n' ' ' || true)" + FULL_ACCESS="$(yq -r '.full_access // false' "$CFG" || true)" + INGRESS="$(yq -r '.ingress // false' "$CFG" || true)" - # mdi icon handling + # Normalize arch array + ARCHS="$(yq -r '.arch // [] | join(" ")' "$CFG" || true)" + + # Icon (mdi:) if [ -n "$PANEL_ICON" ] && [ "$PANEL_ICON" != "null" ]; then ICON_NAME="${PANEL_ICON#*:}" ICON="![image](https://api.iconify.design/mdi/$ICON_NAME.svg)" @@ -88,55 +90,47 @@ jobs: ICON="" fi - # Gather booleans/arrays as flat strings - SCHEMA_STR="$(yq -o=json '.schema // {}' "$CFG" | tr -d '\n' || true)" - SERVICES="$(yq -r '.services[]? // empty' "$CFG" | tr '\n' ' ' || true)" - ARCHS="$(yq -r '.arch[]? // empty' "$CFG" | tr '\n' ' ' || true)" - FULL_ACCESS="$(yq -r '.full_access // false' "$CFG" || true)" - INGRESS="$(yq -r '.ingress // false' "$CFG" || true)" - - # Insert a blank line block at the marker location sed -i "$ADDONSLINE"'{G;}' README2.md - # Feature badges (same as before) - if [[ "$SCHEMA_STR" == *"localdisks"* ]]; then sed -i "$ADDONSLINE"'a ![localdisks][localdisks-badge]' README2.md; fi - if [[ "$SCHEMA_STR" == *"networkdisks"* ]]; then sed -i "$ADDONSLINE"'a ![smb][smb-badge]' README2.md; fi - if [[ "$FULL_ACCESS" == "true" ]]; then sed -i "$ADDONSLINE"'a ![full_access][full_access-badge]' README2.md; fi - if [[ "$SERVICES" == *"mqtt"* ]]; then sed -i "$ADDONSLINE"'a ![mqtt][mqtt-badge]' README2.md; fi - if [[ "$SERVICES" == *"mysql"* ]]; then sed -i "$ADDONSLINE"'a ![MariaDB][mariadb-badge]' README2.md; fi - if [[ "$INGRESS" == "true" ]]; then sed -i "$ADDONSLINE"'a ![ingress][ingress-badge]' README2.md; fi + # Features + [[ "$SCHEMA_STR" == *"localdisks"* ]] && sed -i "$ADDONSLINE"'a ![localdisks][localdisks-badge]' README2.md + [[ "$SCHEMA_STR" == *"networkdisks"* ]] && sed -i "$ADDONSLINE"'a ![smb][smb-badge]' README2.md + [[ "$FULL_ACCESS" == "true" ]] && sed -i "$ADDONSLINE"'a ![full_access][full_access-badge]' README2.md + [[ "$SERVICES" == *"mqtt"* ]] && sed -i "$ADDONSLINE"'a ![mqtt][mqtt-badge]' README2.md + [[ "$SERVICES" == *"mysql"* ]] && sed -i "$ADDONSLINE"'a ![MariaDB][mariadb-badge]' README2.md + [[ "$INGRESS" == "true" ]] && sed -i "$ADDONSLINE"'a ![ingress][ingress-badge]' README2.md + + # --- Architecture shields (colored only, no text) --- + make_badge() { + local color="$1" + echo "![badge](https://img.shields.io/badge/--$color)" + } - # Architecture shields: green if present, orange otherwise if [[ " $ARCHS " == *" armv7 "* ]]; then - sed -i "$ADDONSLINE"'a ![armv7](https://img.shields.io/badge/armv7-supported-brightgreen)' README2.md + sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' ' README2.md else - sed -i "$ADDONSLINE"'a ![armv7](https://img.shields.io/badge/armv7-unsupported-orange)' README2.md + sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' ' README2.md fi if [[ " $ARCHS " == *" amd64 "* ]]; then - sed -i "$ADDONSLINE"'a ![amd64](https://img.shields.io/badge/amd64-supported-brightgreen)' README2.md + sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' ' README2.md else - sed -i "$ADDONSLINE"'a ![amd64](https://img.shields.io/badge/amd64-unsupported-orange)' README2.md + sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' ' README2.md fi if [[ " $ARCHS " == *" aarch64 "* ]]; then - sed -i "$ADDONSLINE"'a ![aarch64](https://img.shields.io/badge/aarch64-supported-brightgreen)' README2.md + sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' ' README2.md else - sed -i "$ADDONSLINE"'a ![aarch64](https://img.shields.io/badge/aarch64-unsupported-orange)' README2.md + sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' ' README2.md fi + # ---------------------------------------------------- - # Optional updater badge - if [[ -f "$f/updater.json" ]]; then - sed -i "$ADDONSLINE"'a ![Update](https://img.shields.io/badge/dynamic/json?label=Updated&query=%24.last_update&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2F'"$FOLDERNAME"'%2Fupdater.json)' README2.md - fi + [[ -f "$f/updater.json" ]] && sed -i "$ADDONSLINE"'a ![Update](https://img.shields.io/badge/dynamic/json?label=Updated&query=%24.last_update&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2F'"$FOLDERNAME"'%2Fupdater.json)' README2.md - # Version badge: choose dynamic/json or dynamic/yaml sed -i "$ADDONSLINE"'a   ![Version](https://img.shields.io/badge/dynamic/'"$BADGE_KIND"'?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2F'"$FOLDERNAME"'%2Fconfig.'"$EXT"')' README2.md || true - - # Title line sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md done # Restore original folder names - echo "Restore structure..." + echo "Restoring folder names..." find -- * -maxdepth 0 -type d | sort -r | while read -r f; do if [ -f "$f/oldname" ]; then NAME="$(cat "$f/oldname")" @@ -144,12 +138,10 @@ jobs: mv "$f" "$NAME" fi done - echo "... done" # Global stats - echo "Global stats..." + echo "Updating stats..." STATS_DOWNLOADS="$(awk 'NR==2{print $1}' Stats)" - # Count only config files at SECOND LEVEL (.//config.*), not deeper STATS_CFG_COUNT="$( find . -mindepth 2 -maxdepth 2 -type f \ -regextype posix-extended \ @@ -161,48 +153,13 @@ jobs: STATS_ONE="$(awk 'NR==3{print $(NF)}' Stats)" STATS_TWO="$(awk 'NR==4{print $(NF)}' Stats)" STATS_THREE="$(awk 'NR==5{print $(NF)}' Stats)" - echo "Best addon is $STATS_ONE" sed -i "s|%%STATS_ONE%%|${STATS_ONE^}|g" README2.md sed -i "s|%%STATS_TWO%%|${STATS_TWO^}|g" README2.md sed -i "s|%%STATS_THREE%%|${STATS_THREE^}|g" README2.md - echo "... done" - # Breakdown per arch (unchanged logic) - echo "Breakdown per arch..." - STATS_ARMV7="$(awk '{SUM+=$3}END{print SUM}' Stats2)" - STATS_AMD64="$(awk '{SUM+=$4}END{print SUM}' Stats2)" - STATS_AARCH64="$(awk '{SUM+=$5}END{print SUM}' Stats2)" - STATS_DOWNLOADS=$(( STATS_ARMV7 + STATS_AMD64 + STATS_AARCH64 )) - STATS_ARMV7="$(awk -v t1="$STATS_ARMV7" -v t2="$STATS_AMD64" -v t3="$STATS_AARCH64" -v t4="$STATS_DOWNLOADS" 'BEGIN{printf "%.0f", t1/t4 * 100}')" - STATS_AMD64="$(awk -v t1="$STATS_ARMV7" -v t2="$STATS_AMD64" -v t3="$STATS_AARCH64" -v t4="$STATS_DOWNLOADS" 'BEGIN{printf "%.0f", t2/t4 * 100}')" - STATS_AARCH64="$(awk -v t1="$STATS_ARMV7" -v t2="$STATS_AMD64" -v t3="$STATS_AARCH64" -v t4="$STATS_DOWNLOADS" 'BEGIN{printf "%.0f", t3/t4 * 100}')" - sed -i "s|%%STATS_ARMV7%%|armv7: ${STATS_ARMV7}%|g" README2.md - sed -i "s|%%STATS_AMD64%%|amd64: ${STATS_AMD64}%|g" README2.md - sed -i "s|%%STATS_AARCH64%%|aarch64: ${STATS_AARCH64}%|g" README2.md - echo "... done" - - # Top 3 breakdown injection - for var in "$STATS_ONE" "$STATS_TWO" "$STATS_THREE"; do - i=0 - j=0 - k=0 - # shellcheck disable=SC2013 - for i in $(sed -n "/$var/p" Stats); do - k="$((k+1))" - if [ "$k" -eq 3 ]; then break; fi - if [ "$i" -eq "$i" ] && [ "$i" -gt "$j" ]; then j="$i"; fi - done - sed -i "s|${var^}|${var^} (${j}x)|g" README2.md - echo "$STATS_ONE has $j downloads" - done - echo "... done" - - # Replace template if change - echo "Replace template..." + # Replace template mv README2.md README.md - echo "... done" - shell: bash - + echo "README generated successfully." - name: Commit if needed uses: EndBug/add-and-commit@v9 with: