
test und dann deploy tippen müssen!?Genau für so etwas gibt es just.
just ist ein sogenannter Task-Runner für Kommandozeilen-Befehle (unter allen Betriebssystemen).
Er ermöglicht dir, lange Befehle, aufeinander folgende und voneinander abhängige Schritte zu definieren, sodass sie mit einem Kürzel aufgerufen werden können.
Dabei kannst du vorhandene Skripte weiternutzen, Schritte gezielt überspringen lassen (wenn beispielsweise Dateien bereits in der aktuellsten Version vorliegen).
Wie unterscheidet sich just von Tools wie Make, Aliase für Befehle oder Skripten?
Hinweis:
Besonders unter Linux hat just starke Ähnlichkeiten zu dem Programm Make, mit dem sich ebenfalls viele Aufgaben und Schritte automatisieren lassen.
just ist allerdings deutlich anwendungsfreundlicher, moderner und vielfältiger.
Außerdem ist just abwärtskompatibel und somit ein sehr guter Ersatz für das klassische Make.
Trotzdem solltest du beachten, dass mit just eine weitere Abhängigkeit von einem oft nicht vorinstallierten Tool in dein Projekt oder Team eingeführt werden kann.
So viele Vorteile wie es hat, solltest du es aber zumindest ausprobieren!
Das Vorgehen ist recht einfach und bestechend angenehm:
du legst eine "justfile" (eine Datei mit dem Namen justfile bzw. <irgendwas>.just oder auch versteckt: .justfile) in deinem Projektordner ab, und dann kann's losgehen!
Hinweis:
Super nützlich ist, dass die in einer justfile definierten Rezepte in allen Unterverzeichnissen aufgerufen werden können, die unterhalb des Ordners mit der justfile liegen.
Alternativ kannst du auch eine "globale" justfile nutzen, ergänzt um "lokale" nach Projekt.
Und noch spannender wird es, wenn du andere justfiles einbettest (was sogar mit "remote justfiles" geht, die etwa in einem entfernten Git-Repository liegen):
damit kannst du gezielt Rezepte aus anderen Projekten, Pfaden und justfiles auswählen, um sie in deinem Verzeichnis ebenfalls verwenden zu können.
Die darin enthaltenen "recipes" ("Rezepte") sind im einfachsten Fall einfach Shell-Befehle, können aber auch Befehlsfolgen, längere Skripte (oder bereits anderweitig existierende Skripte) sein.
Du kannst am Anfang der Datei Variablen definieren, die von einem Rezept genutzt werden können:
tollevariable := "dies ist ein Text" kannst du später mit {{tollevariable}} in deinem Rezept nutzen.
Mit Operatoren wie + oder / kannst du auch Variablen miteinander verschmelzen, um etwa einen Dateipfad mit einer Befehlsausgabe und einer Versionsnummer zusammenzusetzen.
Außerdem kannst du Abhängigkeiten von anderen Rezepten definieren, sodass bei Aufruf von Rezept "C" zunächst "A" und "B" erfolgreich abgeschlossen worden sein müssen.
Eine Liste aller so definierter Aufgaben in dem Verzeichnis (und allen Unterverzeichnissen) kannst du dir dann mit just --list anzeigen lassen.
Wenn du ein Rezept nicht in dieser Liste sehen willst, kannst du ihm ein @ voranstellen.
Kommentierst du eine Zeile über dem Rezept (die Zeile beginnt dann mit #), wird dieser Text als Beschreibung aufgeführt.
Um hier die Übersicht zu behalten, kannst du Aufgaben auch in Gruppen sortieren, die hier mit angezeigt werden.
Das kannst du mit einer Zeile wie [group:'Spezialgruppe'] einstellen.
Wenn du nun also das passende Rezept in der Liste gefunden hast, kannst du es einfach mit just <Rezeptname> aufrufen.
Benötigt das Rezept noch weitere Variablen, wird just dich darauf hinweisen und zunächst nichts tun.
Wichtig
Wenn du aufeinanderfolgende Schritte wie in einem Skript direkt in eine justfile schreiben möchtest, musst du einen kleinen Umweg gehen.
just führt jeden Befehl direkt in einer eigenen Shell aus - d.h. ein Schritt wie "lege einen Ordner an" und "gehe in den gerade angelegten Ordner" funktioniert nicht, da der Ordner aus dem ersten Schritt an anderer Stelle liegen kann, als der Ort, an dem der zweite Befehl ausgeführt wird.
just bietet hierzu "Shebang recipes" oder "Script recipes" an, die solche Aufrufe möglich machen.
Wie sieht denn nun so eine "justfile" aus? Beispielsweise so:
webseite := "Studitools"
alias a:= artikel
# Standardaufruf: Liste aller Befehle ausgeben
@default:
just --list
# Begrüßungstext für Webseite ausgeben
[group:'Webseite']
@hello:
echo "Willkommen bei {{webseite}}"
# Erstellt Verzeichnisse und Markdown-Datei für einen neuen Artikel
[no-cd]
[group:'Webseite']
artikel artikelname:
mkdir -p {{artikelname}}/img
touch {{artikelname}}/{{artikelname}}.md
Wenn du mit just das Standard-Rezept "default" ausgeben lässt (also alle Rezepte auflistest), bekommst du folgende Übersicht:
Available recipes:
default # Standardaufruf: Liste aller Befehle ausgeben
[Webseite]
artikel artikelname # Erstellt Verzeichnisse und Markdown-Datei für einen neuen Artikel [alias: a]
hello # Begrüßungstext für Webseite ausgeben
Du siehst:
Für jede derart aufgebaute Webseite könntest du nun passende Ordner und Dateien für einen neuen Artikel anlegen, indem du just artikel <artikelname> eingibst (oder sogar nur den definierten Alias just a <artikelname>).
Und das verstehen dann auch schnell alle anderen in deinem Team.
"/usr/bin/just do it - Demoing the just task runner" von Frank Wiles (YouTube; Sprache: EN )
"I stopped using Makefile because of justfile" von CalmCode (YouTube; Sprache: EN)
"How To Automate Your CLI Tasks" von TheAltF4Stream (YouTube; Sprache: EN)