Merge pull request #1 from AnwariasEu/master
Display commit messages as links to the appropiate commits
This commit is contained in:
commit
3cf14300fd
12
README.md
12
README.md
|
@ -2,4 +2,14 @@
|
|||
|
||||
Takes notifications via webhook, checks a secret and notifies a
|
||||
[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):
|
||||
return sorted(commits, key=lambda commit: commit["timestamp"])
|
||||
|
||||
def extract_commit_message(commit):
|
||||
return shorten(next(iter_first_line(commit["message"]), "$EMPTY_COMMIT_MESSAGE - impossibruh"))
|
||||
def extract_commit_info(commit):
|
||||
msg = shorten(next(iter_first_line(commit["message"]), "$EMPTY_COMMIT_MESSAGE - impossibruh"))
|
||||
url = commit["url"]
|
||||
return msg, url
|
||||
|
||||
username = request.json["user_name"]
|
||||
commit_messages = list(map(extract_commit_message, sort_commits_by_time(request.json["commits"])))
|
||||
project_name = request.json["project"]["name"]
|
||||
html_commits = "\n".join((f" <li>{msg}</li>" for msg in commit_messages))
|
||||
text_commits = "\n".join((f"- {msg}" 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}]({url})" for (msg, url) in commit_messages))
|
||||
try:
|
||||
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",
|
||||
|
|
Loading…
Reference in a new issue