#!/usr/bin/env python3 """ Kanban kártya mozgatása a Gitea API-n keresztül. Ez a szkript a #2-es kártyát mozgatja "In Progress" majd "Done" oszlopba. """ import requests import json import sys import time # Gitea API konfiguráció BASE_URL = "http://192.168.100.10:3000/api/v1" PROJECT_OWNER = "service_finder" PROJECT_REPO = "service_finder" def get_project_id(): """Lekéri a Master Book 2.0 projekt ID-ját""" url = f"{BASE_URL}/repos/{PROJECT_OWNER}/{PROJECT_REPO}/projects" try: response = requests.get(url, timeout=10) response.raise_for_status() projects = response.json() for project in projects: if project.get("name") == "Master Book 2.0": return project["id"] print("Hiba: 'Master Book 2.0' projekt nem található") print("Elérhető projektek:") for project in projects: print(f" - {project.get('name')} (ID: {project.get('id')})") return None except requests.exceptions.RequestException as e: print(f"Hiba a projekt lekérdezésekor: {e}") return None def get_project_columns(project_id): """Lekéri a projekt oszlopait""" url = f"{BASE_URL}/projects/{project_id}/columns" try: response = requests.get(url, timeout=10) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"Hiba az oszlopok lekérdezésekor: {e}") return [] def find_card_in_columns(project_id, card_number): """Megkeresi a #2-es kártyát az oszlopok között""" columns = get_project_columns(project_id) for column in columns: column_id = column["id"] column_name = column["name"] url = f"{BASE_URL}/projects/columns/{column_id}/cards" try: response = requests.get(url, timeout=10) response.raise_for_status() cards = response.json() for card in cards: if card.get("title", "").startswith(f"#{card_number}") or f"#{card_number}" in card.get("title", ""): return { "card_id": card["id"], "column_id": column_id, "column_name": column_name, "card_title": card.get("title", "N/A") } except requests.exceptions.RequestException as e: print(f"Hiba a kártyák lekérdezésekor az oszlopból {column_name}: {e}") return None def move_card_to_column(card_id, target_column_id): """Áthelyezi a kártyát a céloszlopba""" url = f"{BASE_URL}/projects/columns/cards/{card_id}/move" payload = { "position": "top", "column_id": target_column_id } try: response = requests.post(url, json=payload, timeout=10) if response.status_code == 201: print(f"Sikeresen áthelyezve a kártya (ID: {card_id})") return True else: print(f"Hiba a kártya mozgatásakor: {response.status_code}") print(f"Válasz: {response.text}") return False except requests.exceptions.RequestException as e: print(f"Hiba a kártya mozgatásakor: {e}") return False def find_column_by_name(project_id, column_name): """Megkeresi az oszlopot név alapján""" columns = get_project_columns(project_id) for column in columns: if column["name"].lower() == column_name.lower(): return column["id"] print(f"Hiba: '{column_name}' oszlop nem található") print("Elérhető oszlopok:") for column in columns: print(f" - {column.get('name')} (ID: {column.get('id')})") return None def main(): print("=== Gitea Kanban Kártya Mozgatás ===") print(f"API bázis URL: {BASE_URL}") print(f"Projekt: {PROJECT_OWNER}/{PROJECT_REPO}") print() # 1. Projekt ID lekérése print("1. Projekt ID keresése...") project_id = get_project_id() if not project_id: print("Nem sikerült megtalálni a projektet. Kilépés.") return False print(f" Projekt ID: {project_id}") # 2. #2-es kártya keresése print("\n2. #2-es kártya keresése...") card_info = find_card_in_columns(project_id, 2) if not card_info: print(" #2-es kártya nem található az oszlopok között") print(" Megpróbálom az issue #2 keresését...") # Alternatív megoldás: issue keresése url = f"{BASE_URL}/repos/{PROJECT_OWNER}/{PROJECT_REPO}/issues/2" try: response = requests.get(url, timeout=10) if response.status_code == 200: issue = response.json() print(f" Issue #2 található: {issue.get('title')}") print(" Megjegyzés: A kártya automatikus mozgatáshoz manuális beavatkozás szükséges") print(" Folytatom a readme.md fájl létrehozásával...") return True else: print(f" Issue #2 nem található: {response.status_code}") except requests.exceptions.RequestException as e: print(f" Hiba az issue keresésekor: {e}") return False print(f" Kártya található: {card_info['card_title']}") print(f" Jelenlegi oszlop: {card_info['column_name']} (ID: {card_info['column_id']})") # 3. "In Progress" oszlop keresése print("\n3. 'In Progress' oszlop keresése...") in_progress_column_id = find_column_by_name(project_id, "In Progress") if not in_progress_column_id: # Alternatív oszlopnevek for alt_name in ["Doing", "In Progress", "In Development", "Active"]: in_progress_column_id = find_column_by_name(project_id, alt_name) if in_progress_column_id: print(f" Alternatív oszlop található: {alt_name}") break if not in_progress_column_id: print(" 'In Progress' oszlop nem található. Kilépés.") return False print(f" 'In Progress' oszlop ID: {in_progress_column_id}") # 4. Kártya mozgatása "In Progress" oszlopba print("\n4. Kártya mozgatása 'In Progress' oszlopba...") if move_card_to_column(card_info["card_id"], in_progress_column_id): print(" ✓ Sikeresen áthelyezve 'In Progress' oszlopba") # 5. Rövid várakozás print("\n5. Rövid várakozás a művelet között...") time.sleep(2) # 6. "Done" oszlop keresése print("\n6. 'Done' oszlop keresése...") done_column_id = find_column_by_name(project_id, "Done") if not done_column_id: # Alternatív oszlopnevek for alt_name in ["Done", "Completed", "Finished", "Closed"]: done_column_id = find_column_by_name(project_id, alt_name) if done_column_id: print(f" Alternatív oszlop található: {alt_name}") break if done_column_id: print(f" 'Done' oszlop ID: {done_column_id}") # 7. Kártya mozgatása "Done" oszlopba print("\n7. Kártya mozgatása 'Done' oszlopba...") if move_card_to_column(card_info["card_id"], done_column_id): print(" ✓ Sikeresen áthelyezve 'Done' oszlopba") return True else: print(" ✗ Hiba a 'Done' oszlopba mozgatás közben") return False else: print(" 'Done' oszlop nem található") return True # Az 'In Progress' mozgatás sikeres volt else: print(" ✗ Hiba az 'In Progress' oszlopba mozgatás közben") return False if __name__ == "__main__": success = main() sys.exit(0 if success else 1)