Ich habe an einem Workflow gearbeitet, der meine n8n-Workflows nach einem bestimmten Plan auf GitHub sichert. Nachdem die erste(n) Datei(en) auf GitHub erstellt wurden, wird die GitHub-Datei alle paar Tage aktualisiert.
Jedoch möchte ich einen Abschnitt hinzufügen, der nur ausgeführt wird, wenn eine Änderung an dem/den auf Github gesicherten Workflow(s) vorgenommen wurde. Hat jemand Ideen, wie ich das mit einem If-Node (oder einem anderen Node) umsetzen kann?
Um redundante Commits zu vermeiden, kannst du den SHA der vorhandenen Datei über die GitHub API abrufen und einen kryptografischen Hash deiner aktuellen Workflow-JSON dagegen vergleichen, indem du einen n8n Code-Knoten vor dem If-Knoten verwendest. Wenn die Hashes übereinstimmen, überspringe den GitHub-Update-Knoten vollständig, um dein Commit-Verlauf sauber zu halten. Lass mich wissen, wie deine aktuelle GitHub-Knoten-Antwortstruktur aussieht, und ich kann dir hier das exakte Snippet für den Hash-Vergleich teilen.
Ich würde den tatsächlichen Dateiinhalt direkt mit GitHubs sha vergleichen, anstatt einen normalen Hash zu verwenden. Der GitHub-Wert ist ein Git-Blob-SHA, daher stimmt er nicht unbedingt mit einem Standard-Hash des Workflow-JSON überein.
Ein sicherer Ablauf wäre:
Den aktuellen Workflow-JSON exportieren.
Die vorhandene GitHub-Datei abrufen und ihren Base64-Inhalt dekodieren.
Beide Versionen auf die gleiche Weise normalisieren, z. B. das JSON parsen und konsistent serialisieren.
Den normalisierten Inhalt vergleichen.
Das GitHub-Update nur senden, wenn sie sich unterscheiden.
Behalte GitHubs vorhandenen Datei-SHA für die Update-Anfrage selbst, verwende aber den Inhaltsvergleich, um zu entscheiden, ob ein Update erforderlich ist.
Ich würde auch überprüfen, ob das exportierte JSON Metadaten enthält, die sich ohne eine aussagekräftige Workflow-Bearbeitung ändern, ansonsten kann der Vergleich immer noch unnötige Commits erzeugen.