mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-01-10 09:51:02 +01:00
Update daily_README.yaml
This commit is contained in:
69
.github/workflows/daily_README.yaml
vendored
69
.github/workflows/daily_README.yaml
vendored
@@ -24,7 +24,8 @@ jobs:
|
||||
|
||||
- name: Create README file
|
||||
run: |
|
||||
# Init
|
||||
set -euo pipefail
|
||||
|
||||
echo "Starting"
|
||||
|
||||
# Prepare template
|
||||
@@ -32,7 +33,7 @@ jobs:
|
||||
ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)"
|
||||
sed -i "/%%ADDONS_LIST%%/d" README2.md
|
||||
|
||||
# Helper to find a config file (json/yaml/yml)
|
||||
# Helper: resolve config path (json/yaml/yml)
|
||||
get_cfg() {
|
||||
local dir="$1"
|
||||
for ext in json yaml yml; do
|
||||
@@ -44,7 +45,7 @@ jobs:
|
||||
return 1
|
||||
}
|
||||
|
||||
# Sort folders by addon name (support json & yaml)
|
||||
# Sort/rename addon folders by .name (supports JSON & YAML)
|
||||
# shellcheck disable=SC2046
|
||||
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
|
||||
CFG="$(get_cfg "$f" || true)"
|
||||
@@ -64,22 +65,22 @@ jobs:
|
||||
|
||||
echo "Project $f"
|
||||
|
||||
# Folder name in repo root (for links/badges)
|
||||
# Folder name for links/badges (restore later)
|
||||
if [ -f "$f/oldname" ]; then FOLDERNAME="$(cat "$f/oldname")"; else FOLDERNAME="$f"; fi
|
||||
|
||||
# Choose badge type & extension for Shields
|
||||
# Determine extension for shields (json/yaml)
|
||||
EXT="${CFG##*.}"
|
||||
BADGE_KIND="json"
|
||||
case "$EXT" in
|
||||
yaml|yml) BADGE_KIND="yaml" ;;
|
||||
esac
|
||||
|
||||
# Read fields using yq (works for both JSON & YAML)
|
||||
# Read fields via yq (works for JSON & YAML)
|
||||
NAME="$(yq -r '.name // ""' "$CFG")"
|
||||
DESCRIPTION="$(yq -r '.description // ""' "$CFG")"
|
||||
PANEL_ICON="$(yq -r '.panel_icon // ""' "$CFG")"
|
||||
|
||||
# Icon (mdi:foo)
|
||||
# mdi icon handling
|
||||
if [ -n "$PANEL_ICON" ] && [ "$PANEL_ICON" != "null" ]; then
|
||||
ICON_NAME="${PANEL_ICON#*:}"
|
||||
ICON=""
|
||||
@@ -87,16 +88,17 @@ jobs:
|
||||
ICON=""
|
||||
fi
|
||||
|
||||
# Derived strings for checks
|
||||
# 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)"
|
||||
|
||||
# Write infos
|
||||
echo "Writing infos"
|
||||
# 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
|
||||
@@ -104,21 +106,36 @@ jobs:
|
||||
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
|
||||
|
||||
if [[ " $ARCHS " == *" armv7 "* ]]; then sed -i "$ADDONSLINE"'a ![armv7][armv7-badge]' README2.md; else sed -i "$ADDONSLINE"'a ![armv7no][armv7no-badge]' README2.md; fi || true
|
||||
if [[ " $ARCHS " == *" amd64 "* ]]; then sed -i "$ADDONSLINE"'a ![amd64][amd64-badge]' README2.md; else sed -i "$ADDONSLINE"'a ![amd64no][amd64no-badge]' README2.md; fi || true
|
||||
if [[ " $ARCHS " == *" aarch64 "* ]]; then sed -i "$ADDONSLINE"'a ![aarch64][aarch64-badge]' README2.md; else sed -i "$ADDONSLINE"'a ![aarch64no][aarch64no-badge]' README2.md; fi || true
|
||||
# Architecture shields: green if present, orange otherwise
|
||||
if [[ " $ARCHS " == *" armv7 "* ]]; then
|
||||
sed -i "$ADDONSLINE"'a ' README2.md
|
||||
else
|
||||
sed -i "$ADDONSLINE"'a ' README2.md
|
||||
fi
|
||||
if [[ " $ARCHS " == *" amd64 "* ]]; then
|
||||
sed -i "$ADDONSLINE"'a ' README2.md
|
||||
else
|
||||
sed -i "$ADDONSLINE"'a ' README2.md
|
||||
fi
|
||||
if [[ " $ARCHS " == *" aarch64 "* ]]; then
|
||||
sed -i "$ADDONSLINE"'a ' README2.md
|
||||
else
|
||||
sed -i "$ADDONSLINE"'a ' README2.md
|
||||
fi
|
||||
|
||||
# Optional updater badge
|
||||
if [[ -f "$f/updater.json" ]]; then
|
||||
sed -i "$ADDONSLINE"'a ' README2.md
|
||||
fi
|
||||
|
||||
# Version badge: picks dynamic/json for JSON, dynamic/yaml for YAML
|
||||
# Version badge: choose dynamic/json or dynamic/yaml
|
||||
sed -i "$ADDONSLINE"'a   ' README2.md || true
|
||||
|
||||
# Title line
|
||||
sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md
|
||||
done
|
||||
|
||||
# Restore folders name
|
||||
# Restore original folder names
|
||||
echo "Restore structure..."
|
||||
find -- * -maxdepth 0 -type d | sort -r | while read -r f; do
|
||||
if [ -f "$f/oldname" ]; then
|
||||
@@ -129,13 +146,20 @@ jobs:
|
||||
done
|
||||
echo "... done"
|
||||
|
||||
# Write stats
|
||||
# Global stats
|
||||
echo "Global stats..."
|
||||
STATS_DOWNLOADS="$(awk 'NR==2{print $1}' Stats)"
|
||||
sed -i "s|%%STATS_DOWNLOADS%%|$STATS_DOWNLOADS|g" README2.md && \
|
||||
sed -i "s|%%STATS_ADDONS%%|$(find . -type f \( -name 'config.json' -o -name 'config.yaml' -o -name 'config.yml' \) | wc -l)|g" README2.md && \
|
||||
STATS_ONE="$(awk 'NR==3{print $(NF)}' Stats)" && \
|
||||
STATS_TWO="$(awk 'NR==4{print $(NF)}' Stats)" && \
|
||||
# Count only config files at SECOND LEVEL (./<addon>/config.*), not deeper
|
||||
STATS_CFG_COUNT="$(
|
||||
find . -mindepth 2 -maxdepth 2 -type f \
|
||||
-regextype posix-extended \
|
||||
-regex '.*/config\.(json|ya?ml)$' \
|
||||
| wc -l
|
||||
)"
|
||||
sed -i "s|%%STATS_DOWNLOADS%%|$STATS_DOWNLOADS|g" README2.md
|
||||
sed -i "s|%%STATS_ADDONS%%|$STATS_CFG_COUNT|g" README2.md
|
||||
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
|
||||
@@ -143,12 +167,12 @@ jobs:
|
||||
sed -i "s|%%STATS_THREE%%|${STATS_THREE^}|g" README2.md
|
||||
echo "... done"
|
||||
|
||||
# Breakdown per arch (unchanged)
|
||||
# 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_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}')"
|
||||
@@ -157,6 +181,7 @@ jobs:
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user