mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-06-28 02:06:04 +02:00
Update daily_README.yaml
This commit is contained in:
123
.github/workflows/daily_README.yaml
vendored
123
.github/workflows/daily_README.yaml
vendored
@@ -23,9 +23,9 @@ jobs:
|
|||||||
sudo chmod +x /usr/local/bin/yq
|
sudo chmod +x /usr/local/bin/yq
|
||||||
|
|
||||||
- name: Create README file
|
- name: Create README file
|
||||||
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
echo "Starting"
|
echo "Starting"
|
||||||
|
|
||||||
# Prepare template
|
# Prepare template
|
||||||
@@ -33,7 +33,7 @@ jobs:
|
|||||||
ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)"
|
ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)"
|
||||||
sed -i "/%%ADDONS_LIST%%/d" README2.md
|
sed -i "/%%ADDONS_LIST%%/d" README2.md
|
||||||
|
|
||||||
# Helper: resolve config path (json/yaml/yml)
|
# Helper to locate config
|
||||||
get_cfg() {
|
get_cfg() {
|
||||||
local dir="$1"
|
local dir="$1"
|
||||||
for ext in json yaml yml; do
|
for ext in json yaml yml; do
|
||||||
@@ -45,8 +45,7 @@ jobs:
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Sort/rename addon folders by .name (supports JSON & YAML)
|
# Sort/rename addons
|
||||||
# shellcheck disable=SC2046
|
|
||||||
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
|
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
|
||||||
CFG="$(get_cfg "$f" || true)"
|
CFG="$(get_cfg "$f" || true)"
|
||||||
if [ -n "${CFG:-}" ]; then
|
if [ -n "${CFG:-}" ]; then
|
||||||
@@ -63,24 +62,27 @@ jobs:
|
|||||||
CFG="$(get_cfg "$f" || true)"
|
CFG="$(get_cfg "$f" || true)"
|
||||||
[ -n "${CFG:-}" ] || continue
|
[ -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
|
if [ -f "$f/oldname" ]; then FOLDERNAME="$(cat "$f/oldname")"; else FOLDERNAME="$f"; fi
|
||||||
|
|
||||||
# Determine extension for shields (json/yaml)
|
|
||||||
EXT="${CFG##*.}"
|
EXT="${CFG##*.}"
|
||||||
BADGE_KIND="json"
|
BADGE_KIND="json"
|
||||||
case "$EXT" in
|
[[ "$EXT" =~ ^ya?ml$ ]] && BADGE_KIND="yaml"
|
||||||
yaml|yml) BADGE_KIND="yaml" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Read fields via yq (works for JSON & YAML)
|
# Extract values
|
||||||
NAME="$(yq -r '.name // ""' "$CFG")"
|
NAME="$(yq -r '.name // ""' "$CFG")"
|
||||||
DESCRIPTION="$(yq -r '.description // ""' "$CFG")"
|
DESCRIPTION="$(yq -r '.description // ""' "$CFG")"
|
||||||
PANEL_ICON="$(yq -r '.panel_icon // ""' "$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
|
if [ -n "$PANEL_ICON" ] && [ "$PANEL_ICON" != "null" ]; then
|
||||||
ICON_NAME="${PANEL_ICON#*:}"
|
ICON_NAME="${PANEL_ICON#*:}"
|
||||||
ICON=""
|
ICON=""
|
||||||
@@ -88,55 +90,47 @@ jobs:
|
|||||||
ICON=""
|
ICON=""
|
||||||
fi
|
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
|
sed -i "$ADDONSLINE"'{G;}' README2.md
|
||||||
|
|
||||||
# Feature badges (same as before)
|
# Features
|
||||||
if [[ "$SCHEMA_STR" == *"localdisks"* ]]; then sed -i "$ADDONSLINE"'a ![localdisks][localdisks-badge]' README2.md; fi
|
[[ "$SCHEMA_STR" == *"localdisks"* ]] && sed -i "$ADDONSLINE"'a ![localdisks][localdisks-badge]' README2.md
|
||||||
if [[ "$SCHEMA_STR" == *"networkdisks"* ]]; then sed -i "$ADDONSLINE"'a ![smb][smb-badge]' README2.md; fi
|
[[ "$SCHEMA_STR" == *"networkdisks"* ]] && sed -i "$ADDONSLINE"'a ![smb][smb-badge]' README2.md
|
||||||
if [[ "$FULL_ACCESS" == "true" ]]; then sed -i "$ADDONSLINE"'a ![full_access][full_access-badge]' README2.md; fi
|
[[ "$FULL_ACCESS" == "true" ]] && sed -i "$ADDONSLINE"'a ![full_access][full_access-badge]' README2.md
|
||||||
if [[ "$SERVICES" == *"mqtt"* ]]; then sed -i "$ADDONSLINE"'a ![mqtt][mqtt-badge]' README2.md; fi
|
[[ "$SERVICES" == *"mqtt"* ]] && sed -i "$ADDONSLINE"'a ![mqtt][mqtt-badge]' README2.md
|
||||||
if [[ "$SERVICES" == *"mysql"* ]]; then sed -i "$ADDONSLINE"'a ![MariaDB][mariadb-badge]' README2.md; fi
|
[[ "$SERVICES" == *"mysql"* ]] && sed -i "$ADDONSLINE"'a ![MariaDB][mariadb-badge]' README2.md
|
||||||
if [[ "$INGRESS" == "true" ]]; then sed -i "$ADDONSLINE"'a ![ingress][ingress-badge]' README2.md; fi
|
[[ "$INGRESS" == "true" ]] && sed -i "$ADDONSLINE"'a ![ingress][ingress-badge]' README2.md
|
||||||
|
|
||||||
|
# --- Architecture shields (colored only, no text) ---
|
||||||
|
make_badge() {
|
||||||
|
local color="$1"
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
# Architecture shields: green if present, orange otherwise
|
|
||||||
if [[ " $ARCHS " == *" armv7 "* ]]; then
|
if [[ " $ARCHS " == *" armv7 "* ]]; then
|
||||||
sed -i "$ADDONSLINE"'a ' README2.md
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' <!-- armv7 -->' README2.md
|
||||||
else
|
else
|
||||||
sed -i "$ADDONSLINE"'a ' README2.md
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' <!-- armv7 -->' README2.md
|
||||||
fi
|
fi
|
||||||
if [[ " $ARCHS " == *" amd64 "* ]]; then
|
if [[ " $ARCHS " == *" amd64 "* ]]; then
|
||||||
sed -i "$ADDONSLINE"'a ' README2.md
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' <!-- amd64 -->' README2.md
|
||||||
else
|
else
|
||||||
sed -i "$ADDONSLINE"'a ' README2.md
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' <!-- amd64 -->' README2.md
|
||||||
fi
|
fi
|
||||||
if [[ " $ARCHS " == *" aarch64 "* ]]; then
|
if [[ " $ARCHS " == *" aarch64 "* ]]; then
|
||||||
sed -i "$ADDONSLINE"'a ' README2.md
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' <!-- aarch64 -->' README2.md
|
||||||
else
|
else
|
||||||
sed -i "$ADDONSLINE"'a ' README2.md
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' <!-- aarch64 -->' README2.md
|
||||||
fi
|
fi
|
||||||
|
# ----------------------------------------------------
|
||||||
|
|
||||||
# Optional updater badge
|
[[ -f "$f/updater.json" ]] && sed -i "$ADDONSLINE"'a ' README2.md
|
||||||
if [[ -f "$f/updater.json" ]]; then
|
|
||||||
sed -i "$ADDONSLINE"'a ' README2.md
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Version badge: choose dynamic/json or dynamic/yaml
|
|
||||||
sed -i "$ADDONSLINE"'a   ' README2.md || true
|
sed -i "$ADDONSLINE"'a   ' README2.md || true
|
||||||
|
|
||||||
# Title line
|
|
||||||
sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md
|
sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md
|
||||||
done
|
done
|
||||||
|
|
||||||
# Restore original folder names
|
# Restore original folder names
|
||||||
echo "Restore structure..."
|
echo "Restoring folder names..."
|
||||||
find -- * -maxdepth 0 -type d | sort -r | while read -r f; do
|
find -- * -maxdepth 0 -type d | sort -r | while read -r f; do
|
||||||
if [ -f "$f/oldname" ]; then
|
if [ -f "$f/oldname" ]; then
|
||||||
NAME="$(cat "$f/oldname")"
|
NAME="$(cat "$f/oldname")"
|
||||||
@@ -144,12 +138,10 @@ jobs:
|
|||||||
mv "$f" "$NAME"
|
mv "$f" "$NAME"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "... done"
|
|
||||||
|
|
||||||
# Global stats
|
# Global stats
|
||||||
echo "Global stats..."
|
echo "Updating stats..."
|
||||||
STATS_DOWNLOADS="$(awk 'NR==2{print $1}' Stats)"
|
STATS_DOWNLOADS="$(awk 'NR==2{print $1}' Stats)"
|
||||||
# Count only config files at SECOND LEVEL (./<addon>/config.*), not deeper
|
|
||||||
STATS_CFG_COUNT="$(
|
STATS_CFG_COUNT="$(
|
||||||
find . -mindepth 2 -maxdepth 2 -type f \
|
find . -mindepth 2 -maxdepth 2 -type f \
|
||||||
-regextype posix-extended \
|
-regextype posix-extended \
|
||||||
@@ -161,48 +153,13 @@ jobs:
|
|||||||
STATS_ONE="$(awk 'NR==3{print $(NF)}' Stats)"
|
STATS_ONE="$(awk 'NR==3{print $(NF)}' Stats)"
|
||||||
STATS_TWO="$(awk 'NR==4{print $(NF)}' Stats)"
|
STATS_TWO="$(awk 'NR==4{print $(NF)}' Stats)"
|
||||||
STATS_THREE="$(awk 'NR==5{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_ONE%%|${STATS_ONE^}|g" README2.md
|
||||||
sed -i "s|%%STATS_TWO%%|${STATS_TWO^}|g" README2.md
|
sed -i "s|%%STATS_TWO%%|${STATS_TWO^}|g" README2.md
|
||||||
sed -i "s|%%STATS_THREE%%|${STATS_THREE^}|g" README2.md
|
sed -i "s|%%STATS_THREE%%|${STATS_THREE^}|g" README2.md
|
||||||
echo "... done"
|
|
||||||
|
|
||||||
# Breakdown per arch (unchanged logic)
|
# Replace template
|
||||||
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..."
|
|
||||||
mv README2.md README.md
|
mv README2.md README.md
|
||||||
echo "... done"
|
echo "README generated successfully."
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Commit if needed
|
- name: Commit if needed
|
||||||
uses: EndBug/add-and-commit@v9
|
uses: EndBug/add-and-commit@v9
|
||||||
with:
|
with:
|
||||||
|
|||||||
Reference in New Issue
Block a user