From 902dcbff020b73a4f549feab439880e54fd7309c Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Sat, 11 Apr 2026 08:08:41 +0100 Subject: runs build_loglog with bash --- capsule/Dockerfile | 9 ++-- capsule/build_loglog.bash | 131 ++++++++++++++++++++++++++++++++++++++++++++++ capsule/build_loglog.sh | 131 ---------------------------------------------- 3 files changed, 136 insertions(+), 135 deletions(-) create mode 100755 capsule/build_loglog.bash delete mode 100755 capsule/build_loglog.sh (limited to 'capsule') diff --git a/capsule/Dockerfile b/capsule/Dockerfile index 26f5034..1284689 100644 --- a/capsule/Dockerfile +++ b/capsule/Dockerfile @@ -22,9 +22,10 @@ RUN crontab -l > crontab.tmp \ && crontab crontab.tmp \ && rm crontab.tmp -# gcc is a dependency for agate +# bash is needed to run build_loglog.bash # busybox-openrc provides rc-service, which runs crond -RUN apk --no-cache add gcc busybox-openrc +# gcc is a dependency for agate +RUN apk --no-cache add bash busybox-openrc gcc RUN rc-service crond start && rc-update add crond COPY --from=agate /root/.cargo/bin/agate /usr/local/bin/agate COPY --from=comitium /usr/local/bin/comitium /usr/local/bin/comitium @@ -34,9 +35,9 @@ COPY feeds.txt feeds.txt RUN while read feed; do \ comitium add --data comitium-data/ "$feed"; \ done \ +([^\ ]+)\ +([0-9]{4}-[0-9]{2}-[0-9]{2})\ +(.*) ]]; then + HREF="${BASH_REMATCH[1]}" + DATE="${BASH_REMATCH[2]}" + NAME="${BASH_REMATCH[3]}" + FILENAME="$(new_filename $DATE)" + echo " +=> $HREF $DATE $NAME + +From my gemlog. + +=> /gemlog My $LOG" \ + >> "$FILENAME" + fi + else + if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})\ * ]]; then + echo "From my $LOG. + +=> /$LOG My $LOG" \ + >> "$CURRENT_POST_FILENAME" + CURRENT_POST_HEADING="${BASH_REMATCH[1]}" + DATE="${BASH_REMATCH[2]}" + CURRENT_POST_FILENAME="$(new_filename $DATE)" + elif [[ "$line" =~ \#.* ]] && ! [[ "$line" =~ ${CURRENT_POST_HEADING}\#.* ]]; then + echo "From my $LOG. + +=> /$LOG My $LOG" \ + >> "$CURRENT_POST_FILENAME" + CURRENT_POST_HEADING="" + DATE="" + CURRENT_POST_FILENAME="" + else + echo "$line" >> "$CURRENT_POST_FILENAME" + fi + fi + done <$LOGPATH +} + +trim_entries() +{ + ENTRY_DIR="$1" + for entry in $ENTRY_DIR/*; do + while [[ -z "$(head -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do + tail -n +2 "$entry" | tee "$entry" 1>0 + done + while [[ -z "$(tail -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do + head -n -1 "$entry" | tee "$entry" 1>0 + done + if [[ -z "$(cat "$entry")" ]]; then + echo "Removing entry $entry: $(cat $entry)" + rm "$entry" + fi + done + if [[ "$(ls "$ENTRY_DIR" | wc -l)" -eq 0 ]]; then + rmdir "$ENTRY_DIR" + fi +} + +append_entries_for_date() +{ + DATE_DIR="$1" + DATE="$(echo "$DATE" | sed "s/.*\///g")" + echo "## $DATE +" >> "$LOGLOG" + ENTRY_COUNT="$(ls $DATE_DIR | wc -l)" + LAST_ENTRY="$(ls $DATE_DIR | tail -n 1)" + for entry in $DATE_DIR/*; do + cat "$entry" >> "$LOGLOG" + echo "" >> "$LOGLOG" + if [[ "$ENTRY_COUNT" -gt 1 && "$entry" != "$DATE_DIR/$LAST_ENTRY" ]]; then + echo \ +------------------------------------------------------------------------ >> "$LOGLOG" + echo "" >> "$LOGLOG" + fi + done +} + +echo "Cleaning existing loglog..." +rm -f "$LOGLOG" + +echo "Reading logs to temporary files..." +for log in content/logs/*log.gmi; do + read_log_to_tmp "$log" +done + +echo "Trimming entries in temporary files..." +for date in $TMP/*; do + trim_entries "$date" +done + +echo "Copying loglog header..." +cp "$LOGLOG_HEADER" "$LOGLOG" + +echo "Appending entries to loglog..." +dates=($TMP/*) +for ((i=${#dates[@]}-1; i>=0; i--)); do + append_entries_for_date "${dates[i]}" +done + +echo "Cleaning up temporary files..." +rm -rf "$TMP" + +echo "Done." diff --git a/capsule/build_loglog.sh b/capsule/build_loglog.sh deleted file mode 100755 index 12c8af8..0000000 --- a/capsule/build_loglog.sh +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/bash - -TMP="tmp-build-loglog-$(date +%s%N)" -LOGLOG="content/logs/loglog.gmi" -LOGLOG_HEADER="loglog-header.gmi" - -new_filename() -{ - DATE="$1" - mkdir -p "$TMP/$DATE" - N=0 - while [[ -f "$TMP/$DATE/$N" ]]; do - N=$(( N + 1 )) - done - echo "$TMP/$DATE/$N" -} - -read_log_to_tmp() -{ - LOGPATH="$1" - LOG="$(echo $LOGPATH | sed "s/.*\///g" | sed "s/\.gmi//g")" - CURRENT_POST_HEADING="" - CURRENT_POST_FILENAME="" - while read line; do - if [[ -z "$CURRENT_POST_FILENAME" ]]; then - if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})\ * ]]; then - CURRENT_POST_HEADING="${BASH_REMATCH[1]}" - DATE="${BASH_REMATCH[2]}" - CURRENT_POST_FILENAME="$(new_filename $DATE)" - elif [[ "$line" =~ \=\>\ +([^\ ]+)\ +([0-9]{4}-[0-9]{2}-[0-9]{2})\ +(.*) ]]; then - HREF="${BASH_REMATCH[1]}" - DATE="${BASH_REMATCH[2]}" - NAME="${BASH_REMATCH[3]}" - FILENAME="$(new_filename $DATE)" - echo " -=> $HREF $DATE $NAME - -From my gemlog. - -=> /gemlog My $LOG" \ - >> "$FILENAME" - fi - else - if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})\ * ]]; then - echo "From my $LOG. - -=> /$LOG My $LOG" \ - >> "$CURRENT_POST_FILENAME" - CURRENT_POST_HEADING="${BASH_REMATCH[1]}" - DATE="${BASH_REMATCH[2]}" - CURRENT_POST_FILENAME="$(new_filename $DATE)" - elif [[ "$line" =~ \#.* ]] && ! [[ "$line" =~ ${CURRENT_POST_HEADING}\#.* ]]; then - echo "From my $LOG. - -=> /$LOG My $LOG" \ - >> "$CURRENT_POST_FILENAME" - CURRENT_POST_HEADING="" - DATE="" - CURRENT_POST_FILENAME="" - else - echo "$line" >> "$CURRENT_POST_FILENAME" - fi - fi - done <$LOGPATH -} - -trim_entries() -{ - ENTRY_DIR="$1" - for entry in $ENTRY_DIR/*; do - while [[ -z "$(head -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do - tail -n +2 "$entry" | tee "$entry" 1>0 - done - while [[ -z "$(tail -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do - head -n -1 "$entry" | tee "$entry" 1>0 - done - if [[ -z "$(cat "$entry")" ]]; then - echo "Removing entry $entry: $(cat $entry)" - rm "$entry" - fi - done - if [[ "$(ls "$ENTRY_DIR" | wc -l)" -eq 0 ]]; then - rmdir "$ENTRY_DIR" - fi -} - -append_entries_for_date() -{ - DATE_DIR="$1" - DATE="$(echo "$DATE" | sed "s/.*\///g")" - echo "## $DATE -" >> "$LOGLOG" - ENTRY_COUNT="$(ls $DATE_DIR | wc -l)" - LAST_ENTRY="$(ls $DATE_DIR | tail -n 1)" - for entry in $DATE_DIR/*; do - cat "$entry" >> "$LOGLOG" - echo "" >> "$LOGLOG" - if [[ "$ENTRY_COUNT" -gt 1 && "$entry" != "$DATE_DIR/$LAST_ENTRY" ]]; then - echo \ ------------------------------------------------------------------------- >> "$LOGLOG" - echo "" >> "$LOGLOG" - fi - done -} - -echo "Cleaning existing loglog..." -rm -f "$LOGLOG" - -echo "Reading logs to temporary files..." -for log in content/logs/*log.gmi; do - read_log_to_tmp "$log" -done - -echo "Trimming entries in temporary files..." -for date in $TMP/*; do - trim_entries "$date" -done - -echo "Copying loglog header..." -cp "$LOGLOG_HEADER" "$LOGLOG" - -echo "Appending entries to loglog..." -dates=($TMP/*) -for ((i=${#dates[@]}-1; i>=0; i--)); do - append_entries_for_date "${dates[i]}" -done - -echo "Cleaning up temporary files..." -rm -rd "$TMP" - -echo "Done." -- cgit v1.2.3