Generate weekly stats #220
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 weekly stats | |
on: | |
schedule: | |
- cron: "0 12 * * 5" | |
workflow_dispatch: | |
jobs: | |
stats_updater: | |
if: github.repository_owner == 'alexbelgium' | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Create stats | |
run: | | |
echo "Starting" | |
COUNT=0 | |
COUNT1=0 | |
COUNT2=0 | |
COUNT3=0 | |
# Make sure file exists | |
file=Stats | |
touch "$file" | |
rm "$file"2 | |
if ! grep -q "Date" "$file"; then | |
sed -i "1i Date" "$file" | |
fi | |
# Add new column | |
sed -i 's/^/- /' "$file" | |
# Add date | |
sed -i "/Date/s|^-|$(date '+%Y-%m-%d')|" "$file" | |
# Go through all folders, add to filters if not existing | |
# shellcheck disable=SC2086 | |
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do | |
DOWNLOADS=0 | |
if [ -f "$f"/config.json ] && jq -e '.image' "$f/config.json"; then | |
SLUG="$(jq -r '.image' "$f/config.json" | awk -F 'alexbelgium/|-{arch' '{print $2}')" | |
if [[ "$(jq '.arch[]' "$f/config.json")" == *"armv7"* ]]; then | |
ARCH=armv7 && COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" | |
until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then count=0; fi; done | |
COUNT="${COUNT//,/}" | |
COUNT1="$COUNT" | |
echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))" | |
else COUNT1="-"; fi | |
if [[ "$(jq '.arch[]' "$f/config.json")" == *"amd64"* ]]; then | |
ARCH=amd64 && COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" | |
until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then count=0; fi; done | |
COUNT="${COUNT//,/}" | |
COUNT2="$COUNT" | |
echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))" | |
else COUNT2="-"; fi | |
if [[ "$(jq '.arch[]' "$f/config.json")" == *"aarch64"* ]]; then | |
ARCH=aarch64 && COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" | |
until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/alexbelgium/hassio-addons/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then count=0; fi; done | |
COUNT="${COUNT//,/}" | |
COUNT3="$COUNT" | |
echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))" | |
else COUNT3="-";fi | |
echo "$SLUG $DOWNLOADS $COUNT1 $COUNT2 $COUNT3" >> "$file"2 | |
# Create line if not existing | |
if ! grep -q "${SLUG}$" "$file"; then | |
sed -i "\$a$SLUG" "$file" | |
# shellcheck disable=SC2046 | |
for i in $(seq $(head -n 1 $file | tr -cd ' \t' | wc -c )); do | |
echo "$i" | |
sed -i "/$SLUG/s|^|- |" "$file" | |
done | |
fi | |
# Add data | |
sed -i "/${SLUG}$/s|^-|$DOWNLOADS|" "$file" | |
fi | |
done | |
# Add total | |
SLUG=TOTAL | |
if ! grep -q "$SLUG$" "$file"; then | |
sed -i "1a$SLUG" "$file" | |
# shellcheck disable=SC2046 | |
for i in $(seq $(head -n 1 $file | tr -cd ' \t' | wc -c )); do | |
echo "$i" | |
sed -i "/$SLUG$/s|^|- |" "$file" | |
done | |
fi | |
DOWNLOADS="$(awk 'FNR > 2 {SUM+=$1}END{print SUM}' Stats)" | |
sed -i "/$SLUG$/s|^-|$DOWNLOADS|" "$file" | |
# Sort file | |
(head -n 2 "$file" && tail -n +3 "$file" | sort -k1 -r -n) > tmp && mv tmp "$file" | |
sed -i "1i Name Total armv7 amd64 aarch64" "$file"2 | |
sed -i "1a ------------------------------" "$file"2 | |
#TOTAL="$(awk '{SUM+=$2}END{print SUM}' Stats)" | |
#TOTAL1="$(awk '{SUM+=$2}END{print SUM}' Stats)" | |
#TOTAL2="$(awk '{SUM+=$2}END{print SUM}' Stats)" | |
#TOTAL3="$(awk '{SUM+=$2}END{print SUM}' Stats)" | |
- name: Commit if needed | |
uses: EndBug/add-and-commit@v9 | |
with: | |
default_author: github_actions | |
message : "Github bot : stats updated" | |
Generate_graphs: | |
needs: stats_updater | |
uses: ./.github/workflows/helper_stats_graphs.yaml |