最近參考linty_fresh實現了一個webhook服務,
提PR自動檢查Flake8, 當有程式碼風格問題的時候,並在對應位置發評論
專案地址是: gandalf
在公司內的Github企業版上, 已經用了一段時間, 比較穩定. 現在開源出來, 有興趣的可以拿去^.^
這個專案也是我的學習asyncio的練手作品, 吐槽下Type Hints讓程式碼顯的好醜哇…
專案知識點
- Python3: 專案需要使用Python3, 建議使用Python3.5
- rq: 工作中有一些專案的版本庫很大, 實際的檢查時間也會長一些, 為了保證應用解耦和更好的提供支援, 使用rq作為任務佇列
- aiohttp: 基於asyncio的http庫, 用來呼叫github api, 獲取對應pr資訊
- pygit2: 使用官方模組實現Python版本的git版本控制功能, 它的安裝比較麻煩, 但是官方文件講的很清楚
- Flask: 作為webhook的服務框架
來幾張截圖看個效果:
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
❯ cat gandalf/config.py WORK_DIR = '/tmp/repositories' # 設定克隆的專案版本庫程式碼存放位置 FLAKE8_EXECUTABLE = '/usr/local/bin/flake8' # 這個專案時Python3的,但是目前大部分應用還是Python2的, 所以需要Python2版本的flake8 HOST = '0.0.0.0' PORT = 8080 DEBUG = False REPORT_NO_MATCHING = False # 沒有在diff列表的檔案的錯誤是否也報告 GITHUB_URL = 'http://github.com/' # 行尾要加反斜槓 GITHUB_API_URL = 'https://api.github.com' # 行尾不要加反斜槓 REPORT_CLOSEST = False # 錯誤出現在PR列出的檔案中, 但是修改並不是此次PR中的diff裡面是否報告 COMMENT_HEADER = '' # 上述截圖出現的emoji頭部就是指定它, 我的設定是`COMMENT_HEADER = ':sparkles:Subject Bot:sparkles:'` try: from local_settings import * except ImportError: pass |
配置webhook
需要在github的專案/組織設定頁,找到Webhooks
, 然後Add webhook
,
Payload URL
輸入 http://192.168.1.1:28030/api/hooks # 或者你跑起來web服務的地址- 選擇事件 ,
Let me select individual events.
然後勾選Pull Request
如圖:
Enjoy it