Generate README #598
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# yamllint disable rule:line-length | |
--- | |
name: Generate README | |
on: | |
schedule: | |
- cron: 0 17 * * * | |
workflow_dispatch: null | |
jobs: | |
README_updater: | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v3 | |
- name: Update path_filters | |
run: | | |
# Init | |
echo "Starting" | |
# Go through all folders, add to filters if not existing | |
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do | |
if [ -f "$f"/config.json ]; then | |
# Rename Readme | |
[ -f "$f"/Readme.md ] && mv "$f"/Readme.md "$f"/README.md | |
# Add to file | |
if ! grep "$f:" ".github/paths-filter.yml"; then | |
echo "$f: $f/config.*" >> ".github/paths-filter.yml" | |
fi | |
# Identify addons with true images | |
if [ "$(jq '.image' "$f/config.json")" != null ]; then | |
sed -i "/$f/ s/ # Image : yes//g" ".github/paths-filter.yml" | |
sed -i "/$f/ s/$/ # Image : yes/" ".github/paths-filter.yml" | |
fi | |
fi | |
done | |
# Sort yaml | |
sort -t= ".github/paths-filter.yml" -o ".github/paths-filter.yml" | |
- name: Create README file | |
run: | | |
# Init | |
echo "Starting" | |
# Prepare template | |
cp .templates/.README.md README2.md | |
ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)" | |
sed -i "/**ADDONS_LIST%%/d" README2.md | |
# Sort folders by addon name | |
# shellcheck disable=SC2086 | |
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do | |
if [ -f "$f"/config.json ]; then | |
NAME=$(jq -r '.name' "$f"/config.json) | |
if [[ "$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 | |
# $f is an addon directory | |
if [ -f "$f/config.json" ]; then | |
echo "Project $f" | |
# Get variables | |
if [ -f "$f/oldname" ]; then FOLDERNAME="$(cat "$f/oldname")"; else FOLDERNAME="$f"; fi | |
NAME="$(jq -r '.name' "$f/config.json")" | |
DESCRIPTION="$(jq -r '.description' "$f/config.json")" | |
# Get icon | |
if [ "$(jq '.panel_icon' "$f/config.json")" != null ]; then | |
ICON="$(jq -r '.panel_icon' "$f/config.json")" | |
ICON="${ICON#*:}" | |
ICON="![image](https://api.iconify.design/mdi/$ICON.svg)" | |
else | |
ICON="" | |
fi | |
# Write infos | |
echo "Writing infos" | |
sed -i "$ADDONSLINE"'{G;}' README2.md | |
if [[ "$(jq '.schema' "$f/config.json" 2>/dev/null)" == *"localdisks"* ]]; then sed -i "$ADDONSLINE"'a ![localdisks][localdisks-badge]' README2.md; fi | |
if [[ "$(jq '.schema' "$f/config.json" 2>/dev/null)" == *"networkdisks"* ]]; then sed -i "$ADDONSLINE"'a ![smb][smb-badge]' README2.md; fi | |
if [[ "$(jq '.full_access' "$f/config.json" 2>/dev/null)" == "true" ]]; then sed -i "$ADDONSLINE"'a ![full_access][full_access-badge]' README2.md; fi | |
if [[ "$(jq '.services[]' "$f/config.json" 2>/dev/null)" == *"mqtt"* ]]; then sed -i "$ADDONSLINE"'a ![mqtt][mqtt-badge]' README2.md; fi | |
if [[ "$(jq '.services[]' "$f/config.json" 2>/dev/null)" == *"mysql"* ]]; then sed -i "$ADDONSLINE"'a ![MariaDB][mariadb-badge]' README2.md; fi | |
if [[ "$(jq '.ingress' "$f/config.json" 2>/dev/null)" == "true" ]]; then sed -i "$ADDONSLINE"'a ![ingress][ingress-badge]' README2.md; fi | |
if [[ "$(jq '.arch[]' "$f/config.json")" == *"armv7"* ]]; then | |
sed -i "$ADDONSLINE"'a ![armv7][armv7-badge]' README2.md | |
else sed -i "$ADDONSLINE"'a ![armv7no][armv7no-badge]' README2.md; fi || true | |
if [[ "$(jq '.arch[]' "$f/config.json")" == *"amd64"* ]]; then | |
sed -i "$ADDONSLINE"'a ![amd64][amd64-badge]' README2.md | |
else sed -i "$ADDONSLINE"'a ![amd64no][amd64no-badge]' README2.md; fi || true | |
if [[ "$(jq '.arch[]' "$f/config.json")" == *"aarch64"* ]]; then | |
sed -i "$ADDONSLINE"'a ![aarch64][aarch64-badge]' README2.md | |
else sed -i "$ADDONSLINE"'a ![aarch64no][aarch64no-badge]' README2.md; fi || true | |
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 | |
sed -i "$ADDONSLINE"'a   ![Version](https://img.shields.io/badge/dynamic/json?label=Version&query=%24.version&url=https%3A%2F%2Fraw.githubusercontent.com%2Falexbelgium%2Fhassio-addons%2Fmaster%2F'"$FOLDERNAME"'%2Fconfig.json)' README2.md || true | |
sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md | |
fi | |
done | |
# Restore folders name | |
echo "Restore structure..." | |
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 | |
echo "... done" | |
# Write stats | |
# shellcheck disable=SC2002 | |
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 . -name "config.json" | wc -l)|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 | |
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 | |
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 $((100*$STATS_THREE/($STATS_ONE+$STATS_TWO+$STATS_THREE))) | |
echo "... done" | |
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 | |
echo "... done" | |
shell: bash | |
- name: Commit if needed | |
uses: EndBug/add-and-commit@v9 | |
with: | |
message: "GitHub bot : README updated" | |
default_author: github_actions |