12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import hashlib
-
- import jenkins
- import requests
- import os
- from bs4 import BeautifulSoup
- from flask import Flask
-
- BASE_URL = os.environ["LAS_BASE_URL"]
- SECRET = os.environ["LAS_SECRET"]
-
- server = jenkins.Jenkins(
- os.environ["LAS_JENKINS_URL"],
- username=os.environ["LAS_JENKINS_USER"],
- password=os.environ["LAS_JENKINS_PASSWORD"],
- )
-
-
- def get_hook_url(service, identifier):
- nonce = (service + SECRET + identifier).encode("ascii")
- token = hashlib.sha256(nonce).hexdigest()
- return f"{BASE_URL}hooks/{service}/{identifier}/{token}"
-
-
- def get_jenkins_jobs():
- for job in server.get_all_jobs():
- config = BeautifulSoup(server.get_job_config(job["fullname"]), features="xml")
- for git_config in config.find_all("scm", class_="hudson.plugins.git.GitSCM"):
- branch_spec = git_config.find("branches").find("name").text
- yield job["fullname"], branch_spec, git_config.find("url").text
-
-
- def maybe_install_gitea_hook(project):
- gitea_url = f"{os.environ['LAS_GITEA_URL']}api/v1/repos/{project}/hooks"
- hook_url = get_hook_url("gitea", project)
- hooks = requests.get(
- gitea_url, params={"access_token": os.environ["LAS_GITEA_TOKEN"]}
- ).json()
-
- if hook_url not in [hook["config"]["url"] for hook in hooks]:
- body = {
- "active": True,
- "config": {"content_type": "json", "url": hook_url},
- "events": [
- "create",
- "delete",
- "fork",
- "push",
- "issues",
- "issue_comment",
- "pull_request",
- "repository",
- "release",
- ],
- "type": "gitea",
- }
- requests.post(
- gitea_url,
- json=body,
- params={"access_token": "5b8de94a7201bc923e99813850327caf75b85e70"},
- ).json()
-
-
- def get_gitea_repos():
- repos = requests.get(
- f"{os.environ['LAS_GITEA_URL']}api/v1/user/repos",
- params={"access_token": os.environ["LAS_GITEA_TOKEN"]},
- ).json()
- for repo in repos:
- maybe_install_gitea_hook(repo["full_name"])
- yield repo["full_name"], repo["ssh_url"], repo["clone_url"]
-
-
- app = Flask(__name__)
-
-
- @app.route("/")
- def handle_index():
- return app.send_static_file("index.html")
-
-
- app.run()
|