Manuel un task runner en bash

Manuel est une application bash (>= 4) pour créer des tâches automatisées. Il s'inspire des outils comme Grunt ou Gulp qui, eux sont écrit en Node.js (JavaScript).

Dans mon cas, j'ai décidé d'utiliser Manuel dans la conception et la maintenance de mon site personnel, puisque celui-ci est fait avec un générateur de site web statique que j'ai moi-même créé avec bash et pandoc; il me paraissait donc logique que tout le “workflow” tourne autour de bash ou de d'autres outils Unix.

À l'instar de Grunt ou Gulp, Manuel ne fait rien d'extraordinaire en soit, sinon de regrouper et d'enchaîner les tâches routinières de façon séquentielle et de les exécuter en une seule commande dans le terminal.

Sinon Manuel contient un mécanisme d'extension qui permet d'étendre les fonctionnalités de bases. À ce jour, il n'y a ne que deux extensions officiels, mais vue que tout ça c'est des fonctions bash, il est facile d'en créer d'autre au besoin.

Il y a entre autre manuel-contrib-watch pour surveiller en temps réel les changements dans un répertoire. Pour ma part, je me sers de cette extension pour surveiller les modifications aux fichiers *.scss et .js pour compiler et mettre à jour en temps réel le thème de mon site web.

Voici un exemple de mon utilisation de manuel-contrib-watch dans mon manuelfile :

# Concatenate and minify styles sheets (./frontend).
# Then export with rsync
function update_css () {
    ./frontend

    rsync -avmh "./$ASSETS/css/" "./$PUBLICHTML/css/"
}

# Concatenate and minify scripts (./frontend).
# Then export with rsync
function update_js () {
    ./frontend

    rsync -avmh "./$ASSETS/js/" "./$PUBLICHTML/js/"
}

# Watch CSS and JS files
# Then update them
function watch_assets_change () {

    declare -A actions=(
        [".*.css$"]="update_css"
        [".*.js$"]="update_js"
    )

    manuel_watch "./static/dev/"
}

Puis dans le terminal on fait la commande manuel watch_assets_change pour lancer le “watch”.

Voici mon manuelfile au complet. Si vous avez des questions, n'hésiter pas à communiquer avec moi.