Merge pull request #1 from AnwariasEu/master
Display commit messages as links to the appropiate commits
This commit is contained in:
commit
3cf14300fd
10
README.md
10
README.md
|
@ -3,3 +3,13 @@
|
||||||
Takes notifications via webhook, checks a secret and notifies a
|
Takes notifications via webhook, checks a secret and notifies a
|
||||||
[Matrix](https://matrix.org) channel. Listens to HTTP only. Should be used
|
[Matrix](https://matrix.org) channel. Listens to HTTP only. Should be used
|
||||||
behind a reverse-proxy with HTTPS.
|
behind a reverse-proxy with HTTPS.
|
||||||
|
|
||||||
|
# Testing the Hook locally
|
||||||
|
- Start the webserver locally by `env FLASK_APP=wmn.py flask run`
|
||||||
|
- Or have your IDE do it for you
|
||||||
|
- Send a POST request using curl `curl -i -X POST "localhost:5000/matrix?channel=%21yhEUnvhAZZFKRStdXb%3Amatrix.org" -H "X-Gitlab-Event: Push Hook" -H "X-Gitlab-Token: ..." -H "Content-Type: application/json" --data-binary @./testrequest.json`
|
||||||
|
- The part after `channel=` is the room ID which can retrieved from Matrix channels you are part of
|
||||||
|
- `%21` escapes ! in URI
|
||||||
|
- `%3A` escapes : in URI
|
||||||
|
- The `X-Gitlab-Token` must correspond to the one provided in `config.yaml`
|
||||||
|
|
||||||
|
|
68
testrequest.json
Normal file
68
testrequest.json
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
{
|
||||||
|
"object_kind": "push",
|
||||||
|
"before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
|
||||||
|
"after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
|
||||||
|
"ref": "refs/heads/master",
|
||||||
|
"checkout_sha": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
|
||||||
|
"user_id": 4,
|
||||||
|
"user_name": "John Smith",
|
||||||
|
"user_username": "jsmith",
|
||||||
|
"user_email": "john@example.com",
|
||||||
|
"user_avatar": "https://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=8://s.gravatar.com/avatar/d4c74594d841139328695756648b6bd6?s=80",
|
||||||
|
"project_id": 15,
|
||||||
|
"project":{
|
||||||
|
"id": 15,
|
||||||
|
"name":"Diaspora",
|
||||||
|
"description":"",
|
||||||
|
"web_url":"http://example.com/mike/diaspora",
|
||||||
|
"avatar_url":null,
|
||||||
|
"git_ssh_url":"git@example.com:mike/diaspora.git",
|
||||||
|
"git_http_url":"http://example.com/mike/diaspora.git",
|
||||||
|
"namespace":"Mike",
|
||||||
|
"visibility_level":0,
|
||||||
|
"path_with_namespace":"mike/diaspora",
|
||||||
|
"default_branch":"master",
|
||||||
|
"homepage":"http://example.com/mike/diaspora",
|
||||||
|
"url":"git@example.com:mike/diaspora.git",
|
||||||
|
"ssh_url":"git@example.com:mike/diaspora.git",
|
||||||
|
"http_url":"http://example.com/mike/diaspora.git"
|
||||||
|
},
|
||||||
|
"repository":{
|
||||||
|
"name": "Diaspora",
|
||||||
|
"url": "git@example.com:mike/diaspora.git",
|
||||||
|
"description": "",
|
||||||
|
"homepage": "http://example.com/mike/diaspora",
|
||||||
|
"git_http_url":"http://example.com/mike/diaspora.git",
|
||||||
|
"git_ssh_url":"git@example.com:mike/diaspora.git",
|
||||||
|
"visibility_level":0
|
||||||
|
},
|
||||||
|
"commits": [
|
||||||
|
{
|
||||||
|
"id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
|
||||||
|
"message": "Update Catalan translation to e38cb41.",
|
||||||
|
"timestamp": "2011-12-12T14:27:31+02:00",
|
||||||
|
"url": "http://example.com/mike/diaspora/commit/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
|
||||||
|
"author": {
|
||||||
|
"name": "Jordi Mallach",
|
||||||
|
"email": "jordi@softcatala.org"
|
||||||
|
},
|
||||||
|
"added": ["CHANGELOG"],
|
||||||
|
"modified": ["app/controller/application.rb"],
|
||||||
|
"removed": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
|
||||||
|
"message": "fixed readme",
|
||||||
|
"timestamp": "2012-01-03T23:36:29+02:00",
|
||||||
|
"url": "http://example.com/mike/diaspora/commit/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
|
||||||
|
"author": {
|
||||||
|
"name": "GitLab dev user",
|
||||||
|
"email": "gitlabdev@dv6700.(none)"
|
||||||
|
},
|
||||||
|
"added": ["CHANGELOG"],
|
||||||
|
"modified": ["app/controller/application.rb"],
|
||||||
|
"removed": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"total_commits_count": 4
|
||||||
|
}
|
10
wmn.py
10
wmn.py
|
@ -86,14 +86,16 @@ def process_gitlab_request():
|
||||||
def sort_commits_by_time(commits):
|
def sort_commits_by_time(commits):
|
||||||
return sorted(commits, key=lambda commit: commit["timestamp"])
|
return sorted(commits, key=lambda commit: commit["timestamp"])
|
||||||
|
|
||||||
def extract_commit_message(commit):
|
def extract_commit_info(commit):
|
||||||
return shorten(next(iter_first_line(commit["message"]), "$EMPTY_COMMIT_MESSAGE - impossibruh"))
|
msg = shorten(next(iter_first_line(commit["message"]), "$EMPTY_COMMIT_MESSAGE - impossibruh"))
|
||||||
|
url = commit["url"]
|
||||||
|
return msg, url
|
||||||
|
|
||||||
username = request.json["user_name"]
|
username = request.json["user_name"]
|
||||||
commit_messages = list(map(extract_commit_message, sort_commits_by_time(request.json["commits"])))
|
commit_messages = list(map(extract_commit_message, sort_commits_by_time(request.json["commits"])))
|
||||||
project_name = request.json["project"]["name"]
|
project_name = request.json["project"]["name"]
|
||||||
html_commits = "\n".join((f" <li>{msg}</li>" for msg in commit_messages))
|
html_commits = "\n".join((f' <li><a href="{url}">{msg}</a></li>' for (msg, url) in commit_messages))
|
||||||
text_commits = "\n".join((f"- {msg}" for msg in commit_messages))
|
text_commits = "\n".join((f"- [{msg}]({url})" for (msg, url) in commit_messages))
|
||||||
try:
|
try:
|
||||||
room.send_html(f"<strong>{username} pushed {len(commit_messages)} commits to {project_name}</strong><br>\n"
|
room.send_html(f"<strong>{username} pushed {len(commit_messages)} commits to {project_name}</strong><br>\n"
|
||||||
f"<ul>\n{html_commits}\n</ul>\n",
|
f"<ul>\n{html_commits}\n</ul>\n",
|
||||||
|
|
Loading…
Reference in a new issue