Parcourir la source

Initial import.

Doesn't really do much of use yet.
master
Chris Smith il y a 6 ans
révision
ea43bcffa8
6 fichiers modifiés avec 118 ajouts et 0 suppressions
  1. 2
    0
      .gitignore
  2. 11
    0
      Dockerfile
  3. 82
    0
      main.py
  4. 5
    0
      requirements.txt
  5. 18
    0
      static/index.html
  6. BIN
      static/las.jpg

+ 2
- 0
.gitignore Voir le fichier

@@ -0,0 +1,2 @@
1
+/venv
2
+/.idea

+ 11
- 0
Dockerfile Voir le fichier

@@ -0,0 +1,11 @@
1
+FROM python:3-stretch
2
+
3
+RUN useradd sinker
4
+
5
+WORKDIR /var/code
6
+ADD . .
7
+
8
+RUN chown -R sinker /var/code && \
9
+    pip3 install -r requirements.txt
10
+
11
+USER sinker

+ 82
- 0
main.py Voir le fichier

@@ -0,0 +1,82 @@
1
+import hashlib
2
+
3
+import jenkins
4
+import requests
5
+import os
6
+from bs4 import BeautifulSoup
7
+from flask import Flask
8
+
9
+BASE_URL = os.environ["LAS_BASE_URL"]
10
+SECRET = os.environ["LAS_SECRET"]
11
+
12
+server = jenkins.Jenkins(
13
+    os.environ["LAS_JENKINS_URL"],
14
+    username=os.environ["LAS_JENKINS_USER"],
15
+    password=os.environ["LAS_JENKINS_PASSWORD"],
16
+)
17
+
18
+
19
+def get_hook_url(service, identifier):
20
+    nonce = (service + SECRET + identifier).encode("ascii")
21
+    token = hashlib.sha256(nonce).hexdigest()
22
+    return f"{BASE_URL}hooks/{service}/{identifier}/{token}"
23
+
24
+
25
+def get_jenkins_jobs():
26
+    for job in server.get_all_jobs():
27
+        config = BeautifulSoup(server.get_job_config(job["fullname"]), features="xml")
28
+        for git_config in config.find_all("scm", class_="hudson.plugins.git.GitSCM"):
29
+            branch_spec = git_config.find("branches").find("name").text
30
+            yield job["fullname"], branch_spec, git_config.find("url").text
31
+
32
+
33
+def maybe_install_gitea_hook(project):
34
+    gitea_url = f"{os.environ['LAS_GITEA_URL']}api/v1/repos/{project}/hooks"
35
+    hook_url = get_hook_url("gitea", project)
36
+    hooks = requests.get(
37
+        gitea_url, params={"access_token": os.environ["LAS_GITEA_TOKEN"]}
38
+    ).json()
39
+
40
+    if hook_url not in [hook["config"]["url"] for hook in hooks]:
41
+        body = {
42
+            "active": True,
43
+            "config": {"content_type": "json", "url": hook_url},
44
+            "events": [
45
+                "create",
46
+                "delete",
47
+                "fork",
48
+                "push",
49
+                "issues",
50
+                "issue_comment",
51
+                "pull_request",
52
+                "repository",
53
+                "release",
54
+            ],
55
+            "type": "gitea",
56
+        }
57
+        requests.post(
58
+            gitea_url,
59
+            json=body,
60
+            params={"access_token": "5b8de94a7201bc923e99813850327caf75b85e70"},
61
+        ).json()
62
+
63
+
64
+def get_gitea_repos():
65
+    repos = requests.get(
66
+        f"{os.environ['LAS_GITEA_URL']}api/v1/user/repos",
67
+        params={"access_token": os.environ["LAS_GITEA_TOKEN"]},
68
+    ).json()
69
+    for repo in repos:
70
+        maybe_install_gitea_hook(repo["full_name"])
71
+        yield repo["full_name"], repo["ssh_url"], repo["clone_url"]
72
+
73
+
74
+app = Flask(__name__)
75
+
76
+
77
+@app.route("/")
78
+def handle_index():
79
+    return app.send_static_file("index.html")
80
+
81
+
82
+app.run()

+ 5
- 0
requirements.txt Voir le fichier

@@ -0,0 +1,5 @@
1
+flask
2
+requests
3
+lxml
4
+bs4
5
+python-jenkins

+ 18
- 0
static/index.html Voir le fichier

@@ -0,0 +1,18 @@
1
+<!DOCTYPE html>
2
+<html>
3
+<head>
4
+    <title>Hello</title>
5
+    <style type="text/css">
6
+        img {
7
+            position: absolute;
8
+            left: 50%;
9
+            top: 50%;
10
+            margin-top: -244px;
11
+            margin-left: -400px;
12
+        }
13
+    </style>
14
+</head>
15
+<body>
16
+    <img src="/static/las.jpg">
17
+</body>
18
+</html>

BIN
static/las.jpg Voir le fichier


Chargement…
Annuler
Enregistrer