跳至主要内容
版本:1.25.5

Webhooks

Gitea 可以為儲存庫活動送出對外 Webhook。儲存庫層級的 Webhook 由儲存庫管理員 在 /:username/:reponame/settings/hooks 中設定。組織、使用者與系統管理層級 也有對應的 Webhook 設定頁面。

Webhook 設定支援四種範圍:

  • 儲存庫 Webhook:只會對單一儲存庫中的活動觸發。
  • 組織 Webhook:對該組織擁有的儲存庫中的活動觸發。
  • 使用者 Webhook:對該使用者擁有的儲存庫中的活動觸發。
  • 系統 Webhook:對實例中所有符合條件的活動觸發。

Gitea 也支援由管理員定義的 預設 Webhook。它並不是額外的投遞範圍,而是會在 建立新儲存庫時被複製到該儲存庫中,之後就會像一般儲存庫 Webhook 一樣運作。

Gitea 支援以下對外 Webhook 整合:

  • Gitea
  • Gogs
  • Slack
  • Discord
  • Dingtalk
  • Telegram
  • Microsoft Teams
  • Feishu
  • Matrix
  • Wechatwork
  • Packagist

GiteaGogs 類型會送出通用 Webhook payload。上面列出的聊天與服務整合 則會把同一個內部事件轉換成各自服務所需的請求主體格式。

本頁分成三個部分:

  • 設定:如何設定 Webhook 選項,例如 URL、密鑰、分支過濾器與授權標頭。
  • 投遞:Gitea 如何送出 Webhook 請求、會附帶哪些標頭,以及如何驗證投遞。
  • 事件:Gitea 會投遞哪些事件,以及每個事件包含哪些頂層 payload 參數。

設定

本節介紹在建立或編輯 Webhook 時可以設定的選項。

設定 Webhook

建立 Webhook 時,主要設定項目包括:

  • Target URL:接收投遞的目標位址。
  • HTTP Method:通用 Webhook 通常使用 POST
  • POST Content Type:通用 Webhook 可使用 application/jsonapplication/x-www-form-urlencoded
  • Secret:用來對原始請求主體進行 HMAC 簽章。
  • Authorization Header:可選的自訂 Authorization 標頭,會隨每次請求送出。
  • Branch Filter:可選的分支或標籤過濾規則。
  • Trigger OnPush EventsAll Events 或自訂事件選擇。
  • Active:是否啟用該 Webhook。
備註

舊版範例中可能仍會在 JSON payload 裡看到 secret 欄位。當前版本的 Gitea 不會再把 Webhook 密鑰放進 payload 內容中。請務必透過簽章標頭驗證請求。

分支過濾器

分支過濾器使用與 github.com/gobwas/glob 相容的 glob 語法。

  • 空值、*** 代表符合全部。
  • main 這樣的一般分支名稱會符合該分支。
  • 也支援 refs/tags/v* 這類完整 ref。
  • 支援 {main,release/*} 這類大括號表達式。
  • 過濾器只會套用在帶有 git ref 的事件,例如 createdeletepush
  • 不帶 ref 的事件,例如 issue 或 release,會忽略分支過濾器。

範例:

  • main
  • {main,feature/*}
  • {refs/heads/feature/*,refs/tags/release/*}

授權標頭

Gitea 可以設定為在每次 Webhook 投遞時送出自訂的 Authorization header。 它與 Webhook 密鑰彼此獨立:

  • 使用密鑰透過 HMAC 驗證請求完整性。
  • 當接收端需要應用層認證時,使用 Authorization 標頭。

投遞

本節說明 Gitea 如何送出 Webhook 投遞,以及接收端如何識別與驗證這些請求。

投遞行為

  • Webhook 會透過 HTTP 非同步投遞。
  • 通用 GiteaGogs Webhook 支援 POSTGET;通常應使用 POST
  • 對於 POST 請求,payload 可以直接以 JSON (application/json)送出,也可以放在名為 payload 的表單欄位中 (application/x-www-form-urlencoded)。
  • 某些特定服務整合可能會使用該服務要求的 HTTP 方法與請求主體格式。

投遞標頭

每次投遞都包含唯一的 delivery ID 與事件標頭。對於相容 GitHub 的整合, Gitea 也會同時送出對應的 GitHub 與 Gogs 風格標頭。

標頭說明
X-Gitea-Delivery本次投遞嘗試的唯一 UUID。
X-Gitea-Event規範化事件名稱,例如 pushissuespull_request
X-Gitea-Event-Type更具體的事件類型,例如 issue_assignpull_request_review_comment
X-Gitea-Signature原始請求主體的十六進位 HMAC-SHA256 值,不含前綴。
X-Gitea-Hook-Installation-Target-TypeWebhook 定義所在範圍,通常是 repositoryorganizationusersystem。預設 Webhook 會先複製到儲存庫後再投遞,因此通常會呈現為 repository
X-Gogs-DeliveryX-Gogs-EventX-Gogs-Event-TypeX-Gogs-Signature與 Gitea 對應標頭值相同的相容性標頭。
X-GitHub-DeliveryX-GitHub-EventX-GitHub-Event-TypeGitHub 風格相容性標頭。
X-GitHub-Hook-Installation-Target-TypeGitHub 風格的 Webhook 範圍標頭。
X-Hub-SignatureGitHub 相容的 HMAC-SHA1 標頭,格式為 sha1=<digest>
X-Hub-Signature-256GitHub 相容的 HMAC-SHA256 標頭,格式為 sha256=<digest>

如果未設定密鑰,簽章標頭仍然會存在,但摘要值為空。

EventEvent-Type

某些 Gitea Webhook 訂閱會被歸類到同一個規範化事件名稱下。例如,issue 指派 投遞會歸類到 issue 事件群組:

X-Gitea-Event: issues
X-Gitea-Event-Type: issue_assign
X-GitHub-Event: issues
X-GitHub-Event-Type: issue_assign

如果你需要知道實際觸發投遞的具體事件類型,請使用 X-Gitea-Event-Type

驗證投遞

Gitea 會使用你的 Webhook 密鑰對原始請求主體進行簽章。要驗證一次投遞:

  1. 以接收到的原始內容讀取請求主體。
  2. 使用 Webhook 密鑰計算 HMAC-SHA256 摘要。
  3. 將結果與 X-Gitea-Signature 或 GitHub 相容的 X-Hub-Signature-256 進行比較。
  4. 盡量使用常數時間比較函式。

注意事項:

  • X-Gitea-Signature 只包含小寫十六進位的 SHA-256 摘要。
  • X-Hub-Signature-256 使用相同摘要,但帶有 sha256= 前綴。
  • X-Hub-Signature 也會為了相容性而送出,其演算法為 SHA-1。
  • 在完成簽章驗證之前,不應先解析 JSON 或修改請求主體。
PHP 範例

下面的範例示範如何驗證以 application/json 送出的通用 Gitea Webhook。

<?php

$secret = '123';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
exit('Only POST is allowed');
}

$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_GITEA_SIGNATURE'] ?? '';

if ($payload === false || $signature === '') {
http_response_code(400);
exit('Missing payload or signature');
}

$expected = hash_hmac('sha256', $payload, $secret);

if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('Invalid signature');
}

$event = $_SERVER['HTTP_X_GITEA_EVENT'] ?? '';
$eventType = $_SERVER['HTTP_X_GITEA_EVENT_TYPE'] ?? '';
$data = json_decode($payload, true);

if (!is_array($data)) {
http_response_code(400);
exit('Invalid JSON payload');
}

http_response_code(204);

事件

本節採用與 GitHub Webhook 文件類似的逐事件描述方式:每個事件都會說明 觸發時機,以及 payload 中包含哪些頂層欄位。

事件分組與 Webhook 設定介面中的分組一致:Repository EventsIssue EventsPull Request EventsWorkflow Events

儲存庫事件

  • createdeleteforkpushwikirepositoryreleasepackagestatus

create

當分支或標籤被建立時,會觸發此事件。

Payload 參數
名稱類型說明
shastring必填。 新建引用對應的物件 ID。
refstring必填。 被建立的分支名稱或標籤名稱。
ref_typestring必填。 引用類型,例如 branchtag
repositoryobject必填。 建立該引用的儲存庫。
senderobject必填。 建立該引用的使用者。

delete

當分支或標籤被刪除時,會觸發此事件。

Payload 參數
名稱類型說明
refstring必填。 被刪除的分支名稱或標籤名稱。
ref_typestring必填。 引用類型,例如 branchtag
pusher_typestring必填。 刪除該 ref 的行為主體類型。目前 Gitea payload 使用 user
repositoryobject必填。 刪除該引用所在的儲存庫。
senderobject必填。 刪除該引用的使用者。

fork

當儲存庫被 fork 時,會觸發此事件。

Payload 參數
名稱類型說明
forkeeobject必填。 新建立的 fork 儲存庫。
repositoryobject必填。 被 fork 的原始儲存庫。
senderobject必填。 建立 fork 的使用者。

push

當提交被推送到某個分支或標籤時,會觸發此事件。

Payload 參數
名稱類型說明
refstring必填。 被推送的完整 ref,例如 refs/heads/main
beforestring必填。 推送前的提交 SHA。
afterstring必填。 推送後的提交 SHA。
compare_urlstring必填。 用於比較 beforeafter 的 URL。
commitsarray必填。 本次推送包含的提交清單。
total_commitsinteger必填。 本次推送中的提交數量。
head_commitobject本次推送中的最新提交。
repositoryobject必填。 接收此次推送的儲存庫。
pusherobject必填。 執行推送的使用者。
senderobject必填。 觸發 Webhook 的使用者。

wiki

當 Wiki 頁面被建立、編輯或刪除時,會觸發此事件。

動作類型: createdediteddeleted

Payload 參數
名稱類型說明
actionstring必填。 Wiki 頁面操作類型。
repositoryobject必填。 擁有該 Wiki 的儲存庫。
senderobject必填。 修改 Wiki 頁面的使用者。
pagestring必填。 Wiki 頁面名稱。
commentstringWiki 提交訊息或註解。

repository

當儲存庫被建立或刪除時,會觸發此事件。

動作類型: createddeleted

Payload 參數
名稱類型說明
actionstring必填。 儲存庫操作類型。
repositoryobject必填。 被建立或刪除的儲存庫。
organizationobject當儲存庫屬於某個組織時會出現。
senderobject必填。 執行該操作的使用者。

release

當發行版本被發佈、更新或刪除時,會觸發此事件。

動作類型: publishedupdateddeleted

Payload 參數
名稱類型說明
actionstring必填。 Release 操作類型。
releaseobject必填。 被操作的發行版本。
repositoryobject必填。 包含該發行版本的儲存庫。
senderobject必填。 執行該操作的使用者。

package

當套件被建立或刪除時,會觸發此事件。

動作類型: createddeleted

Payload 參數
名稱類型說明
actionstring必填。 套件操作類型。
repositoryobject與該套件關聯的儲存庫;如果適用則會出現。
packageobject必填。 被操作的套件。
organizationobject當套件擁有者是組織時會出現。
senderobject必填。 執行該操作的使用者。

status

當透過 API 建立或更新提交狀態時,會觸發此事件。

Payload 參數
名稱類型說明
commitobject與該狀態關聯的提交。
contextstring必填。 狀態內容,例如 ci/build
created_atstring必填。 狀態建立時間。
descriptionstring狀態描述文字。
idinteger必填。 狀態識別碼。
repositoryobject必填。 包含該提交的儲存庫。
senderobject必填。 建立該狀態的使用者。
shastring必填。 提交 SHA。
statestring必填。 狀態值,例如 pendingsuccesserrorfailure
target_urlstring與該狀態關聯的目標 URL。
updated_atstring狀態最後更新時間。

與多數其他 payload 不同,此事件不使用 action 欄位,狀態變化透過 state 欄位表示。

議題事件

  • issuesissue_assignissue_labelissue_milestoneissue_comment

issues

當 issue 被開啟、關閉、重新開啟、編輯或刪除時,會觸發此事件。

動作類型: openedclosedreopenedediteddeleted

Payload 參數
名稱類型說明
actionstring必填。 Issue 操作類型。
numberinteger必填。 Issue 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
issueobject必填。 被操作的 issue。
repositoryobject必填。 包含該 issue 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 issue 操作關聯的提交 SHA;如果適用則會出現。

issue_assign

當 issue 被指派或取消指派時,會觸發此事件。

動作類型: assignedunassigned

Payload 參數
名稱類型說明
actionstring必填。 指派操作類型。
numberinteger必填。 Issue 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
issueobject必填。 被操作的 issue。
repositoryobject必填。 包含該 issue 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 issue 操作關聯的提交 SHA;如果適用則會出現。

issue_label

當 issue 標籤被更新或清空時,會觸發此事件。

動作類型: label_updatedlabel_cleared

Payload 參數
名稱類型說明
actionstring必填。 標籤更新操作類型。
numberinteger必填。 Issue 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
issueobject必填。 被操作的 issue。
repositoryobject必填。 包含該 issue 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 issue 操作關聯的提交 SHA;如果適用則會出現。

issue_milestone

當 issue 被設定里程碑或移除里程碑時,會觸發此事件。

動作類型: milestoneddemilestoned

Payload 參數
名稱類型說明
actionstring必填。 里程碑操作類型。
numberinteger必填。 Issue 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
issueobject必填。 被操作的 issue。
repositoryobject必填。 包含該 issue 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 issue 操作關聯的提交 SHA;如果適用則會出現。

issue_comment

當 issue 評論被建立、編輯或刪除時,會觸發此事件。

動作類型: createdediteddeleted

Payload 參數
名稱類型說明
actionstring必填。 評論操作類型。
issueobject必填。 該評論所屬的 issue。
pull_requestobject當該評論位於 pull request 時間線上時會出現。
commentobject必填。 被建立、編輯或刪除的評論。
changesobject可選。當操作類型為 edited 時,表示評論內容的舊值。
repositoryobject必填。 包含該 issue 的儲存庫。
senderobject必填。 執行該操作的使用者。
is_pullboolean必填。 該評論是否位於 pull request 時間線上。

Pull Request 事件

  • pull_requestpull_request_assignpull_request_labelpull_request_milestonepull_request_commentpull_request_reviewpull_request_review_approvedpull_request_review_rejectedpull_request_review_commentpull_request_syncpull_request_review_request

pull_request

當 pull request 被開啟、關閉、重新開啟、編輯或刪除時,會觸發此事件。

動作類型: openedclosedreopenedediteddeleted

Payload 參數
名稱類型說明
actionstring必填。 Pull request 操作類型。
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被操作的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 pull request 操作關聯的提交 SHA;如果適用則會出現。
reviewobject在 pull request review 事件中會出現。

pull_request_assign

當 pull request 被指派或取消指派時,會觸發此事件。

動作類型: assignedunassigned

Payload 參數
名稱類型說明
actionstring必填。 指派操作類型。
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被操作的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 pull request 操作關聯的提交 SHA;如果適用則會出現。
reviewobject在 pull request review 事件中會出現。

pull_request_label

當 pull request 標籤被更新或清空時,會觸發此事件。

動作類型: label_updatedlabel_cleared

Payload 參數
名稱類型說明
actionstring必填。 標籤更新操作類型。
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被操作的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 pull request 操作關聯的提交 SHA;如果適用則會出現。
reviewobject在 pull request review 事件中會出現。

pull_request_milestone

當 pull request 被設定里程碑或移除里程碑時,會觸發此事件。

動作類型: milestoneddemilestoned

Payload 參數
名稱類型說明
actionstring必填。 里程碑操作類型。
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被操作的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 pull request 操作關聯的提交 SHA;如果適用則會出現。
reviewobject在 pull request review 事件中會出現。

pull_request_comment

當 pull request 時間線評論被建立、編輯或刪除時,會觸發此事件。

動作類型: createdediteddeleted

Payload 參數
名稱類型說明
actionstring必填。 評論操作類型。
issueobject必填。 與該 pull request 關聯的 issue 記錄。
pull_requestobject必填。 評論所屬的 pull request。
commentobject必填。 被建立、編輯或刪除的評論。
changesobject可選。當操作類型為 edited 時,表示評論內容的舊值。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 執行該操作的使用者。
is_pullboolean必填。 對此事件而言固定為 true

pull_request_review

這是 Webhook 設定介面中的一個僅用於訂閱的彙總事件。

它不會產生獨立的投遞 payload。勾選後,Gitea 實際投遞的是更具體的 pull_request_review_approvedpull_request_review_rejectedpull_request_review_comment 事件。

pull_request_review_approved

當 pull request review 以核准形式提交時,會觸發此事件。

動作類型: reviewed

Payload 參數
名稱類型說明
actionstring必填。 固定為 reviewed
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被審查的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 提交該審查的使用者。
commit_idstring與該審查事件關聯的提交 SHA;如果適用則會出現。
reviewobject必填。 審查 payload。對此事件而言,review.typeapproved

pull_request_review_rejected

當 pull request review 以拒絕或請求修改的形式提交時,會觸發此事件。

動作類型: reviewed

Payload 參數
名稱類型說明
actionstring必填。 固定為 reviewed
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被審查的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 提交該審查的使用者。
commit_idstring與該審查事件關聯的提交 SHA;如果適用則會出現。
reviewobject必填。 審查 payload。對此事件而言,review.typerejected

pull_request_review_comment

當 pull request review 以評論形式提交時,會觸發此事件。

動作類型: reviewed

Payload 參數
名稱類型說明
actionstring必填。 固定為 reviewed
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被審查的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 提交該審查的使用者。
commit_idstring與該審查事件關聯的提交 SHA;如果適用則會出現。
reviewobject必填。 審查 payload。對此事件而言,review.typecomment

pull_request_sync

當新的提交被推送後,pull request 被同步時,會觸發此事件。

動作類型: synchronized

Payload 參數
名稱類型說明
actionstring必填。 固定為 synchronized
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被同步的 pull request。
requested_reviewerobject在審查請求事件中會出現。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 執行同步操作的使用者。
commit_idstring與該同步事件關聯的提交 SHA;如果適用則會出現。
reviewobject在 pull request review 事件中會出現。

pull_request_review_request

當請求審查者或移除審查請求時,會觸發此事件。

動作類型: review_requestedreview_request_removed

Payload 參數
名稱類型說明
actionstring必填。 審查請求操作類型。
numberinteger必填。 Pull request 編號。
changesobject可選。編輯欄位之前的值,或標籤變更明細。
pull_requestobject必填。 被操作的 pull request。
requested_reviewerobject被請求或被移除的審查者。
repositoryobject必填。 包含該 pull request 的儲存庫。
senderobject必填。 執行該操作的使用者。
commit_idstring與該 pull request 操作關聯的提交 SHA;如果適用則會出現。
reviewobject在 pull request review 事件中會出現。

工作流程事件

  • workflow_runworkflow_job

workflow_run

當 Gitea Actions 工作流程執行狀態發生變化時,會觸發此事件。

動作類型: queuedwaitingin_progresscompleted

Payload 參數
名稱類型說明
actionstring必填。 工作流程執行狀態變化。
workflowobject必填。 工作流程定義。
workflow_runobject必填。 被操作的工作流程執行記錄。
pull_requestobject當該工作流程執行與某個 pull request 相關時會出現。
organizationobject當儲存庫擁有者是組織時會出現。
repositoryobject必填。 包含該工作流程的儲存庫。
senderobject必填。 觸發該工作流程執行更新的使用者。

workflow_job

當 Gitea Actions 工作流程作業狀態發生變化時,會觸發此事件。

動作類型: queuedwaitingin_progresscompleted

Payload 參數
名稱類型說明
actionstring必填。 工作流程作業狀態變化。
workflow_jobobject必填。 被操作的工作流程作業。
pull_requestobject當該工作流程作業與某個 pull request 相關時會出現。
organizationobject當儲存庫擁有者是組織時會出現。
repositoryobject必填。 包含該工作流程作業的儲存庫。
senderobject必填。 觸發該工作流程作業更新的使用者。

測試、最近投遞與重新投遞

每個 Webhook 頁面都包含:

  • Test Delivery:會向儲存庫送出一次模擬的 push 事件。
  • Recent Deliveries:顯示請求與回應詳細資訊。
  • Redelivery:重新投遞一筆歷史 Webhook 記錄。

如果儲存庫還沒有任何提交,測試投遞會使用一個產生的假提交,以便仍能測試 Webhook。

管理說明

管理員還可以透過實例層級設定控制 Webhook 投遞,例如主機允許清單、投遞逾時 與清理策略。詳見 設定速查表中的 Webhook 小節