#!/usr/bin/env python3 import sys import requests import configparser from pathlib import Path import getpass def read_inventory(): config = configparser.ConfigParser() config.read('inventory.ini') if 'traefik_servers:vars' in config: return { 'forgejo_url': config['traefik_servers:vars'].get('forgejo_url', 'http://eregion.chezlepro.ca:3000'), 'forgejo_owner': config['traefik_servers:vars'].get('forgejo_owner', 'Chezlepro'), 'forgejo_repo': config['traefik_servers:vars'].get('forgejo_repo', 'traefik-deploy'), 'traefik_version': config['traefik_servers:vars'].get('traefik_version', 'v3.2.0') } return None def trigger_workflow(forgejo_url, owner, repo, version, token): api_url = f"{forgejo_url}/api/v1/repos/{owner}/{repo}/actions/workflows/build.yml/dispatches" headers = { "Authorization": f"token {token}", "Content-Type": "application/json" } data = { "ref": "main", "inputs": { "traefik_version": version } } print(f"🏗️ Déclenchement de la compilation Traefik {version}...") print(f" URL: {forgejo_url}/{owner}/{repo}") response = requests.post(api_url, headers=headers, json=data) if response.status_code in [200, 201, 204]: print(f"✅ Workflow déclenché!") print(f"\n📊 Suivez sur: {forgejo_url}/{owner}/{repo}/actions") return True else: print(f"❌ Erreur {response.status_code}: {response.text}") return False def main(): config = read_inventory() if not config: print("❌ inventory.ini introuvable. Exécutez: make setup") sys.exit(1) print("=" * 70) print("🏗️ COMPILATION SUR FORGEJO") print("=" * 70) print(f"\nInstance: {config['forgejo_url']}") print(f"Dépôt: {config['forgejo_owner']}/{config['forgejo_repo']}") print(f"Version: {config['traefik_version']}\n") token = getpass.getpass("Token Forgejo: ") if not token: print("❌ Token requis") sys.exit(1) if trigger_workflow( config['forgejo_url'], config['forgejo_owner'], config['forgejo_repo'], config['traefik_version'], token ): print("\n⏳ Compilation: ~10-15 minutes") print(" Puis: make deploy") else: sys.exit(1) if __name__ == "__main__": main()