From c72130cea63e5ff2143ac0295776fc881e0bd11a Mon Sep 17 00:00:00 2001 From: raspbeguy Date: Thu, 18 Feb 2021 13:24:23 +0100 Subject: [PATCH] add script to create posts --- README.md | 8 ++- {tests => scripts}/check_assets.sh | 0 {tests => scripts}/check_post_filename.sh | 0 {tests => scripts}/config.sh | 0 scripts/new_post.sh | 83 +++++++++++++++++++++++ scripts/post.tpl | 9 +++ 6 files changed, 99 insertions(+), 1 deletion(-) rename {tests => scripts}/check_assets.sh (100%) rename {tests => scripts}/check_post_filename.sh (100%) rename {tests => scripts}/config.sh (100%) create mode 100755 scripts/new_post.sh create mode 100644 scripts/post.tpl diff --git a/README.md b/README.md index 20720f9..c6da5a7 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,12 @@ Par ailleurs, le nom de fichier d'un post doit correspondre à la version sécur - sans diacritiques ; - chaque caractère spécial et espace remplacé par un tiret `-` non redondant, ni au début ni à la fin. +Pour faciliter la création d'un article avec les bons en-têtes, il est possible d'utiliser le script `new_post.sh` présent dans le dossier `scripts` selon cette syntaxe : + +``` +./new_post.sh "Mon super titre d'article" +``` + ### Images Pour placer un média dans un article, utiliser le mot-clé `%assets_url%`. @@ -45,7 +51,7 @@ Par exemple, pour insérer l'image `assets/image.png`, on placera cette ligne da ## Tests -Pour vérifier la cohérence des articles, des scripts sont disponibles dans le dossier `tests` : +Pour vérifier la cohérence des articles, des scripts sont disponibles dans le dossier `scripts` : - `check_post_filename.sh` : vérifie que les fichiers des posts portent bien le nom correspondant à leurs titres. Le drapeau `-f` permet de corriger automatiquement ce nom de fichier. - `check_assets.sh` : vérifie que les ressources appelées par les posts existent bien dans le dossier `assets`. diff --git a/tests/check_assets.sh b/scripts/check_assets.sh similarity index 100% rename from tests/check_assets.sh rename to scripts/check_assets.sh diff --git a/tests/check_post_filename.sh b/scripts/check_post_filename.sh similarity index 100% rename from tests/check_post_filename.sh rename to scripts/check_post_filename.sh diff --git a/tests/config.sh b/scripts/config.sh similarity index 100% rename from tests/config.sh rename to scripts/config.sh diff --git a/scripts/new_post.sh b/scripts/new_post.sh new file mode 100755 index 0000000..ce837de --- /dev/null +++ b/scripts/new_post.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +set -e + +BASEDIR=`dirname $0` + +if [ -f $BASEDIR/config.sh ]; then + . $BASEDIR/config.sh +fi + +if [ -z "$POSTS_DIR" ] +then + echo "POSTS_DIR environment variable is unset." > /dev/stderr + exit 2 +fi + +function usage { + echo -e "Usage: $0 [OPTIONS] +Options: + -h\t\tshow this help + -d DATE\tuse DATE instead of today's date + -a AUTHOR\tuse AUTHOR instead of env var \$AUTHOR + -t TAG\tadd TAG to the taglist (can be used multiple times or contain comma-separated list) + -e\t\topen new post in \$EDITOR" +} + +function filename { + local unsafe_name="$1" + echo $unsafe_name | iconv -t ascii//TRANSLIT | tr '[:upper:]' '[:lower:]' | tr -s '[:punct:] ' '-' | sed 's/-*$//g;s/^-*//g' +} + +DATE=$(date +%Y-%m-%d) +TAGLIST='' +edit=0 + +while getopts "hd:a:t:e" option +do + case $option in + h) + usage + exit + ;; + d) + DATE=$(date +%Y-%m-%d "$OPTARG") + ;; + a) + AUTHOR="$OPTARG" + ;; + t) + if [ -z $TAGLIST ] + then + TAGLIST="$OPTARG" + else + TAGLIST="$TAGLIST,$OPTARG" + fi + ;; + e) + edit=1 + ;; + *) + echo "Use $0 -h to show help" >&2 + exit 1 + ;; + esac +done + +shift $((OPTIND-1)) + +TITLE="$1" +TEMPLATE=post + +FILENAME="$(filename "$TITLE").md" + +export TITLE AUTHOR DATE TAGLIST TEMPLATE + +cat $BASEDIR/post.tpl | envsubst > $BASEDIR/$POSTS_DIR/$FILENAME + +if [ $edit == 1 ] +then + $EDITOR $BASEDIR/$POSTS_DIR/$FILENAME +else + echo $FILENAME +fi diff --git a/scripts/post.tpl b/scripts/post.tpl new file mode 100644 index 0000000..01cb76c --- /dev/null +++ b/scripts/post.tpl @@ -0,0 +1,9 @@ +--- +title: $TITLE +date: $DATE +author: $AUTHOR +template: $TEMPLATE +tags: $TAGLIST +--- + +(Write somthing here.)