mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-01-11 10:21:02 +01:00
132 lines
5.0 KiB
Bash
132 lines
5.0 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Ensure yq is installed (mikefarah/yq v4+)
|
|
if ! command -v yq &>/dev/null; then
|
|
echo "yq is required (https://github.com/mikefarah/yq), please install it in your CI or local environment"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Starting"
|
|
|
|
cp .templates/.README.md README2.md
|
|
ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)"
|
|
sed -i "/%%ADDONS_LIST%%/d" README2.md
|
|
|
|
# Step 1: Rename folders by name field in config
|
|
for f in $(find . -maxdepth 1 -type d ! -name '.' | sort -r); do
|
|
CONFIG=""
|
|
[ -f "$f/config.json" ] && CONFIG="$f/config.json"
|
|
[ -z "$CONFIG" ] && [ -f "$f/config.yaml" ] && CONFIG="$f/config.yaml"
|
|
[ -z "$CONFIG" ] && continue
|
|
|
|
if [[ "$CONFIG" == *.json ]]; then
|
|
NAME=$(jq -r '.name // empty' "$CONFIG")
|
|
else
|
|
NAME=$(yq -r '.name // empty' "$CONFIG")
|
|
fi
|
|
|
|
if [[ -n "$NAME" && "$f" != "./$NAME" ]]; then
|
|
echo "${f#./}" > "$f/oldname"
|
|
mv "$f" "./$NAME"
|
|
fi
|
|
done
|
|
|
|
# Step 2: Populate README with addons list
|
|
find . -maxdepth 1 -type d ! -name '.' | sort -r | while read -r f; do
|
|
CONFIG=""
|
|
[ -f "$f/config.json" ] && CONFIG="$f/config.json"
|
|
[ -z "$CONFIG" ] && [ -f "$f/config.yaml" ] && CONFIG="$f/config.yaml"
|
|
[ -z "$CONFIG" ] && continue
|
|
|
|
# Helper functions
|
|
get_field() {
|
|
local field="$1"
|
|
if [[ "$CONFIG" == *.json ]]; then
|
|
jq -r "$field // empty" "$CONFIG"
|
|
else
|
|
yq -r "$field // empty" "$CONFIG"
|
|
fi
|
|
}
|
|
|
|
get_array() {
|
|
local field="$1"
|
|
if [[ "$CONFIG" == *.json ]]; then
|
|
jq -r "$field // empty | @sh" "$CONFIG" | tr -d "'"
|
|
else
|
|
yq -r "$field // empty | @sh" "$CONFIG" | tr -d "'"
|
|
fi
|
|
}
|
|
|
|
# Info extraction
|
|
if [ -f "$f/oldname" ]; then FOLDERNAME="$(cat "$f/oldname")"; else FOLDERNAME="${f#./}"; fi
|
|
NAME="$(get_field '.name')"
|
|
DESCRIPTION="$(get_field '.description')"
|
|
|
|
# Icon
|
|
ICON_RAW="$(get_field '.panel_icon')"
|
|
if [[ "$ICON_RAW" != "null" && -n "$ICON_RAW" ]]; then
|
|
ICON="${ICON_RAW#*:}"
|
|
ICON=""
|
|
else
|
|
ICON=""
|
|
fi
|
|
|
|
# Insert new line for this addon
|
|
sed -i "$ADDONSLINE"'{G;}' README2.md
|
|
|
|
# Badges
|
|
[[ "$(get_field '.schema')" == *"localdisks"* ]] && sed -i "$ADDONSLINE"'a ![localdisks][localdisks-badge]' README2.md
|
|
[[ "$(get_field '.schema')" == *"networkdisks"* ]] && sed -i "$ADDONSLINE"'a ![smb][smb-badge]' README2.md
|
|
[[ "$(get_field '.full_access')" == "true" ]] && sed -i "$ADDONSLINE"'a ![full_access][full_access-badge]' README2.md
|
|
|
|
SERVICES="$(get_array '.services[]')"
|
|
[[ "$SERVICES" == *"mqtt"* ]] && sed -i "$ADDONSLINE"'a ![mqtt][mqtt-badge]' README2.md
|
|
[[ "$SERVICES" == *"mysql"* ]] && sed -i "$ADDONSLINE"'a ![MariaDB][mariadb-badge]' README2.md
|
|
|
|
[[ "$(get_field '.ingress')" == "true" ]] && sed -i "$ADDONSLINE"'a ![ingress][ingress-badge]' README2.md
|
|
|
|
ARCHS="$(get_array '.arch[]')"
|
|
[[ "$ARCHS" == *"armv7"* ]] && sed -i "$ADDONSLINE"'a ![armv7][armv7-badge]' README2.md || sed -i "$ADDONSLINE"'a ![armv7no][armv7no-badge]' README2.md
|
|
[[ "$ARCHS" == *"amd64"* ]] && sed -i "$ADDONSLINE"'a ![amd64][amd64-badge]' README2.md || sed -i "$ADDONSLINE"'a ![amd64no][amd64no-badge]' README2.md
|
|
[[ "$ARCHS" == *"aarch64"* ]] && sed -i "$ADDONSLINE"'a ![aarch64][aarch64-badge]' README2.md || sed -i "$ADDONSLINE"'a ![aarch64no][aarch64no-badge]' README2.md
|
|
|
|
[ -f "$f/updater.json" ] && sed -i "$ADDONSLINE"'a ' README2.md
|
|
|
|
if [[ "$CONFIG" == *.json ]]; then
|
|
sed -i "$ADDONSLINE"'a   ' README2.md
|
|
else
|
|
sed -i "$ADDONSLINE"'a   ' README2.md
|
|
fi
|
|
|
|
sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md
|
|
done
|
|
|
|
# Step 3: Restore folder names if changed
|
|
echo "Restore structure..."
|
|
find . -maxdepth 1 -type d ! -name '.' | sort -r | while read -r f; do
|
|
[ -f "$f/oldname" ] && NAME="$(cat "$f/oldname")" && rm "$f/oldname" && mv "$f" "./$NAME"
|
|
done
|
|
echo "... done"
|
|
|
|
# Step 4: Stats (count both config.json and config.yaml)
|
|
echo "Global stats..."
|
|
STATS_DOWNLOADS="$(awk 'NR==2{print $1}' Stats)"
|
|
TOTAL_ADDONS=$(find . -type f \( -name "config.json" -o -name "config.yaml" \) | wc -l)
|
|
sed -i "s|%%STATS_DOWNLOADS%%|$STATS_DOWNLOADS|g" README2.md
|
|
sed -i "s|%%STATS_ADDONS%%|$TOTAL_ADDONS|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)"
|
|
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"
|
|
|
|
# Add any additional stats or breakdowns here as in your original
|
|
|
|
# Final: Replace template if changed
|
|
mv README2.md README.md
|
|
echo "... done"
|