# yamllint disable rule:line-length --- name: Generate weekly graphs on: workflow_call: workflow_dispatch: jobs: stats_graphs: runs-on: ubuntu-latest steps: - name: Checkout Repo uses: actions/checkout@v4 - name: Install apps run: | git pull --rebase origin master sudo apt-get update sudo apt-get install gnuplot -y || true - name: Create addons stats run: | # Prepare data cp Stats Stats3 # Remove Totals sed -i "2d" Stats3 # Inverse file gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3 # Only top 10 head -n 11 Stats3 > tmp_file && mv tmp_file Stats3 # Transpose data awk ' { for (i=1; i<=NF; i++) { a[NR,i] = $i } } NF>p { p = NF } END { for(j=1; j<=p; j++) { str=a[1,j] for(i=2; i<=NR; i++){ str=str" "a[i,j]; } print str } }' Stats3 > StatsTmp && mv StatsTmp .github/Stats3 cd .github || true # Add download count to names #build_list="$(head -n 1 Stats3)" # shellcheck disable=SC2206 #build_list=($build_list) # shellcheck disable=SC2013 #for var in "${build_list[@]:1}"; 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" Stats3 #done echo "... done" # Remove series with less than 4 points sed -i "/^[0-9|-]* [0-9*|-]* [0-9*|-]* -/d" Stats3 # Plot graph ( gnuplot -persist <<-EOFMarker set title 'Top 10 addons' set ylabel 'Number of installations' set xdata time set datafile missing "-" set timefmt "%Y-%m-%d" set format x "%y-%m-%d" set datafile sep ' ' set autoscale set terminal png size 500,300 set output 'stats_addons.png' set term png tiny plot for [i=2:*] 'Stats3' using 1:i w l title columnhead(i) smooth bezier EOFMarker ) || ( gnuplot -persist <<-EOFMarker set title 'Top 10 addons' set ylabel 'Number of installations' set xdata time set datafile missing "-" set timefmt "%Y-%m-%d" set format x "%y-%m-%d" set datafile sep ' ' set autoscale set terminal png size 500,300 set output 'stats_addons.png' set term png tiny plot for [i=2:*] 'Stats3' using 1:i w l title columnhead(i) EOFMarker ) #plot for [i=1:*] 'Stats3' using 0:i rm Stats3 cd .. || true - name: Create individual stats run: | # Prepare data cp Stats Stats3 # Remove Totals sed -i "2d" Stats3 # Inverse file gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3 # For each addon # shellcheck disable=SC2013 for line in $(awk '{ print $1 }' Stats3); do TITLE="${line%% *}" FOLDER="$(grep -irl "ghcr.io/alexbelgium/$TITLE-{arch}" --include="config.*" . | xargs -r dirname)" FOLDER="${FOLDER:2}" echo "$TITLE found in $FOLDER" # If non null if [[ "${#FOLDER}" -gt 2 ]]; then sed -n "/Date /p" Stats3 > "$FOLDER"/StatsTmp sed -n "/$TITLE /p" Stats3 >> "$FOLDER"/StatsTmp # Go in folder cd "$FOLDER" || true cat StatsTmp # Transpose data awk ' { for (i=1; i<=NF; i++) { a[NR,i] = $i } } NF>p { p = NF } END { for(j=1; j<=p; j++) { str=a[1,j] for(i=2; i<=NR; i++){ str=str" "a[i,j]; } print str } }' StatsTmp > StatsTmp2 && mv StatsTmp2 StatsTmp #Normalize data #awk 'FNR==NR{max=($2+0>max)?$2:max;next} {print $1,$2/max}' StatsTmp StatsTmp # Plot graph ( gnuplot -persist <<-EOFMarker set title "$TITLE" set ylabel 'Number of installations' set xdata time set datafile missing "-" set timefmt "%Y-%m-%d" set format x "%y-%m-%d" set datafile sep ' ' set autoscale set terminal png size 500,150 set output "stats.png" set term png tiny plot for [i=2:*] 'StatsTmp' using 1:i w l title columnhead(i) smooth bezier EOFMarker ) || ( gnuplot -persist <<-EOFMarker set title "$TITLE" set ylabel 'Number of installations' set xdata time set datafile missing "-" set timefmt "%Y-%m-%d" set format x "%y-%m-%d" set datafile sep ' ' set autoscale set terminal png size 500,150 set output "stats.png" set term png tiny plot for [i=2:*] 'StatsTmp' using 1:i w l title columnhead(i) EOFMarker ) || true rm StatsTmp || true cd .. || true fi || true done # Clean files rm StatsTmp2 rm Stats3 - name: Create global stats run: | # Prepare data cp Stats Stats3 # Inverse file gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3 # Only totals head -n 2 Stats3 > tmp_file && mv tmp_file Stats3 # Transpose data awk ' { for (i=1; i<=NF; i++) { a[NR,i] = $i } } NF>p { p = NF } END { for(j=1; j<=p; j++) { str=a[1,j] for(i=2; i<=NR; i++){ str=str" "a[i,j]; } print str } }' Stats3 > StatsTmp && mv StatsTmp .github/Stats3 cd .github || true sed -i "1d" Stats3 # Plot graph gnuplot -persist <<-EOFMarker set title 'Total addons' set ylabel 'Number of installations' set xdata time set datafile missing "-" set timefmt "%Y-%m-%d" set format x "%y-%m-%d" set datafile sep ' ' set key top left autotitle columnheader set autoscale set terminal png size 500,300 set output 'stats.png' set term png tiny plot 'Stats3' using 1:2 lt rgb 'red' w l title 'Total addons' smooth bezier EOFMarker rm Stats3 cd .. || true - name: Clean run: | echo "Starting run" if [ -f stats.png ]; then rm stats.png; fi if [ -f Stats3 ]; then rm Stats3; fi - name: Update stars run: | echo "Starting run" # Get stars wget -S -O .github/stars.svg https://contrib.rocks/image?repo=Mesteriis/hassio-addons-avm || true # Get stars2 wget -S -O .github/stars2.svg https://git-lister.onrender.com/api/stars/Mesteriis/hassio-addons-avm?limit=30 || true # Get stars evolution wget -S -O .github/starsevol.svg "https://api.star-history.com/svg?repos=Mesteriis/hassio-addons-avm&type=Date" || true - name: Commit if needed uses: EndBug/add-and-commit@v9 with: message: "GitHub bot : graphs updated" default_author: github_actions