- name: Get previous tag name
id: previous_tag
run: echo "::set-output name=TAGNAME::$(git describe --abbrev=0 --tags $(git rev-list --tags --skip=1 --max-count=1))"
Diese GitHub Action hat das Ziel, den Namen des vorherigen Tags in einem Git-Repository zu ermitteln und ihn als Ausgabe (output) zur weiteren Verwendung in der Workflow-Pipeline zur Verfügung zu stellen.
Hier ist eine Erklärung für die einzelnen Teile der Action:
1. Name der Action:
- name: Get previous tag name
Dies ist der Name, den die Action in der GitHub Actions Workflow-Datei hat. Es ist nur ein beschreibender Name und hat keinen Einfluss auf die Funktionalität.
2. ID der Action:
id: previous_tag
Die ID der Action wird verwendet, um die Ausgaben (outputs) dieser Action in späteren Schritten des Workflows zu referenzieren. In diesem Fall ist die ID previous_tag.
Hier passiert der wichtigste Teil. Die Zeile führt einen Befehl auf der Shell (normalerweise Bash) aus und verwendet Git-Befehle, um den vorherigen Tag zu ermitteln.
Schauen wir uns die verschiedenen Teile des Befehls genauer an:
git rev-list --tags --skip=1 --max-count=1:
git rev-list: Listet Commit-Hashes auf.
--tags: Bezieht sich auf alle Commits, die mit einem Tag versehen sind.
--skip=1: Überspringt das neueste Tag (überspringt den ersten Eintrag).
--max-count=1: Begrenzen der Ausgabe auf nur ein Ergebnis, nämlich den Commit, der vor dem neuesten Tag liegt.
Das Ergebnis ist der Commit-Hash des zweitneuesten Tags.
git describe --abbrev=0 --tags <commit-hash>:
git describe: Gibt eine beschreibende Referenz eines Commits zurück.
--abbrev=0: Gibt den Namen des Tags zurück, ohne eine zusätzliche Nummerierung oder Hash-Kürzung.
<commit-hash>: Der Commit-Hash, der aus dem vorherigen Befehl kommt.
Das Ergebnis ist der Name des Tags, der direkt vor dem neuesten Tag erstellt wurde.
echo "::set-output name=TAGNAME::<tag-name>":
Dies ist eine spezielle GitHub Actions-Syntax, um eine Ausgabevariable (output) namens TAGNAME zu setzen. Der Wert dieser Variable ist der Name des vorherigen Tags, der durch die Git-Befehle ermittelt wurde.
Ergebnis:
Nach dem Ausführen dieser Action wird der Name des vorherigen Tags als Ausgabe (output) mit dem Namen TAGNAME gespeichert. Diese Ausgabe kann dann in späteren Schritten des Workflows referenziert werden, z.B. mit ${{ steps.previous_tag.outputs.TAGNAME }}.
Beispiel für die Verwendung in einem späteren Schritt:
- name: Print previous tag
run: echo "Previous tag was ${{ steps.previous_tag.outputs.TAGNAME }}"
Dieser Schritt würde dann den ermittelten vorherigen Tag ausgeben.
Diese GitHub Action hat das Ziel, den Namen des vorherigen Tags in einem Git-Repository zu ermitteln und ihn als Ausgabe (
output
) zur weiteren Verwendung in der Workflow-Pipeline zur Verfügung zu stellen.Hier ist eine Erklärung für die einzelnen Teile der Action:
1. Name der Action:
Dies ist der Name, den die Action in der GitHub Actions Workflow-Datei hat. Es ist nur ein beschreibender Name und hat keinen Einfluss auf die Funktionalität.
2. ID der Action:
Die ID der Action wird verwendet, um die Ausgaben (
outputs
) dieser Action in späteren Schritten des Workflows zu referenzieren. In diesem Fall ist die IDprevious_tag
.3. Run:
Hier passiert der wichtigste Teil. Die Zeile führt einen Befehl auf der Shell (normalerweise Bash) aus und verwendet Git-Befehle, um den vorherigen Tag zu ermitteln.
Schauen wir uns die verschiedenen Teile des Befehls genauer an:
git rev-list --tags --skip=1 --max-count=1
:git rev-list
: Listet Commit-Hashes auf.--tags
: Bezieht sich auf alle Commits, die mit einem Tag versehen sind.--skip=1
: Überspringt das neueste Tag (überspringt den ersten Eintrag).--max-count=1
: Begrenzen der Ausgabe auf nur ein Ergebnis, nämlich den Commit, der vor dem neuesten Tag liegt.Das Ergebnis ist der Commit-Hash des zweitneuesten Tags.
git describe --abbrev=0 --tags <commit-hash>
:git describe
: Gibt eine beschreibende Referenz eines Commits zurück.--abbrev=0
: Gibt den Namen des Tags zurück, ohne eine zusätzliche Nummerierung oder Hash-Kürzung.<commit-hash>
: Der Commit-Hash, der aus dem vorherigen Befehl kommt.Das Ergebnis ist der Name des Tags, der direkt vor dem neuesten Tag erstellt wurde.
echo "::set-output name=TAGNAME::<tag-name>"
:output
) namensTAGNAME
zu setzen. Der Wert dieser Variable ist der Name des vorherigen Tags, der durch die Git-Befehle ermittelt wurde.Ergebnis:
Nach dem Ausführen dieser Action wird der Name des vorherigen Tags als Ausgabe (
output
) mit dem NamenTAGNAME
gespeichert. Diese Ausgabe kann dann in späteren Schritten des Workflows referenziert werden, z.B. mit${{ steps.previous_tag.outputs.TAGNAME }}
.Beispiel für die Verwendung in einem späteren Schritt:
Dieser Schritt würde dann den ermittelten vorherigen Tag ausgeben.