# Git hook – Jira automatikus frissítés ## Mi ez és mire jó? Amikor fejlesztés közben `git pull` parancsot futtatunk, a beérkező commitok üzenetéből automatikusan kiszedi a Jira ticket azonosítókat, beállítja a **Fix Version** mezőt, és átmozgatja a ticketeket a **kiadásra_kész** oszlopba. A commit üzenetek formátuma: ``` TP-1 Modulok összeszinkronizálása - Staging környezetben ``` --- ## Hogyan működik? A Git **hook** egy script, amely automatikusan lefut egy Git művelet előtt vagy után. Ebben az esetben a `post-merge` hookot használjuk, amely **minden `git pull` után** lefut. A script lépései: 1. **Beolvassa a verziószámot** a `versions.txt` fájlból 2. **Létrehozza a verziót** a Jirában ha még nem létezik 3. **Lekéri az új commitok üzeneteit** – csak azokat, amelyek a pull során érkeztek be 4. **Kiszedi a Jira ticket ID-kat** – a TP projekt ticket azonosítóit (pl. `TP-1`) 5. **Beállítja a Fix Version mezőt** minden érintett ticketen 6. **Átmozgatja a ticketeket** a `kiadásra_kész` oszlopba --- ## A script ```bash #!/bin/bash JIRA_BASE="https://urbanms.atlassian.net" JIRA_USER="mezei.krisztian@urbanms.hu" JIRA_PROJECT="TP" JIRA_PROJECT_ID="10138" AUTH="-u ${JIRA_USER}:${JIRA_API_TOKEN}" # Verziószám beolvasása VERSIONS_FILE="$(git rev-parse --show-toplevel)/versions.txt" if [ ! -f "$VERSIONS_FILE" ]; then echo "⚠️ Nem található: versions.txt" exit 1 fi VERSION=$(cat "$VERSIONS_FILE" | tr -d '[:space:]') echo "📦 Verzió: $VERSION" # Verzió létrehozása ha még nem létezik echo "🔧 Verzió ellenőrzése a Jirában..." CREATE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $AUTH \ -X POST -H "Content-Type: application/json" \ "${JIRA_BASE}/rest/api/3/version" \ -d "{ \"name\": \"${VERSION}\", \"projectId\": ${JIRA_PROJECT_ID}, \"released\": false }") if [ "$CREATE_RESPONSE" = "201" ]; then echo " ✅ Verzió létrehozva: $VERSION" elif [ "$CREATE_RESPONSE" = "409" ]; then echo " ℹ️ Verzió már létezik: $VERSION" else echo " ⚠️ Verzió létrehozás hiba ($CREATE_RESPONSE)" fi # Ticket ID-k kiszedése (csak TP projekt) TICKETS=$(git log ORIG_HEAD..HEAD --pretty="%s" | grep -oE 'TP-[0-9]+' | sort -u) if [ -z "$TICKETS" ]; then echo "Nem találtam TP ticket ID-t a commitokban." exit 0 fi echo "Érintett Jira ticketek:" for TICKET in $TICKETS; do echo " - $TICKET" # Fix Version beállítása curl -s -o /dev/null $AUTH \ -X PUT -H "Content-Type: application/json" \ "${JIRA_BASE}/rest/api/3/issue/${TICKET}" \ -d "{\"fields\": {\"fixVersions\": [{\"name\": \"${VERSION}\"}]}}" # Átállítás → kiadásra_kész (transition ID: 51) RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $AUTH \ -X POST -H "Content-Type: application/json" \ "${JIRA_BASE}/rest/api/3/issue/${TICKET}/transitions" \ -d '{"transition": {"id": "51"}}') if [ "$RESPONSE" = "204" ]; then echo " ✅ Fix Version: $VERSION → kiadásra_kész" else echo " ⚠️ Hiba ($RESPONSE)" fi done ``` --- ## A `versions.txt` fájl A repo gyökerében legyen, és csak a verziószámot tartalmazza: ``` v1.1.1 ``` --- ## Transition ID-k (TP projekt) | ID | Kanban oszlop | |---|---| | `11` | Backlog | | `21` | Selected for Development | | `31` | In Progress | | `51` | kiadásra_kész | | `41` | Done | --- ## Beállítás lépései ### 1. Lépj be a git repóba ```bash cd mezeik_teszt ``` ### 2. Hozd létre a `.githooks` mappát ```bash mkdir -p .githooks ``` ### 3. Hozd létre a hook fájlt ```bash nano .githooks/post-merge ``` Illeszd be a fenti scriptet, majd mentés: `Ctrl+O`, kilépés: `Ctrl+X` ### 4. Tedd futtathatóvá ```bash chmod +x .githooks/post-merge ``` ### 5. Állítsd be a Git hookpath-t ```bash git config core.hooksPath .githooks ``` ### 6. API token létrehozása 1. Menj ide: https://id.atlassian.com/manage-profile/security/api-tokens 2. Kattints a **Create API token** gombra 3. Adj meg egy nevet (pl. `git-hook`) 4. Kattints a **Create** gombra 5. **Másold ki azonnal** – később nem lesz látható! > ⚠️ **Fontos:** Az Atlassian API token **meghatározott ideig érvényes** (alapértelmezetten 1 év), utána lejár. Ha a hook hirtelen `401` vagy `403` hibával tér vissza, valószínűleg lejárt a token – ilyenkor új tokent kell generálni és frissíteni a `.bashrc`-ben. ### 7. API token beállítása ```bash echo 'export JIRA_API_TOKEN="ide_a_tokened"' >> ~/.bashrc source ~/.bashrc ``` Token lejártakor csak frissítsd az értéket: ```bash nano ~/.bashrc # keresd meg a JIRA_API_TOKEN sort és írd felül source ~/.bashrc ``` ### 7. Ellenőrzés ```bash git config core.hooksPath # → .githooks ls -l .githooks/ # → post-merge látható echo $JIRA_API_TOKEN # → token értéke ``` --- ## Tesztelés ```bash # Teszt commit létrehozása git commit --allow-empty -m "TP-1 teszt commit" # Pull futtatása (hook automatikusan lefut) git pull ``` Várt eredmény a konzolon: ``` 📦 Verzió: v1.1.1 🔧 Verzió ellenőrzése a Jirában... ℹ️ Verzió már létezik: v1.1.1 Érintett Jira ticketek: - TP-1 ✅ Fix Version: v1.1.1 → kiadásra_kész ``` --- ## Fontos tudnivalók - A `.githooks` mappa **nem szinkronizálódik** automatikusan a remote repóval – minden fejlesztőnek egyenként kell beállítania - Ha a `.githooks` mappát a repóba szeretnéd verziókövetni, add hozzá a commithoz: ```bash git add .githooks/ git commit -m "Git hookok hozzáadása" ``` Ezután minden fejlesztő csak ennyit futtat a klónozás után: ```bash git config core.hooksPath .githooks ``` - A **kötelező mezők** (pl. custom field) API-n keresztül is ki kell tölteni, különben a ticket frissítés hibával tér vissza