traefik-deploy/scripts/trigger_build.py
2025-10-08 16:03:46 -04:00

80 lines
No EOL
2.4 KiB
Python
Executable file

#!/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()