80 lines
No EOL
2.4 KiB
Python
Executable file
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() |