リポジトリ Web フック

Web フックについて

コードリポジトリをローカルで使用する場合、各種アクションに対してスクリプトによるフックがかけられます。 これと同じように、OSDN では 「Webフック」を使用することができます。

具体的には push (svn の場合はコミット) が行われた際、その内容を JSON に変換して指定された URL に POST します。 POST 先では JSON を解釈して好きなアクションをすることができます。

設定方法

プロジェクトもしくは作業部屋の管理者でログインし、リポジトリブラウザのサブメニュー「フック」から設定してください。

送られるデータ

データ構造はgithub の物に近付けてあります。 ただし、現在のところ push の中に存在する個々のコミット情報は含まれません。

データは通常の HTML フォームと同じく、Content-Disposition: form-data 形式で POST メソッドで送信され、 "payload" という単一キーを持ち、中身は JSON 形式です。

送信されるデータの例

  1. {
  2. "after": "6829ef8417b4d6c7cb20f4a34b6ccf4cb97dabe2",
  3. "before": "6789be548cc0d16a94f6d128ff813b64184ba549",
  4. "head_commit": {
  5. "author": {
  6. "email": "sugi@nemui.org",
  7. "name": "Tatsuki Sugiura"
  8. },
  9. "id": "6829ef8417b4d6c7cb20f4a34b6ccf4cb97dabe2",
  10. "message": "Test!\n",
  11. "timestamp": "2013-06-07T17:34:49",
  12. "url": "http://osdn.net/users/sugi/pf/sugitest/commits/6829ef8417b4d6c7cb20f4a34b6ccf4cb97dabe2"
  13. },
  14. "pusher": "sugi",
  15. "ref": "refs/heads/master",
  16. "repository": {
  17. "created_at": 1291198691,
  18. "description": "<i> test",
  19. "id": "6",
  20. "name": "sugitest",
  21. "pushed_at": 1370594094,
  22. "type": "git",
  23. "url": "http://osdn.net/users/sugi/pf/sugitest/"
  24. }
  25. }

データフィールドと意味

フィールド githgsvn
after push後のコミットID push後(最終)のコミットID コミットしたリビジョン
before push前のコミットID そのpushに含まれる最初のコミットID null
head_commit after のIDのコミット情報 after のIDのコミット情報 コミット情報
pusher OSDNのユーザID
ref push 先の ref push 先のブランチ名 変更されたディレクトリパス
repository リポジトリ情報

フックのテスト

「テスト」のボタンを押すと、最後に push された情報を使って、実際にフックリクエストを実行します。 requestbin などを利用すると実際に送られるデータを確認できます。

注意・制限事項

  • Webフックはリアルタイムには実行されません
  • 短い時間に連続してpushがあった場合、Webフックの実行順序は保証されません
  • システム的には、push (commit) の時点でキューに入れられ、数分以内に実行されます。push の時間が必要な場合は、データ内の repository.pushed_at を参照してください。
  • フックそれぞれに関して、いつでも有効無効を切り替えることができます。無効化されたフックは単純にスキップされます。
  • フックでエラーが発生した場合、再試行は行われず、単にエラーが起きたことが記録されます。
  • 連続して10回以上エラーになった場合、そのフックは自動的に無効化されます。