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/ 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.

# display scheduled Jekyll blog posts using dokuwiki syntax

# git repository

# output directory and filename

# 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

Verify that created shell script is running without any problems.

$ sudo -u wiki-git-bridge  /opt/sbin/

Create cron job to schedule script execution.

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

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


Use include plugin to embed generated page.