How to display scheduled Jekyll blog posts on DokuWiki page

Lets display scheduled Jekyll blog posts using DokuWiki on your own personal wiki.

Create system user that can access git repositories and wiki pages.

$ sudo useradd -s /usr/sbin/nologin -G "git,www-data" -r wiki-git-bridge

Create external namespace for DokuWiki installed in /opt/wiki/ directory.

$ sudo mkdir /opt/wiki/data/pages/external

Change owner and group from root to www-data.

$ sudo chown www-data:www-data /opt/wiki/data/pages/external

Add write access for assigned group.

$ sudo chmod g+w /opt/wiki/data/pages/external

Create /opt/sbin/wiki_blog_posts.sh shell script to generate list of scheduled blog posts for /opt/repositories/blog.git Jekyll git repository and store it using /opt/wiki/data/pages/external/git_blog_scheduled.txt wiki page file.

#!/bin/bash
# display scheduled Jekyll blog posts using dokuwiki syntax

# git repository
git_repository="/opt/repositories/blog.git/"

# output directory and filename
output_dir="/opt/wiki/data/pages/external"
output_file="git_blog_scheduled.txt"
output="${output_dir}/${output_file}"

# header title
header_title="Scheduled blog posts"

# limit the number of posts to check only a third for increased performance
n_posts=$(git --git-dir="${git_repository}" ls-tree HEAD _posts --name-only -r | wc -l)
n_posts_to_check=$(( n_posts / 3 ))

echo "==== ${header_title} ====" | tee $output >/dev/null
posts=$(git --git-dir="${git_repository}" ls-tree HEAD _posts --name-only -r | sort | tail -${n_posts_to_check})
for post in $posts; do
  date=$(echo $post | sed "s/\_posts\/\([0-9]*\).\([0-9]*\).\([0-9]*\).*/\1-\2-\3/")
  date_s=$(date -d ${date} +%s)
  now_s=$(date -d now +%s)
  date_diff=$(( (date_s - now_s) / 86400 ))
  if [ "$date_diff" -ge "0" ]; then
    title=$(git --git-dir="${git_repository}" show HEAD:${post} | grep ^title: |  awk -F ": " '{print $2}')
    echo "  * **$date** \\\\  //$title//" | tee -a $output >/dev/null
  fi
done

Verify that created shell script is running without any problems.

$ sudo -u wiki-git-bridge  /opt/sbin/wiki_blog_posts.sh

Create cron job to schedule script execution.

$ cat << EOF | sudo tee /etc/cron.d/wiki_blog_posts
MAILTO=root

# Generate recent repository changes page
25 */3 * * * wiki-git-bridge [ -x /opt/sbin/wiki_blog_posts.sh ] && /opt/sbin/wiki_blog_posts.sh
EOF

tmux

Use include plugin to embed generated page.

{{page>external:git_blog_scheduled&inline&nofooter&noeditbutton}}
Milosz Galazka's Picture

About Milosz Galazka

Milosz is a system administrator working for a successful Polish company and a long time supporter of Free Software Foundation and Debian operating system.

Gdansk, Poland https://sleeplessbeastie.eu