Przeglądaj źródła

Slack webhook support

master
Chris Smith 6 lat temu
rodzic
commit
65435d54ae
4 zmienionych plików z 30 dodań i 0 usunięć
  1. 4
    0
      README.md
  2. 6
    0
      lineandsinker/services/__init__.py
  3. 16
    0
      lineandsinker/services/slack.py
  4. 4
    0
      main.py

+ 4
- 0
README.md Wyświetl plik

65
 
65
 
66
 LaS can send messages to a ReportBot instance.
66
 LaS can send messages to a ReportBot instance.
67
 
67
 
68
+### Slack
69
+
70
+LaS accepts Slack-style webhooks. There are no configuration options.
71
+
68
 ## Contributing
72
 ## Contributing
69
 
73
 
70
 All code is formatted using [Black](https://github.com/ambv/black) with
74
 All code is formatted using [Black](https://github.com/ambv/black) with

+ 6
- 0
lineandsinker/services/__init__.py Wyświetl plik

4
 from .gitea import Gitea
4
 from .gitea import Gitea
5
 from .jenkins import Jenkins
5
 from .jenkins import Jenkins
6
 from .reportbot import ReportBot
6
 from .reportbot import ReportBot
7
+from .slack import Slack
7
 
8
 
8
 
9
 
9
 def docker_factory():
10
 def docker_factory():
30
     )
31
     )
31
 
32
 
32
 
33
 
34
+def slack_factory():
35
+    return Slack()
36
+
37
+
33
 services = {
38
 services = {
34
     "docker": docker_factory(),
39
     "docker": docker_factory(),
35
     "gitea": gitea_factory(),
40
     "gitea": gitea_factory(),
36
     "jenkins": jenkins_factory(),
41
     "jenkins": jenkins_factory(),
37
     "reportbot": reportbot_factory(),
42
     "reportbot": reportbot_factory(),
43
+    "slack": slack_factory(),
38
 }
44
 }

+ 16
- 0
lineandsinker/services/slack.py Wyświetl plik

1
+import json
2
+
3
+from .service import Service
4
+
5
+
6
+class Slack(Service):
7
+    def __init__(self):
8
+        super().__init__("slack")
9
+
10
+    def accept_hook(self, identifier, request):
11
+        if request.content_type == "application/json":
12
+            content = request.json()
13
+        else:
14
+            content = json.loads(request.get_data()["payload"])
15
+
16
+        yield {"type": f"slack", "source": identifier, "text": content["text"]}

+ 4
- 0
main.py Wyświetl plik

26
             services["reportbot"].announce(
26
             services["reportbot"].announce(
27
                 f"\002[registry]\002 New manifest pushed to {event['host']}/{event['repo']}:{event['tag']} by {event['user']}"
27
                 f"\002[registry]\002 New manifest pushed to {event['host']}/{event['repo']}:{event['tag']} by {event['user']}"
28
             )
28
             )
29
+        elif event["type"] == "slack":
30
+            services["reportbot"].announce(
31
+                f"\002[{event['source']}]\002 {event['text']}"
32
+            )
29
 
33
 
30
 
34
 
31
 @app.route("/")
35
 @app.route("/")

Ładowanie…
Anuluj
Zapisz