mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-01-11 02:11:01 +01:00
168 lines
6.9 KiB
YAML
168 lines
6.9 KiB
YAML
# yamllint disable rule:line-length
|
|
---
|
|
name: Generate README
|
|
on:
|
|
schedule:
|
|
- cron: 0 17 * * *
|
|
workflow_dispatch: null
|
|
|
|
jobs:
|
|
README_updater:
|
|
if: github.repository_owner == 'alexbelgium'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout Repo
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Install yq (and jq)
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y jq
|
|
YQ_VERSION="v4.44.3"
|
|
sudo wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64"
|
|
sudo chmod +x /usr/local/bin/yq
|
|
|
|
- name: Create README file
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
echo "Starting"
|
|
|
|
# Prepare template
|
|
cp .templates/.README.md README2.md
|
|
ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)"
|
|
sed -i "/%%ADDONS_LIST%%/d" README2.md
|
|
|
|
# Helper to locate config
|
|
get_cfg() {
|
|
local dir="$1"
|
|
for ext in json yaml yml; do
|
|
if [ -f "$dir/config.$ext" ]; then
|
|
echo "$dir/config.$ext"
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
# Sort/rename addons
|
|
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
|
|
CFG="$(get_cfg "$f" || true)"
|
|
if [ -n "${CFG:-}" ]; then
|
|
NAME="$(yq -r '.name // ""' "$CFG")"
|
|
if [ -n "$NAME" ] && [ "$f" != "$NAME" ]; then
|
|
echo "$f" > "$f/oldname"
|
|
mv "$f" "$NAME"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Populate template
|
|
find -- * -maxdepth 0 -type d | sort -r | while read -r f; do
|
|
CFG="$(get_cfg "$f" || true)"
|
|
[ -n "${CFG:-}" ] || continue
|
|
|
|
echo "Processing $f"
|
|
|
|
# Handle folder rename reference
|
|
if [ -f "$f/oldname" ]; then FOLDERNAME="$(cat "$f/oldname")"; else FOLDERNAME="$f"; fi
|
|
EXT="${CFG##*.}"
|
|
BADGE_KIND="json"
|
|
[[ "$EXT" =~ ^ya?ml$ ]] && BADGE_KIND="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)"
|
|
|
|
# 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=""
|
|
else
|
|
ICON=""
|
|
fi
|
|
|
|
sed -i "$ADDONSLINE"'{G;}' README2.md
|
|
|
|
# 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 ""
|
|
}
|
|
|
|
if [[ " $ARCHS " == *" armv7 "* ]]; then
|
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' <!-- armv7 -->' README2.md
|
|
else
|
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' <!-- armv7 -->' README2.md
|
|
fi
|
|
if [[ " $ARCHS " == *" amd64 "* ]]; then
|
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' <!-- amd64 -->' README2.md
|
|
else
|
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' <!-- amd64 -->' README2.md
|
|
fi
|
|
if [[ " $ARCHS " == *" aarch64 "* ]]; then
|
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'brightgreen')"' <!-- aarch64 -->' README2.md
|
|
else
|
|
sed -i "$ADDONSLINE"'a '"$(make_badge 'orange')"' <!-- aarch64 -->' README2.md
|
|
fi
|
|
# ----------------------------------------------------
|
|
|
|
[[ -f "$f/updater.json" ]] && sed -i "$ADDONSLINE"'a ' README2.md
|
|
|
|
sed -i "$ADDONSLINE"'a   ' README2.md || true
|
|
sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md
|
|
done
|
|
|
|
# Restore original folder names
|
|
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")"
|
|
rm "$f/oldname"
|
|
mv "$f" "$NAME"
|
|
fi
|
|
done
|
|
|
|
# Global stats
|
|
echo "Updating stats..."
|
|
STATS_DOWNLOADS="$(awk 'NR==2{print $1}' Stats)"
|
|
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)"
|
|
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
|
|
|
|
# Replace template
|
|
mv README2.md README.md
|
|
echo "README generated successfully."
|
|
- name: Commit if needed
|
|
uses: EndBug/add-and-commit@v9
|
|
with:
|
|
message: "GitHub bot : README updated"
|
|
default_author: github_actions
|