mirror of
https://gitea.com/gitea/docs.git
synced 2026-11-07 02:20:31 +00:00
refactor: rename i18n/*/docusaurus-plugin-content-docs to i18n/*/docs (#588)
Drops the leftover docusaurus name from the translated content directories.
- git mv i18n/{en-us,zh-cn,zh-tw}/docusaurus-plugin-content-docs -> i18n/{locale}/docs (pure renames, content unchanged)
- update the paths in packages/content-loader/src/products.ts, scripts/cut-version.mjs and sites/docs/README.md
current.json / version-*.json keep their names and stay beside the content.
Verified: pnpm build succeeds, 6690 pages built.
<!-- cloudflare-preview --> Preview: https://pr-588.docs-gitea-com.pages.dev
Reviewed-on: https://gitea.com/gitea/docs/pulls/588
Reviewed-by: Zettat123 <[email protected]>
This commit is contained in:
1 parent
1408e4890e
commit
2275bef3bd
1623 files changed
+5
-5
No files matched your search
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"label": "使用指南",
|
||||
"position": 35,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"slug": "/usage",
|
||||
"title": "使用指南"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"label": "Access Control",
|
||||
"position": 100,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"slug": "/usage/access-control",
|
||||
"description": "Permissions, security, and access control features"
|
||||
}
|
||||
}
|
||||
@@ -1,77 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "permissions"
|
||||
sidebar_position: 14
|
||||
aliases:
|
||||
- /zh-tw/permissions
|
||||
---
|
||||
|
||||
# 權限
|
||||
|
||||
Gitea 支援對儲存庫進行權限管理,這樣您就可以為不同的人員提供不同的存取權限。首先,我們需要了解 `單元(Unit)`。
|
||||
|
||||
## 單元(Unit)
|
||||
|
||||
在 Gitea 中,我們將儲存庫的子模組稱為 `單元(Unit)`。現在我們有以下幾個單元。
|
||||
|
||||
| 名稱 | 描述 | 權限 |
|
||||
| -------------- | ---------------------------------- | --------- |
|
||||
| 程式碼 | 訪問源程式碼、文件、提交和分支。 | 讀取 寫入 |
|
||||
| 工單 | 組織缺陷報告、任務和里程碑。 | 讀取 寫入 |
|
||||
| 合併請求 | 啟用合併請求和程式碼審覈。 | 讀取 寫入 |
|
||||
| 發佈 | 跟蹤專案版本和下載。 | 讀取 寫入 |
|
||||
| 百科 | 與協作者編寫和共享文件。 | 讀取 寫入 |
|
||||
| 外部百科 | 鏈接到外部維基。 | 讀取 |
|
||||
| 外部工單跟蹤器 | 鏈接到外部工單跟蹤器。 | 讀取 |
|
||||
| 專案 | 模板儲存庫的 URL。 | 讀取 寫入 |
|
||||
| 包 | 鏈接到儲存庫 | 讀取 寫入 |
|
||||
| Actions | 審查 Actions 日誌或重啟/取消工作流 | 讀取 寫入 |
|
||||
| 設定 | 管理儲存庫。 | 管理員 |
|
||||
|
||||
通過不同的權限,使用者可以在這些單元上執行不同的操作。
|
||||
|
||||
| 名稱 | 讀取 | 寫入 | 管理員 |
|
||||
| -------------- | -------------------------------- | ------------------------------ | -------- |
|
||||
| 程式碼 | 查看程式碼樹、文件、提交、分支等。 | 推送程式碼。 | - |
|
||||
| 工單 | 查看工單並建立新工單。 | 添加標籤、分配、關閉工單。 | - |
|
||||
| 合併請求 | 查看合併請求並建立新合併請求。 | 添加標籤、分配、關閉合併請求。 | - |
|
||||
| 發佈 | 查看發佈和下載文件。 | 建立/編輯發佈。 | - |
|
||||
| 百科 | 查看百科頁面。克隆百科儲存庫。 | 建立/編輯百科頁面,推送更改。 | - |
|
||||
| 外部百科 | 鏈接到外部百科。 | - | - |
|
||||
| 外部工單跟蹤器 | 鏈接到外部工單跟蹤器。 | - | - |
|
||||
| 專案 | 查看面板。 | 在面板之間移動工單。 | - |
|
||||
| 包 | 查看包 | 上傳/刪除包 | - |
|
||||
| Actions | 查看 Actions 日誌 | 同意 / 取消 / 重啟 | - |
|
||||
| 設定 | - | - | 管理儲存庫 |
|
||||
|
||||
個人儲存庫和組織儲存庫之間的權限存在一些差異。
|
||||
|
||||
## 個人儲存庫
|
||||
|
||||
對於個人儲存庫,建立者是儲存庫的唯一所有者,對於該儲存庫的任何更改或刪除沒有限制。
|
||||
儲存庫所有者可以添加協作者來幫助維護儲存庫。協作者可以擁有 `讀取(Read)`、`寫入(Write)` 和 `管理員(Admin)` 權限。
|
||||
|
||||
訪問私有儲存庫的體驗與訪問匿名公共儲存庫類似。您可以訪問儲存庫中的所有可用內容,包括克隆程式碼、建立工單、回覆工單評論、提交拉取請求等。如果你有 "寫"權限,只要分支保護規則允許,你就可以向儲存庫的特定分支推送程式碼。此外,你還可以修改百科頁面。有了 "管理"權限,你就可以修改儲存庫的設定。
|
||||
|
||||
但如果你不是該儲存庫的所有者,就不能刪除或轉移該儲存庫。
|
||||
|
||||
## 組織儲存庫
|
||||
|
||||
對於個人儲存庫,所有者是建立它的使用者。而對於組織儲存庫,所有者是該組織中的所有者團隊成員。對該組織儲存庫的所有權限都取決於團隊權限設定。
|
||||
|
||||
### 所有者團隊
|
||||
|
||||
建立組織時將自動建立所有者團隊,建立者將成為所有者團隊的第一名成員。所有者團隊不可刪除,且至少有一名成員。
|
||||
|
||||
### 管理員團隊
|
||||
|
||||
建立團隊時,有兩種類型的團隊。一種是管理員團隊,另一種是普通團隊。可以建立一個管理員團隊來管理某些版本庫,其成員可以對這些版本庫做任何事情。只有所有者或管理員團隊的成員才能建立新團隊。
|
||||
|
||||
### 普通團隊
|
||||
|
||||
組織中的普通團隊具有可以根據`單元(Unit)`進行權限設定。它可以有成員和儲存庫範圍。
|
||||
|
||||
- 一個團隊可以訪問所屬組織的所有儲存庫或特殊儲存庫。
|
||||
- 也可以設定該團隊是否有建立新儲存庫的權限。
|
||||
|
||||
可以透過建立 "普通團隊",並通過權限控制對其行為進行限制。一名成員可以加入多個團隊。
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "protected-tags"
|
||||
sidebar_position: 45
|
||||
aliases:
|
||||
- /zh-tw/protected-tags
|
||||
---
|
||||
|
||||
# 受保護的標籤
|
||||
|
||||
受保護的標籤允許控制誰有權限建立或更新 Git 標籤。每個規則可以匹配單個標籤名稱,或者使用適當的模式來同時控制多個標籤。
|
||||
|
||||
## 設定受保護的標籤
|
||||
|
||||
要保護一個標籤,你需要按照以下步驟進行操作:
|
||||
|
||||
1. 進入儲存庫的**設定** > **標籤**頁面。
|
||||
2. 輸入一個用於匹配名稱的模式。你可以使用單個名稱、[glob 模式](https://pkg.go.dev/github.com/gobwas/glob#Compile) 或正則表達式。
|
||||
3. 選擇允許的使用者和/或團隊。如果將這些欄位留空,則不允許任何人建立或修改此標籤。
|
||||
4. 選擇**保存**以保存設定。
|
||||
|
||||
## 模式受保護的標籤
|
||||
|
||||
該模式使用 [glob](https://pkg.go.dev/github.com/gobwas/glob#Compile) 或正則表達式來匹配標籤名稱。對於正則表達式,你需要將模式括在斜槓中。
|
||||
|
||||
範例:
|
||||
|
||||
| 類型 | 模式受保護的標籤 | 可能匹配的標籤 |
|
||||
| ----- | ------------------------ | --------------------------------------- |
|
||||
| Glob | `v*` | `v`,`v-1`,`version2` |
|
||||
| Glob | `v[0-9]` | `v0`,`v1` 到 `v9` |
|
||||
| Glob | `*-release` | `2.1-release`,`final-release` |
|
||||
| Glob | `gitea` | 僅限 `gitea` |
|
||||
| Glob | `*gitea*` | `gitea`,`2.1-gitea`,`1_gitea-release` |
|
||||
| Glob | `{v,rel}-*` | `v-`,`v-1`,`v-final`,`rel-`,`rel-x` |
|
||||
| Glob | `*` | 匹配所有可能的標籤名稱 |
|
||||
| Regex | `/\Av/` | `v`,`v-1`,`version2` |
|
||||
| Regex | `/\Av[0-9]\z/` | `v0`,`v1` 到 `v9` |
|
||||
| Regex | `/\Av\d+\.\d+\.\d+\z/` | `v1.0.17`,`v2.1.0` |
|
||||
| Regex | `/\Av\d+(\.\d+){0,2}\z/` | `v1`,`v2.1`,`v1.2.34` |
|
||||
| Regex | `/-release\z/` | `2.1-release`,`final-release` |
|
||||
| Regex | `/gitea/` | `gitea`,`2.1-gitea`,`1_gitea-release` |
|
||||
| Regex | `/\Agitea\z/` | 僅限 `gitea` |
|
||||
| Regex | `/^gitea$/` | 僅限 `gitea` |
|
||||
| Regex | `/\A(v\|rel)-/` | `v-`,`v-1`,`v-final`,`rel-`,`rel-x` |
|
||||
| Regex | `/.+/` | 匹配所有可能的標籤名稱 |
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"label": "Actions",
|
||||
"position": 30,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"slug": "/usage/actions",
|
||||
"description": "Automating workflows with Actions"
|
||||
}
|
||||
}
|
||||
@@ -1,102 +0,0 @@
|
||||
---
|
||||
date: "2023-05-24T15:00:00+08:00"
|
||||
slug: "comparison"
|
||||
sidebar_position: 15
|
||||
---
|
||||
|
||||
# 與GitHub Actions的對比
|
||||
|
||||
Gitea Actions 旨在與 GitHub Actions 相容,差異如下。
|
||||
|
||||
## 額外功能
|
||||
|
||||
<a id="absolute-action-urls"></a>
|
||||
### Action URL絕對路徑
|
||||
|
||||
`uses:` 接受指向任意 Git 主機的絕對 URL,例如 `uses: https://gitea.com/actions/checkout@v4`。
|
||||
|
||||
<a id="action-prefixes"></a>
|
||||
### Action 前綴
|
||||
|
||||
`uses:` 接受以下前綴:
|
||||
|
||||
- `self:` 參照您自己的 Gitea 實例,例如 `uses: self:owner/repo@v1` 或 `uses: self:owner/repo/.gitea/workflows/build.yml@v1`
|
||||
- `builtin:` 執行 Gitea Runner 內建的 Action,無需下載,Job 映像檔中也不需要 Node,例如 `uses: builtin:checkout`
|
||||
|
||||
`builtin:checkout` 支援 `actions/checkout` 的 `repository`、`ref`、`token`、`path` 和 `fetch-depth` 輸入,預設值相同,其他輸入會使步驟失敗。
|
||||
|
||||
<a id="workflow-relative-actions"></a>
|
||||
### 相對於工作流的 Actions
|
||||
|
||||
`$/` 參照工作流(或外層複合 Action)所在的儲存庫與提交,例如 `uses: $/.gitea/actions/build`。
|
||||
與 `./` 不同,它不需要事先簽出程式碼。
|
||||
|
||||
### 使用Go編寫Actions
|
||||
|
||||
請參閱[建立 Go Actions](https://blog.gitea.com/creating-go-actions/)。
|
||||
|
||||
### 支援非標準的調度語法 @yearly, @monthly, @weekly, @daily, @hourly
|
||||
|
||||
`schedule` 也接受 `@yearly`、`@monthly`、`@weekly`、`@daily` 和 `@hourly`,[GitHub 則不支援](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)。
|
||||
|
||||
## 不支援的工作流語法
|
||||
|
||||
### `jobs.<job_id>.environment`
|
||||
|
||||
[`jobs.<job_id>.environment`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment) 會被忽略。
|
||||
|
||||
### 複雜的`runs-on`
|
||||
|
||||
[`runs-on`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on) 支援:
|
||||
|
||||
- 靜態字串:`runs-on: self-hosted`
|
||||
- 標籤陣列:`runs-on: [linux, self-hosted]`
|
||||
- 字串表達式:`runs-on: ${{ github.event_name == 'push' && 'ubuntu-latest' || 'self-hosted' }}`
|
||||
- 包含表達式的陣列:`runs-on: [linux, "${{ github.event_name == 'push' && 'ubuntu-latest' || 'self-hosted' }}"]`
|
||||
|
||||
## 缺失的功能
|
||||
|
||||
### 套件儲存庫授權
|
||||
|
||||
`GITEA_TOKEN` 無法發佈到其所屬儲存庫的套件註冊表,例如無法推送 OCI 鏡像。
|
||||
請改用個人存取權杖,參見[這個工單](https://github.com/go-gitea/gitea/issues/23642#issuecomment-2119876692)。
|
||||
|
||||
### 問題匹配器
|
||||
|
||||
[問題匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)會被忽略。
|
||||
|
||||
### 為錯誤建立註釋
|
||||
|
||||
[錯誤註釋](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error)會被忽略。
|
||||
|
||||
### 表達式
|
||||
|
||||
[表達式](https://docs.github.com/en/actions/learn-github-actions/expressions)支援 GitHub 的標準函式與上下文。
|
||||
|
||||
## 缺失的UI功能
|
||||
|
||||
### 預處理和後處理步驟
|
||||
|
||||
預處理和後處理步驟在 Job 日誌中沒有各自獨立的區塊。
|
||||
|
||||
### 服務步驟
|
||||
|
||||
服務步驟在 Job 日誌中沒有各自獨立的區塊。
|
||||
|
||||
## 不一樣的行為
|
||||
|
||||
### `permissions`和`jobs.<job_id>.permissions`
|
||||
|
||||
`permissions` 和 `jobs.<job_id>.permissions` 控制 `GITEA_TOKEN` 的權限,其權限受儲存庫與所有者設定的限制,對於來自 fork 的拉取請求和跨儲存庫存取還會進一步受限。
|
||||
不支援 `statuses`、`checks`、`deployments`、`id-token`、`security-events` 和 `pages` 等 GitHub 專屬範圍,而 Gitea 另外提供 `code`、`releases`、`wiki` 和 `projects`。
|
||||
請參閱 [Actions Job 令牌權限](token-permissions.md)。
|
||||
|
||||
### 下載Actions
|
||||
|
||||
未指定主機的 Actions,例如 `uses: actions/checkout@v4`,會從 `https://github.com` 下載,若 `[actions].DEFAULT_ACTIONS_URL` 為 `self`,則從您自己的實例下載。
|
||||
請參閱[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。
|
||||
其他來源請參閱 [Action URL絕對路徑](#absolute-action-urls)、[Action 前綴](#action-prefixes)和[相對於工作流的 Actions](#workflow-relative-actions)。
|
||||
|
||||
### 上下文可用性
|
||||
|
||||
不檢查[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability),因此 `env` 等上下文可以在更多地方使用。
|
||||
@@ -1,99 +0,0 @@
|
||||
---
|
||||
date: "2023-05-24T15:00:00+08:00"
|
||||
slug: "design"
|
||||
sidebar_position: 40
|
||||
---
|
||||
|
||||
# Gitea Actions設計
|
||||
|
||||
Gitea Actions由多個元件組成。本文件將對它們進行逐個描述。
|
||||
|
||||
## Gitea Runner
|
||||
|
||||
Gitea Runner部分基於[nektos/act](https://github.com/nektos/act)的硬分支。
|
||||
|
||||
與其他CI Runner一樣,我們將其設計為Gitea的外部部分,這意味著它應該在與Gitea不同的伺服器上運行。
|
||||
|
||||
為了確保Runner連接到正確的Gitea實例,我們需要使用令牌註冊它。
|
||||
此外,Runner通過聲明自己的標籤向Gitea報告它可以運行的Job類型。
|
||||
|
||||
之前,我們提到工作流文件中的 `runs-on: ubuntu-latest` 表示該Job將在具有`ubuntu-latest`標籤的Runner上運行。
|
||||
但是,Runner如何知道要運行 `ubuntu-latest`?答案在於將標籤映射到環境。
|
||||
這就是為什麼Runner的每個標籤都指定了一個環境,比如`my_custom_label:docker://centos:7`。
|
||||
這意味著Runner可以接受需要在`my_custom_label`上運行的Job,並通過使用`centos:7`鏡像的Docker容器來運行它。
|
||||
|
||||
然而,Docker不是唯一的選擇。
|
||||
Runner 也支援直接在主機上運行Job。
|
||||
這是通過像`linux_arm:host`這樣的標籤實現的。
|
||||
這個標籤表示Runner可以接受需要在`linux_arm`上運行的Job,並直接在主機上運行它們。
|
||||
|
||||
標籤的設計遵循格式`label[:schema[:args]]`。
|
||||
如果省略了schema,則預設為`host`。
|
||||
|
||||
因此,
|
||||
|
||||
- `my_custom_label:docker://node:18`:使用`node:18 Docker`鏡像運行帶有`my_custom_label`標籤的Job。
|
||||
- `my_custom_label:host`:在主機上直接運行帶有`my_custom_label`標籤的Job。
|
||||
- `my_custom_label`:等同於`my_custom_label:host`。
|
||||
|
||||
## 通信協議
|
||||
|
||||
由於 runner 是Gitea的獨立部分,我們需要一種協議讓Runner與Gitea實例進行通信。
|
||||
然而,我們不認為讓Gitea監聽一個新端口是個好主意。
|
||||
相反,我們希望重用HTTP端口,這意味著我們需要一個與HTTP相容的協議。
|
||||
因此,我們選擇使用基於HTTP的gRPC。
|
||||
|
||||
協議定義於[actions-proto-def](https://gitea.com/gitea/actions-proto-def),其Go程式碼位於[actionslib](https://gitea.com/gitea/actionslib)。
|
||||
有關 gRPC 的更多資訊,請前往[其官方網站](https://grpc.io/)。
|
||||
|
||||
## 網路架構
|
||||
|
||||
讓我們來看一下整體的網路架構。
|
||||
這將幫助您解決一些問題,並解釋為什麼使用迴環地址註冊Runner是個不好的主意。
|
||||
|
||||

|
||||
|
||||
圖片中標記了四個網路連接,並且箭頭的方向表示建立連接的方向。
|
||||
|
||||
### 連接 1, runner到Gitea實例
|
||||
|
||||
Runner 必須能夠連接到Gitea以接收任務併發送執行結果回來。
|
||||
|
||||
### 連接 2,Job容器到Gitea實例
|
||||
|
||||
即使Job容器位於同一臺機器上,它們的網路命名空間與Runner不同。
|
||||
舉個例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要連接到Gitea來獲取程式碼。
|
||||
獲取程式碼並不總是運行某些Job所必需的,但在大多數情況下是必需的。
|
||||
|
||||
如果您使用迴環地址註冊Runner,當Runner與Gitea在同一臺機器上時,Runner可以連接到Gitea。
|
||||
然而,如果Job容器嘗試從本地主機獲取程式碼,它將失敗,因為Gitea不在同一個容器中。
|
||||
|
||||
### 連接 3,runner到互聯網
|
||||
|
||||
當您使用諸如 `actions/checkout@v4` 的一些Actions時,runner 下載的是腳本,而不是Job容器。
|
||||
預設情況下,它從[github.com](https://github.com/)下載,因此需要訪問互聯網。
|
||||
若將`DEFAULT_ACTIONS_URL`設定為`self`,或使用`uses: self:owner/repo@ref`,則改從您的Gitea實例下載。
|
||||
它還預設從Docker Hub下載一些Docker鏡像,這也需要互聯網訪問。
|
||||
|
||||
然而,互聯網訪問並不是絕對必需的。
|
||||
您可以設定您的Gitea實例從您的內部網路設施中獲取 Actions 或鏡像。
|
||||
|
||||
實際上,您的Gitea實例可以同時充當 Actions 市場和鏡像註冊表。
|
||||
您可以將GitHub上的Actions儲存庫鏡像到您的Gitea實例,並將其用作普通Actions。
|
||||
而 [Gitea 容器註冊表](usage/packages/container.md) 可用作Docker鏡像註冊表。
|
||||
|
||||
### 連接 4,Job容器到互聯網
|
||||
|
||||
當使用諸如`actions/setup-go@v5`的Actions時,可能需要從互聯網下載資源,以設定Job容器中的Go語言環境。
|
||||
因此,成功完成這些Actions需要訪問互聯網。
|
||||
|
||||
然而,這也是可選的。
|
||||
您可以使用自訂的Actions來避免依賴互聯網訪問,或者可以使用已安裝所有依賴項的打包的Docker鏡像來運行Job。
|
||||
|
||||
## 總結
|
||||
|
||||
使用Gitea Actions只需要確保Runner能夠連接到Gitea實例。
|
||||
互聯網訪問是可選的,但如果沒有互聯網訪問,將需要額外的工作。
|
||||
換句話說:當Runner能夠自行查詢互聯網時,它的工作效果最好,但您不需要將其暴露給互聯網(無論是單向還是雙向)。
|
||||
|
||||
如果您在使用Gitea Actions時遇到任何網路問題,希望上面的圖片能夠幫助您進行故障排除。
|
||||
@@ -1,120 +0,0 @@
|
||||
---
|
||||
date: "2023-05-24T15:00:00+08:00"
|
||||
slug: "faq"
|
||||
sidebar_position: 100
|
||||
---
|
||||
|
||||
# Gitea Actions常見問題解答
|
||||
|
||||
本頁面包含一些關於Gitea Actions的常見問題和答案。
|
||||
|
||||
## 是否可以在我的實例中預設禁用新儲存庫的Actions?
|
||||
|
||||
是的,當您為實例啟用Actions時,您可以選擇預設啟用actions單元以適用於所有新儲存庫。
|
||||
|
||||
```ini
|
||||
[repository]
|
||||
; 去掉 repo.actions 將不會為新倉庫自動啟用actions
|
||||
DEFAULT_REPO_UNITS = ...,repo.actions
|
||||
```
|
||||
|
||||
## 在工作流文件中應該使用`${{ github.xyz }}`還是`${{ gitea.xyz }}`?
|
||||
|
||||
您可以使用`github.xyz`,Gitea將正常工作。
|
||||
如前所述,Gitea Actions的設計是與GitHub Actions相容的。
|
||||
然而,我們建議在工作流文件中使用`gitea.xyz`,以防止在工作流文件中出現不同類型的密鑰(因為您在Gitea上使用此工作流,而不是GitHub)。
|
||||
不過,這完全是可選的,因為目前這兩個選項的效果是相同的。
|
||||
|
||||
## 使用`actions/checkout@v4`等Actions時,Job容器會從何處下載腳本?
|
||||
|
||||
預設從 `https://github.com` 下載,若 `[actions].DEFAULT_ACTIONS_URL` 為 `self`,則從您自己的實例下載,參見[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。
|
||||
|
||||
若要使用其他來源的 Action,請指定其主機:
|
||||
|
||||
- `uses: https://gitea.com/owner/repo@ref`
|
||||
- `uses: http://your_gitea_instance.com/owner/repo@ref`
|
||||
- `uses: self:owner/repo@ref`,用於您自己的 Gitea 實例
|
||||
|
||||
## 如何限制Runner的權限?
|
||||
|
||||
Runner 只會連接到您的 Gitea 實例。
|
||||
對於每個 Job,Runner 會取得一個僅限於該 Job 所屬儲存庫的 `GITEA_TOKEN`,參見 [Actions Job 令牌權限](token-permissions.md)。
|
||||
若要讓 Job 存取更多私有儲存庫或外部系統,請向其傳遞[密鑰](usage/actions/secrets.md)。
|
||||
|
||||
## 如何避免被黑客攻擊?
|
||||
|
||||
有兩種可能的攻擊類型:未知的Runner竊取您的儲存庫中的程式碼或密鑰,或惡意腳本控制您的Runner。
|
||||
|
||||
避免前者意味著不允許您不認識的人為您的儲存庫、組織或實例註冊Runner。
|
||||
|
||||
後者要複雜一些。
|
||||
如果您為公司使用私有的Gitea實例,您可能不需要擔心安全問題,因為您信任您的同事,並且可以追究他們的責任。
|
||||
|
||||
對於公共實例,情況略有不同。
|
||||
以下是我們在 [gitea.com](http://gitea.com/)上的做法:
|
||||
|
||||
- 我們僅為 "gitea" 組織註冊Runner,因此我們的Runner不會執行來自其他儲存庫的Job。
|
||||
- 我們的Runner始終在隔離容器中運行Job。雖然可以直接在主機上進行這樣的操作,但出於安全考慮,我們選擇不這樣做。
|
||||
- 對於 fork 的拉取請求,需要獲得批准才能運行Actions。參見[#22803](https://github.com/go-gitea/gitea/pull/22803)。
|
||||
- 如果有人在[gitea.com](http://gitea.com/)為其儲存庫或組織註冊自己的Runner,我們不會反對,只是不會在我們的組織中使用它。然而,他們應該注意確保該Runner不被他們不認識的其他使用者使用。
|
||||
|
||||
## runner支援哪些操作系統?
|
||||
|
||||
官方發佈了 Linux、macOS 和 Windows 的二進制檔案。
|
||||
理論上,Go 和 Docker 支援的其他系統也能運作。
|
||||
|
||||
## 為什麼選擇GitHub Actions?為什麼不選擇與GitLab CI/CD相容的工具?
|
||||
|
||||
[@lunny](https://gitea.com/lunny)在實現Actions的[問題](https://github.com/go-gitea/gitea/issues/13539)中已經解釋過這個問題。
|
||||
此外,Actions不僅是一個CI/CD 系統,還是一個自動化工具。
|
||||
|
||||
在開源世界中,已經有許多[市場上的Actions](https://github.com/marketplace?type=actions)實現了。
|
||||
能夠重用它們是令人興奮的。
|
||||
|
||||
## 如果它在多個標籤上運行,例如 `runs-on: [label_a, label_b]`,會發生什麼?
|
||||
|
||||
Job 會在具有所有這些標籤的 Runner 上運行,與 [GitHub](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on) 相同。
|
||||
Runner 會使用它所具有的第一個標籤對應的環境。
|
||||
|
||||
## 代理標籤和自訂標籤對於Runner有什麼區別?
|
||||
|
||||
Gitea 已不再有自訂標籤。
|
||||
Runner 每次啟動時都會宣告其標籤,標籤來自 `runner.labels` 設定或註冊時指定的標籤,因此請在那裡修改並重新啟動 Runner。
|
||||
|
||||
## Gitea Actions runner會有更多的實現嗎?
|
||||
|
||||
雖然我們希望提供更多的選擇,但由於我們有限的人力資源, runner將是唯一受支援的官方Runner。
|
||||
然而,無論您如何決定,Gitea 和 runner都是完全開源的,所以任何人都可以建立一個新的/更好的實現。
|
||||
我們支援您的選擇,無論您如何決定。
|
||||
如果您選擇分支 runner 來建立自己的版本,請在您認為您的更改對其他人也有幫助的情況下貢獻這些更改。
|
||||
|
||||
## Gitea 支援哪些工作流觸發事件?
|
||||
|
||||
表格中列出的所有事件都是支援的,並且與 GitHub 相容。
|
||||
對於僅 GitHub 支援的事件,請參閱 GitHub 的[文件](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows)。
|
||||
|
||||
| 觸發事件 | 活動類型 |
|
||||
|-----------------------------|--------------------------------------------------------------------------------------------------------------------------|
|
||||
| create | 不適用 |
|
||||
| delete | 不適用 |
|
||||
| fork | 不適用 |
|
||||
| gollum | 不適用 |
|
||||
| push | 不適用 |
|
||||
| issues | `opened`, `edited`, `closed`, `reopened`, `assigned`, `unassigned`, `milestoned`, `demilestoned`, `labeled`, `unlabeled` |
|
||||
| issue_comment | `created`, `edited`, `deleted` |
|
||||
| pull_request | `opened`, `edited`, `closed`, `reopened`, `assigned`, `unassigned`, `synchronize`, `labeled`, `unlabeled` |
|
||||
| pull_request_review | `submitted`, `edited` |
|
||||
| pull_request_review_comment | `created`, `edited` |
|
||||
| release | `published`, `edited` |
|
||||
| registry_package | `published` |
|
||||
|
||||
> 對於 `pull_request` 事件,在 [GitHub Actions](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request) 中 `ref` 是 `refs/pull/:prNumber/merge`,它指向這個拉取請求合併提交的一個預覽。但是 Gitea 沒有這種 reference。
|
||||
> 因此,Gitea Actions 中 `ref` 是 `refs/pull/:prNumber/head`,它指向這個拉取請求的頭分支而不是合併提交的預覽。
|
||||
|
||||
## 如何共享私有儲存庫中的 Actions 和可重複使用的工作流?
|
||||
|
||||
前往儲存庫的**設定** > **Actions** > **General** 頁面,添加協作所有者。
|
||||
協作所有者的私有儲存庫可以存取目前儲存庫中的 Actions 和工作流。
|
||||
|
||||
若要在同一使用者或組織內共享,請改為在該使用者或組織的**設定** > **Actions** > **General** > **Cross-Repository Access** 中添加這些私有儲存庫。
|
||||
參見[跨儲存庫存取](token-permissions.md#cross-repository-access)。
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
date: "2023-05-24T15:00:00+08:00"
|
||||
slug: "overview"
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Overview
|
||||
|
||||
從Gitea **1.19**版本開始,Gitea Actions成為了內置的CI/CD解決方案。
|
||||
|
||||
## 名稱
|
||||
|
||||
Gitea Actions與[GitHub Actions](https://github.com/features/actions)相似且相容,它的名稱也受到了它的啟發。
|
||||
為了避免混淆,在這裡我們明確了拼寫方式:
|
||||
|
||||
- "Gitea Actions"(兩個單詞都大寫且帶有"s")是Gitea功能的名稱。
|
||||
- "GitHub Actions"是GitHub功能的名稱。
|
||||
- "Actions"根據上下文的不同可以指代以上任意一個。在本文件中指代的是"Gitea Actions"。
|
||||
- "action"或"actions"指代一些要使用的腳本/外掛,比如"actions/checkout@v4"或"actions/cache@v3"。
|
||||
|
||||
## Runner
|
||||
|
||||
和其他CI/CD解決方案一樣,Gitea不會自己運行Job,而是將Job委託給Runner。
|
||||
Gitea Actions的Runner被稱為[Gitea Runner](https://gitea.com/gitea/runner),它是一個獨立的程式,也是用Go語言編寫的。
|
||||
它的重要部分來自[nektos/act](http://github.com/nektos/act)的一個硬分支。
|
||||
|
||||
由於Runner是獨立部署的,可能存在潛在的安全問題。
|
||||
為了避免這些問題,請遵循兩個簡單的規則:
|
||||
|
||||
- 不要為你的儲存庫、組織或實例使用你不信任的Runner。
|
||||
- 不要為你不信任的儲存庫、組織或實例提供Runner。
|
||||
|
||||
對於內部使用的Gitea實例,比如企業或個人使用的實例,這兩個規則不是問題,它們自然而然就是如此。
|
||||
然而,對於公共的Gitea實例,比如[gitea.com](https://gitea.com),在添加或使用Runner時應當牢記這兩個規則。
|
||||
|
||||
## 狀態
|
||||
|
||||
Gitea Actions仍然在開發中,因此可能存在一些錯誤和缺失的功能。
|
||||
並且在穩定版本(v1.20或更高版本)之前可能會進行一些重大的更改。
|
||||
|
||||
如果情況發生變化,我們將在此處進行更新。
|
||||
因此,請在其他地方找到過時文章時參考此處的內容。
|
||||
@@ -1,131 +0,0 @@
|
||||
---
|
||||
date: "2023-05-24T15:00:00+08:00"
|
||||
slug: "quickstart"
|
||||
sidebar_position: 10
|
||||
---
|
||||
|
||||
# 快速入門
|
||||
|
||||
本頁面將指導您使用Gitea Actions的過程。
|
||||
|
||||
## 設定Gitea
|
||||
|
||||
首先,您需要一個Gitea實例。
|
||||
您可以按照[文件](installation/from-package.md) 來設定一個新實例或升級現有實例。
|
||||
無論您如何安裝或運行Gitea,只要版本號是1.19.0或更高即可。
|
||||
|
||||
從1.21.0開始,預設情況下,Actions是啟用的。如果您正在使用1.21.0之前的版本,您需要將以下內容添加到設定文件中以啟用它:
|
||||
|
||||
```ini
|
||||
[actions]
|
||||
ENABLED=true
|
||||
```
|
||||
|
||||
如果您想了解更多資訊或在設定過程中遇到任何問題,請參考[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。
|
||||
|
||||
### 設定Runner
|
||||
|
||||
Gitea Actions需要[runner](https://gitea.com/gitea/runner) 來運行Job。
|
||||
為了避免消耗過多資源並影響Gitea實例,建議您在與Gitea實例分開的機器上啟動Runner。
|
||||
|
||||
您可以使用[預構建的二進制文件](http://dl.gitea.com/gitea-runner)或[容器鏡像](https://hub.docker.com/r/gitea/runner/tags)來設定Runner。
|
||||
|
||||
在進一步操作之前,建議您先使用預構建的二進制文件以命令行方式運行它,以確保它與您的環境相容,尤其是如果您在本地主機上運行Runner。
|
||||
如果出現問題,這樣調試起來會更容易。
|
||||
|
||||
該Runner可以在隔離的Docker容器中運行Job,因此您需要確保已安裝Docker並且Docker守護進程正在運行。
|
||||
雖然這不是嚴格必需的,因為Runner也可以直接在主機上運行Job,這取決於您的設定方式。
|
||||
然而,建議使用Docker運行Job,因為它更安全且更易於管理。
|
||||
|
||||
在運行Runner之前,您需要使用以下命令將其註冊到Gitea實例中:
|
||||
|
||||
```bash
|
||||
./runner register --no-interactive --instance <instance> --token <token>
|
||||
```
|
||||
|
||||
需要兩個必需的參數:`instance` 和 `token`。
|
||||
|
||||
`instance`是您的Gitea實例的地址,如`http://192.168.8.8:3000`或`https://gitea.com`。
|
||||
Runner和Job容器(由Runner啟動以執行Job)將連接到此地址。
|
||||
這意味著它可能與用於Web訪問的`ROOT_URL`不同。
|
||||
使用迴環地址(例如 `127.0.0.1` 或 `localhost`)是一個不好的選擇。
|
||||
如果不確定使用哪個地址,通常選擇局域網地址即可。
|
||||
|
||||
`token` 用於身份驗證和標識,例如 `P2U1U0oB4XaRCi8azcngmPCLbRpUGapalhmddh23`。
|
||||
它只能使用一次,並且不能用於註冊多個Runner。
|
||||
您可以從以下位置獲取不同級別的`token`,從而建立出相應級別的`runner`
|
||||
|
||||
- 實例級別:管理員設定頁面,例如 `<your_gitea.com>/admin/actions/runners`。
|
||||
- 組織級別:組織設定頁面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
|
||||
- 儲存庫級別:儲存庫設定頁面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
|
||||
|
||||

|
||||
|
||||
註冊後,當前目錄中將出現一個名為 `.runner` 的新文件,該文件儲存了註冊資訊。
|
||||
請不要手動編輯該文件。
|
||||
如果該文件丟失或損壞,只需刪除它然後重新註冊即可。
|
||||
|
||||
最後,是時候啟動Runner了:
|
||||
|
||||
```bash
|
||||
./runner daemon
|
||||
```
|
||||
|
||||
您可以在管理頁面上看到新的Runner:
|
||||
|
||||

|
||||
|
||||
您可以透過訪問[runner](runner) 獲取更多資訊。
|
||||
|
||||
### 使用Actions
|
||||
|
||||
即使對於啟用了Gitea實例的Actions,儲存庫仍預設禁用Actions。
|
||||
|
||||
要啟用它,請轉到儲存庫的設定頁面,例如`your_gitea.com/<owner>/repo/settings`,然後啟用`Enable Repository Actions`。
|
||||
|
||||

|
||||
|
||||
接下來的步驟可能相當複雜。
|
||||
您需要學習Actions的[工作流語法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions),並編寫您想要的工作流文件。
|
||||
|
||||
不過,我們可以從一個簡單的演示開始:
|
||||
|
||||
```yaml
|
||||
name: Gitea Actions Demo
|
||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
Explore-Gitea-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
|
||||
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
|
||||
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v4
|
||||
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
|
||||
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
|
||||
- name: List files in the repository
|
||||
run: |
|
||||
ls ${{ gitea.workspace }}
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
```
|
||||
|
||||
您可以將上述範例上傳為一個以`.yaml`擴展名的文件,放在儲存庫的`.gitea/workflows/`目錄中,例如`.gitea/workflows/demo.yaml`。
|
||||
您可能會注意到,這與[GitHub Actions的快速入門](https://docs.github.com/en/actions/quickstart)非常相似。
|
||||
這是因為Gitea Actions在儘可能相容GitHub Actions的基礎上進行設計。
|
||||
|
||||
請注意,演示文件中包含一些表情符號。
|
||||
請確保您的資料庫支援它們,特別是在使用MySQL時。
|
||||
如果字符集不是`utf8mb4`,將出現錯誤,例如`Error 1366 (HY000): Incorrect string value: '\\xF0\\x9F\\x8E\\x89 T...' for column 'name' at row 1`。
|
||||
有關更多資訊,請參閱[資料庫準備工作](../../installation/database-preparation.md#mysqlmariadb)。
|
||||
|
||||
或者,您可以從演示文件中刪除所有表情符號,然後再嘗試一次。
|
||||
|
||||
`on: [push]` 這一行表示當您向該儲存庫推送提交時,工作流將被觸發。
|
||||
然而,當您上傳 YAML 文件時,它也會推送一個提交,所以您應該在"Actions"標籤中看到一個新的任務。
|
||||
|
||||

|
||||
|
||||
做得好!您已成功開始使用Actions。
|
||||
@@ -1,57 +0,0 @@
|
||||
---
|
||||
date: "2023-05-24T15:00:00+08:00"
|
||||
slug: "runner"
|
||||
sidebar_position: 20
|
||||
aliases:
|
||||
- /zh-tw/act-runner
|
||||
---
|
||||
|
||||
# Gitea Runner
|
||||
|
||||
本頁面將介紹[Gitea Runner](https://gitea.com/gitea/runner),這是Gitea Actions的Runner。
|
||||
|
||||
:::tip
|
||||
詳細的安裝、設定和使用說明,請參閱 [Gitea Runner 文件](/runner/)。
|
||||
:::
|
||||
|
||||
## 獲取註冊令牌
|
||||
|
||||
### Runner級別
|
||||
|
||||
您可以在不同級別上註冊Runner,它可以是:
|
||||
|
||||
- 實例級別:Runner將為實例中的所有儲存庫運行Job。
|
||||
- 組織級別:Runner將為組織中的所有儲存庫運行Job。
|
||||
- 儲存庫級別:Runner將為其所屬的儲存庫運行Job。
|
||||
|
||||
請注意,即使儲存庫具有自己的儲存庫級別Runner,它仍然可以使用實例級別或組織級別Runner。未來的版本可能提供更多對此進行更好控制的選項。
|
||||
|
||||
Runner級別決定了從哪裡獲取註冊令牌。
|
||||
|
||||
- 實例級別:管理員設定頁面,例如 `<your_gitea.com>/admin/actions/runners`。
|
||||
- 組織級別:組織設定頁面,例如 `<your_gitea.com>/<org>/settings/actions/runners`。
|
||||
- 儲存庫級別:儲存庫設定頁面,例如 `<your_gitea.com>/<owner>/<repo>/settings/actions/runners`。
|
||||
|
||||
如果您無法看到設定頁面,請確保您具有正確的權限並且已啟用 Actions。
|
||||
|
||||
註冊令牌的格式是一個隨機字符串 `D0gvfu2iHfUjNqCYVljVyRV14fISpJxxxxxxxxxx`。
|
||||
|
||||
註冊令牌也可以透過 Gitea 的 [命令列](../../administration/command-line.md#actions-generate-runner-token) 獲得:
|
||||
|
||||
```
|
||||
gitea --config /etc/gitea/app.ini actions generate-runner-token
|
||||
```
|
||||
|
||||
使用者也可以使用 `GITEA_RUNNER_REGISTRATION_TOKEN` 或 `GITEA_RUNNER_REGISTRATION_TOKEN_FILE` 環境變量以在 Gitea 啟動時設定全域的註冊令牌,例如:
|
||||
|
||||
```
|
||||
openssl rand -hex 24 > /some-dir/runner-token
|
||||
export GITEA_RUNNER_REGISTRATION_TOKEN_FILE=/some-dir/runner-token
|
||||
./gitea --config ...
|
||||
```
|
||||
|
||||
來自環境變量的令牌在通過 Web 介面或 API 重置(重新建立新令牌)前將一直有效。
|
||||
|
||||
令牌可用於註冊多個 Runner,直到使用 Web 介面中的令牌重置鏈接將其撤銷並替換為新令牌。
|
||||
|
||||
獲取註冊令牌後,請參閱 [Gitea Runner 文件](/runner/) 了解如何安裝、設定和運行您的 Runner。
|
||||
@@ -1,119 +0,0 @@
|
||||
---
|
||||
date: "2026-06-26T00:00:00+00:00"
|
||||
slug: "scoped-workflows"
|
||||
sidebar_position: 60
|
||||
---
|
||||
|
||||
# 作用域工作流程
|
||||
|
||||
作用域工作流程(Scoped Workflows)讓你把 Actions 工作流程集中維護在一個**來源(source)**儲存庫中,並讓它們自動在許多其他儲存庫上執行,而無需把工作流程檔案複製到每個儲存庫裡。
|
||||
|
||||
提交到來源儲存庫作用域工作流程目錄下的工作流程檔案,會在該來源所適用的每個儲存庫(稱為**消費方(consuming)**儲存庫)上執行。每次執行都在**消費方儲存庫自身的環境**中進行:使用它的 runner、Secret、`GITEA_TOKEN` 和分支,而工作流程**內容則讀取自來源儲存庫**。這適用於在組織或實例範圍內強制推行共用 CI:程式碼檢查、安全掃描、合規或政策檢查等。
|
||||
|
||||
## 層級
|
||||
|
||||
來源儲存庫可以在兩個層級註冊:
|
||||
|
||||
- **擁有者層級(Owner level)**:由組織或使用者註冊。該來源的工作流程會在該組織或使用者擁有的每個儲存庫上執行。
|
||||
- **實例層級(Instance level)**:由網站管理員註冊。該來源的工作流程會在實例上的**每一個**儲存庫上執行。
|
||||
|
||||
同一個儲存庫可以同時在兩個層級註冊;對於每個符合的事件,它仍只會被評估一次。
|
||||
|
||||
:::note
|
||||
實例層級的來源適用於實例上的**每一個**儲存庫,且被設為必要(required)的來源無法被選擇退出(opt out)。偵測會在每個儲存庫的每次事件上執行。請審慎註冊。
|
||||
:::
|
||||
|
||||
## 設定
|
||||
|
||||
作用域工作流程存放在一個與一般工作流程分開的目錄中,由 `app.ini` 中 `[actions]` 區段的 `SCOPED_WORKFLOW_DIRS` 控制:
|
||||
|
||||
```ini
|
||||
[actions]
|
||||
SCOPED_WORKFLOW_DIRS = .gitea/scoped_workflows
|
||||
```
|
||||
|
||||
- 預設值為 `.gitea/scoped_workflows`。
|
||||
- 可以列出多個目錄(以逗號分隔)。
|
||||
- **不得與** `WORKFLOW_DIRS`(一般工作流程目錄,預設為 `.gitea/workflows` 和 `.github/workflows`)**重疊**。
|
||||
- 留空表示沒有任何目錄存放作用域工作流程,因此不會找到也不會執行任何作用域工作流程。設定頁面仍會顯示、來源仍可註冊,但不會有任何作用域工作流程執行。
|
||||
|
||||
把作用域工作流程放在它們自己的目錄中,表示來源儲存庫**自身**的 Actions 不受影響:只有 `SCOPED_WORKFLOW_DIRS` 下的檔案才會被當作作用域工作流程。
|
||||
|
||||
## 從一個儲存庫提供作用域工作流程
|
||||
|
||||
1. 在準備作為來源的儲存庫中,把工作流程檔案提交到其**預設分支**上的作用域工作流程目錄下,例如 `.gitea/scoped_workflows/lint.yaml`:
|
||||
|
||||
```yaml
|
||||
name: Lint
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: echo "lint the consuming repository here"
|
||||
```
|
||||
|
||||
2. 將該儲存庫註冊為來源:
|
||||
|
||||
- **組織**:*組織設定 -> Actions -> 作用域工作流程*
|
||||
- **使用者**:*使用者設定 -> Actions -> 作用域工作流程*
|
||||
- **實例(管理員)**:*網站管理 -> Actions -> 作用域工作流程*
|
||||
|
||||
搜尋並新增該儲存庫。此後,它的作用域工作流程便會適用於該層級下的消費方儲存庫。
|
||||
|
||||
來源儲存庫也在它自己的作用域內,因此它會像其他消費方一樣在自身上執行這些工作流程。
|
||||
|
||||
## 作用域工作流程如何執行
|
||||
|
||||
- 該執行屬於**消費方**儲存庫,使用它的 runner、Secret、`GITEA_TOKEN` 和 ref。它在那裡的行為與一般執行一致,包括重新執行、日誌和提交狀態。
|
||||
- 工作流程**內容讀取自來源**儲存庫,並釘選在事件發生時來源預設分支的 commit 上。
|
||||
- 偵測使用消費方儲存庫的事件,因此工作流程的 `on:` 觸發器(例如 `push` 和 `pull_request`)必須與該事件相符。
|
||||
|
||||
## 選擇退出(Opting out)
|
||||
|
||||
消費方儲存庫可以在其 **Actions** 頁面(該工作流程會顯示在其來源之下)停用一個它不想要的作用域工作流程。已被標記為**必要(required)**(見下文)的工作流程,消費方儲存庫永遠無法將其停用,也無法選擇退出。
|
||||
|
||||
## 必要工作流程與合併門檻
|
||||
|
||||
在作用域工作流程設定頁面上,你可以把個別工作流程標記為**必要(required)**,並為每個工作流程給定一個或多個**狀態檢查模式(status-check patterns)**(每行一個 glob)。一個必要的作用域工作流程:
|
||||
|
||||
- 無法被消費方儲存庫停用。
|
||||
- 會對合併請求(PR)形成合併門檻:消費方的 PR 只有在一個符合**每一個**模式的提交狀態都**通過**後才能合併(必須存在且通過,must-present-and-pass)。一個從不產生任何狀態的必要檢查會**阻擋**合併,而不是被靜默略過,因此在消費方停用 Actions 也無法繞過它。
|
||||
|
||||
作用域執行產生的狀態檢查 context 形如:
|
||||
|
||||
```
|
||||
<來源儲存庫全名>: <工作流程顯示名稱> / <job> (<event>)
|
||||
```
|
||||
|
||||
設定頁面會為每個工作流程預覽這些 “Expected status checks(預期狀態檢查)”,並標記出與你的模式相符的專案,便於你確認模式是否正確。一種常見模式是對 job 和 event 使用萬用字元,例如 `my-org/ci-repo: Lint / *`。
|
||||
|
||||
強制範圍:
|
||||
|
||||
- 必要檢查會在任何設有**分支保護規則**的目標分支上強制生效,即使該規則自身的狀態檢查處於關閉狀態。
|
||||
- **沒有**保護規則的目標分支不受門檻約束。
|
||||
|
||||
:::warning
|
||||
只有執行在會產生提交狀態的事件(`push`、`pull_request`、`pull_request_target`、`release`)上的工作流程才能被設為必要。僅執行在 `workflow_dispatch`、`schedule` 或 `workflow_call` 等事件上的工作流程不會產生任何狀態,因此把它設為必要會**永久**阻擋每一個消費方 PR 的合併。設定頁面在這種情況下會向你發出警告。
|
||||
:::
|
||||
|
||||
## 可重複使用的工作流程(`uses:`)
|
||||
|
||||
作用域工作流程可以呼叫可重複使用的工作流程:
|
||||
|
||||
- **本機**參照(`uses: ./...` 或 `uses: $/...`)會相對於**來源**儲存庫解析:即呼叫方工作流程內容的來源儲存庫,而非消費方儲存庫。
|
||||
- **跨儲存庫**參照(`uses: owner/repo/...@ref` 或 `uses: self:owner/repo/...@ref`)會以**消費方儲存庫的**讀取權限來解析。如果它指向一個私有儲存庫,請確保每個消費方儲存庫都能讀取它,否則工作流程會在那裡失敗。
|
||||
|
||||
可重複使用的工作流程可以放在來源儲存庫的 `SCOPED_WORKFLOW_DIRS`(或 `WORKFLOW_DIRS`)之下。
|
||||
|
||||
## 安全性注意事項
|
||||
|
||||
來源儲存庫的工作流程內容會在它所適用的每個儲存庫中執行,其步驟指令碼及其輸出會寫入該儲存庫的 Actions 日誌,任何能檢視消費方儲存庫 Actions 的人都能讀取這些日誌。
|
||||
|
||||
- 因此,將一個**私有**儲存庫註冊為來源,會透過這些日誌洩漏其工作流程邏輯。只應註冊那些其工作流程內容可以與每個消費方儲存庫共用的儲存庫。
|
||||
|
||||
## 限制
|
||||
|
||||
- 目前不支援將 `on: schedule` 和 `on: workflow_run` 作為作用域工作流程觸發器。
|
||||
- 作用域工作流程內容讀取自來源的預設分支;來源的其他分支不會被使用。
|
||||
@@ -1,28 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "secrets"
|
||||
sidebar_position: 50
|
||||
---
|
||||
|
||||
# 密鑰管理
|
||||
|
||||
密鑰管理允許您在使用者、組織或儲存庫中儲存敏感資訊。
|
||||
密鑰管理在 Gitea 1.19+ 版本中可用。
|
||||
|
||||
## 設定密鑰名稱
|
||||
|
||||
以下規則適用於密鑰名稱:
|
||||
|
||||
- 密鑰名稱只能包含字母數字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下劃線 (`_`)。不允許使用空格。
|
||||
|
||||
- 密鑰名稱不能以 `GITHUB_` 和 `GITEA_` 前綴開頭。
|
||||
|
||||
- 密鑰名稱不能以數字開頭。
|
||||
|
||||
- 密鑰名稱不區分大小寫。
|
||||
|
||||
- 密鑰名稱在建立它們的級別上必須是唯一的。
|
||||
|
||||
例如,對於在儲存庫級別建立的密鑰,它在該儲存庫中必須具有唯一的名稱;對於在組織級別建立的密鑰,它在該級別上必須具有唯一的名稱。
|
||||
|
||||
如果在多個級別上存在具有相同名稱的密鑰,則最低級別的密鑰優先生效。例如,如果組織級別的密鑰與儲存庫級別的密鑰具有相同的名稱,則儲存庫級別的密鑰將優先生效。
|
||||
@@ -1,126 +0,0 @@
|
||||
---
|
||||
date: "2026-03-19T00:00:00+01:00"
|
||||
slug: "token-permissions"
|
||||
sidebar_position: 30
|
||||
---
|
||||
|
||||
# Actions Job 令牌權限(`GITEA_TOKEN`)
|
||||
|
||||
每個 Actions Job 都會取得一個內建令牌(`GITEA_TOKEN`),可用於存取 Gitea(透過 HTTP(S) 使用 Git、API 請求等)。
|
||||
本頁說明 Gitea 如何決定該令牌可以執行哪些操作。
|
||||
|
||||
在工作流中,可以透過 `${{ secrets.GITEA_TOKEN }}` 使用它。這些設定和 `permissions:` 只影響 `GITEA_TOKEN`(不影響個人存取權杖等其他密鑰)。API 呼叫請參閱 [API 認證](../../development/api-usage.md#authentication)。
|
||||
|
||||
<a id="where-permissions-come-from"></a>
|
||||
## 權限的來源
|
||||
|
||||
Gitea 依以下順序決定 Job 令牌權限:
|
||||
|
||||
1. Job 層級的 `permissions:`(`jobs.<job_id>.permissions`)
|
||||
2. 工作流層級的 `permissions:`(頂層)
|
||||
3. 設定中的預設權限(所有者或儲存庫)
|
||||
|
||||
接著,結果會再受到所設定的最大令牌權限**限縮**(見下文)。
|
||||
|
||||
<a id="supported-workflow-syntax"></a>
|
||||
## 支援的工作流語法
|
||||
|
||||
Gitea 支援與 GitHub Actions 相容的 `permissions:` 關鍵字。
|
||||
|
||||
<a id="scalar-values"></a>
|
||||
### 純量值
|
||||
|
||||
```yaml
|
||||
permissions: read-all # or: write-all
|
||||
```
|
||||
|
||||
<a id="scoped-mapping"></a>
|
||||
### 依範圍對應
|
||||
|
||||
```yaml
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
pull-requests: none
|
||||
```
|
||||
|
||||
每個範圍的有效存取模式值為 `read`、`write` 和 `none`。
|
||||
|
||||
<a id="supported-scopes"></a>
|
||||
### 支援的範圍
|
||||
|
||||
- `contents`(適用於 `code` 和 `releases`)
|
||||
- `code`
|
||||
- `releases`
|
||||
- `issues`
|
||||
- `pull-requests`
|
||||
- `actions`
|
||||
- `wiki`
|
||||
- `projects`
|
||||
- `packages`(若目標功能支援)
|
||||
|
||||
如果同時指定 `contents` 和更細的範圍(例如 `code` 或 `releases`),該單元以更細的範圍為準。
|
||||
|
||||
<a id="compatibility-notes"></a>
|
||||
### 相容性說明
|
||||
|
||||
Gitea 支援 GitHub Actions 權限範圍的一個子集。
|
||||
Gitea Actions 目前不支援 `statuses`、`checks`、`deployments`、`id-token`、`security-events` 和 `pages` 等 GitHub 專屬範圍。
|
||||
|
||||
Gitea 另外提供一些儲存庫單元範圍,它們在 GitHub Actions 中並不是獨立的範圍:
|
||||
|
||||
- `code`
|
||||
- `releases`
|
||||
- `wiki`
|
||||
- `projects`
|
||||
|
||||
<a id="default-permission-mode"></a>
|
||||
## 預設權限模式
|
||||
|
||||
如果工作流和 Job 都沒有定義 `permissions:`,Gitea 會使用所設定的預設模式:
|
||||
|
||||
- **Permissive**(寬鬆):對 Job 所屬儲存庫的大多數單元具有讀取和寫入權限(向下相容的預設值)。
|
||||
- **受限**(Restricted):對 Job 所屬儲存庫的 `code`、`releases` 和 `packages` 具有唯讀權限,預設無法存取其他單元。
|
||||
|
||||
<a id="maximum-token-permissions-clamping"></a>
|
||||
## 最大令牌權限(限縮)
|
||||
|
||||
您可以為每個儲存庫單元設定最大權限。
|
||||
Job 的實際權限計算方式如下:
|
||||
|
||||
`effective = min(requested, maximum)`
|
||||
|
||||
也就是說,工作流可以降低 Job 的權限,但不能超過您所設定的最大值。
|
||||
如果未設定最大值,所有範圍的最大值預設為 `write`。
|
||||
|
||||
<a id="where-to-configure"></a>
|
||||
## 設定位置
|
||||
|
||||
您可以在以下位置設定預設值和最大值:
|
||||
|
||||
- **使用者 / 組織**:`Settings` → `Actions` → `General`
|
||||
- **儲存庫**:`Settings` → `Actions` → `General`
|
||||
- 對於組織內的儲存庫,儲存庫可以沿用所有者層級的設定,或透過 **Override owner-level configuration** 選擇退出。
|
||||
|
||||
注意:只有在啟用**儲存庫 Actions** 後,才會顯示儲存庫層級的令牌權限設定。
|
||||
|
||||
<a id="fork-pull-requests"></a>
|
||||
## 來自 fork 的拉取請求
|
||||
|
||||
基於安全考量,由來自 fork 的拉取請求觸發的工作流,對儲存庫內容一律只有唯讀權限,不受工作流 `permissions:` 或設定影響。
|
||||
|
||||
<a id="cross-repository-access"></a>
|
||||
## 跨儲存庫存取
|
||||
|
||||
預設情況下,`GITEA_TOKEN` 只能存取:
|
||||
|
||||
- Job 所屬的儲存庫(依計算出的權限)
|
||||
- 公開儲存庫(唯讀)
|
||||
|
||||
預設會拒絕存取其他私有儲存庫。
|
||||
使用者或組織可以在**設定** > **Actions** > **General** > **Cross-Repository Access** 中,允許唯讀存取選定的私有儲存庫。
|
||||
|
||||
私有儲存庫也可以在**設定** > **Actions** > **General** 中允許選定的協作所有者。
|
||||
這樣,這些所有者的私有儲存庫就能為了 Actions 用途讀取目前的私有儲存庫,例如私有 Actions 和可重複使用的工作流。
|
||||
|
||||
由來自 fork 的拉取請求觸發的工作流,永遠無法取得對私有儲存庫的跨儲存庫存取權,即使這些儲存庫已列入清單也一樣。
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
date: "2024-04-10T22:21:00+08:00"
|
||||
slug: "actions-variables"
|
||||
sidebar_position: 25
|
||||
---
|
||||
|
||||
# 變量
|
||||
|
||||
您可以建立使用者、組織和儲存庫級別的變量。變量的級別取決於建立它的位置。當建立變量時,變量的名稱會被
|
||||
轉換為大寫,在yaml文件中引用時需要使用大寫。
|
||||
|
||||
## 命名規則
|
||||
|
||||
以下規則適用於變量名:
|
||||
|
||||
- 變量名稱只能包含字母數字字符 (`[a-z]`, `[A-Z]`, `[0-9]`) 或下劃線 (`_`)。不允許使用空格。
|
||||
- 變量名稱不能以 `GITHUB_` 和 `GITEA_` 前綴開頭。
|
||||
- 變量名稱不能以數字開頭。
|
||||
- 變量名稱不區分大小寫。
|
||||
- 變量名稱在建立它們的級別上必須是唯一的。
|
||||
- 變量名稱不能為 `CI`。
|
||||
|
||||
## 使用
|
||||
|
||||
建立設定變量後,它們將自動填充到 `vars` 上下文中。您可以在工作流中使用類似 `${{ vars.VARIABLE_NAME }}` 這樣的表達式來使用它們。
|
||||
|
||||
## 優先級
|
||||
|
||||
如果同名變量存在於多個級別,則級別最低的變量優先。
|
||||
儲存庫級別的變量總是比組織或者使用者級別的變量優先被選中。
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "agit"
|
||||
sidebar_position: 12
|
||||
aliases:
|
||||
- /zh-tw/agit-setup
|
||||
---
|
||||
|
||||
# AGit
|
||||
|
||||
在 Gitea `1.13` 版本中,添加了對 [AGit](https://git-repo.info/zh/2020/03/agit-flow-and-git-repo/) 的支援。AGit 允許使用者在沒有儲存庫寫入權限的情況下直接建立拉取請求,也不需要分叉儲存庫。這有助於減少重複儲存庫的數量,降低不必要的磁盤使用量。
|
||||
|
||||
:::note
|
||||
伺服器端需要 Git 版本 2.29 或更高版本才能正常運行。
|
||||
:::
|
||||
|
||||
## 使用 AGit 建立 PR
|
||||
|
||||
AGit 允許在推送程式碼到遠程儲存庫時建立 PR(合併請求)。
|
||||
通過在推送時使用特定的 refspec(git 中已知的位置標識符),可以實現這一功能。
|
||||
下面的範例說明了這一點:
|
||||
|
||||
```shell
|
||||
git push origin HEAD:refs/for/main
|
||||
```
|
||||
|
||||
該命令的結構如下:
|
||||
|
||||
- `HEAD`:目標分支
|
||||
- `refs/<for|draft|for-review>/<branch>`:目標 PR 類型
|
||||
- `for`:建立一個以 `<branch>` 為目標分支的普通 PR
|
||||
- `draft`/`for-review`:目前被靜默忽略
|
||||
- `<branch>/<session>`:要打開 PR 的目標分支
|
||||
- `-o <topic|title|description>`:PR 的選項
|
||||
- `title`:PR 的標題
|
||||
- `topic`:PR 應該打開的分支名稱
|
||||
- `description`:PR 的描述
|
||||
- `force-push=true`: 是否強制更新目標分支
|
||||
- 注意: 如果不傳值,只用 `-o force-push` 也同樣可以正常工作。
|
||||
|
||||
下面是另一個高級範例,用於建立一個以 `topic`、`title` 和 `description` 為參數的新 PR,目標分支是 `main`:
|
||||
|
||||
```shell
|
||||
git push origin HEAD:refs/for/main -o topic="Topic of my PR" -o title="Title of the PR" -o description="# The PR Description\nThis can be **any** markdown content.\n- [x] Ok"
|
||||
```
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"label": "Issues & Pull Requests",
|
||||
"position": 20,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"slug": "/usage/issues-prs",
|
||||
"description": "Issues and Pull Requests workflow, templates, and collaboration features"
|
||||
}
|
||||
}
|
||||
-283
@@ -1,283 +0,0 @@
|
||||
---
|
||||
date: "2022-09-07T16:00:00+08:00"
|
||||
slug: "issue-pull-request-templates"
|
||||
sidebar_position: 15
|
||||
toc: true
|
||||
aliases:
|
||||
- /zh-tw/issue-pull-request-templates
|
||||
---
|
||||
|
||||
# 從模板建立工單與合併請求
|
||||
|
||||
開發者可以利用問題模板建立工單與合併請求,其目的在於規範參與者的語言表達。
|
||||
|
||||
## 模板介紹
|
||||
|
||||
Gitea 支援兩種格式的模板:Markdown 和 YAML。
|
||||
|
||||
### Markdown 模板
|
||||
|
||||
在 Gitea 中存在兩種用途的 Markdown 模板:
|
||||
|
||||
- `ISSUE_TEMPLATE/bug-report.md` 用於規範工單的 Markdown 文本描述
|
||||
- `PULL_REQUEST_TEMPLATE.md` 用於規範合併請求的 Markdown 文本描述
|
||||
|
||||
對於以上 Markdown 模板,我們推薦您將它們放置到專案目錄 `.gitea` 進行收納。
|
||||
|
||||
### YAML 模板
|
||||
|
||||
用 YAML 語法編寫的模板相比 Markdown 可以實現更豐富的功能,利用表單實現諸如:問卷調查、字符校驗。在 Gitea 中的 YAML 同樣支援兩種用途:
|
||||
|
||||
- `ISSUE_TEMPLATE/bug-report.yaml` 用於建立問卷調查形式的工單
|
||||
- `PULL_REQUEST_TEMPLATE.yaml` 用於建立表單形式的合併請求
|
||||
|
||||
對於以上 YAML 模板,我們同樣推薦您將它們放置到專案目錄 `.gitea` 進行收納。
|
||||
|
||||
##### 表單支援通過 URL 查詢參數傳值
|
||||
|
||||
當新建工單頁面 URL 以 `?title=Issue+Title&body=Issue+Text` 為查詢參數,表單將使用其中的參數(key-value)填充表單內容。
|
||||
|
||||
### Gitea 支援的模板文件路徑
|
||||
|
||||
工單模板文件名:
|
||||
|
||||
- `ISSUE_TEMPLATE.md`
|
||||
- `ISSUE_TEMPLATE.yaml`
|
||||
- `ISSUE_TEMPLATE.yml`
|
||||
- `issue_template.md`
|
||||
- `issue_template.yaml`
|
||||
- `issue_template.yml`
|
||||
- `.gitea/ISSUE_TEMPLATE.md`
|
||||
- `.gitea/ISSUE_TEMPLATE.yaml`
|
||||
- `.gitea/ISSUE_TEMPLATE.yml`
|
||||
- `.gitea/issue_template.md`
|
||||
- `.gitea/issue_template.yaml`
|
||||
- `.gitea/issue_template.yml`
|
||||
- `.github/ISSUE_TEMPLATE.md`
|
||||
- `.github/ISSUE_TEMPLATE.yaml`
|
||||
- `.github/ISSUE_TEMPLATE.yml`
|
||||
- `.github/issue_template.md`
|
||||
- `.github/issue_template.yaml`
|
||||
- `.github/issue_template.yml`
|
||||
|
||||
合併請求模板:
|
||||
|
||||
- `PULL_REQUEST_TEMPLATE.md`
|
||||
- `PULL_REQUEST_TEMPLATE.yaml`
|
||||
- `PULL_REQUEST_TEMPLATE.yml`
|
||||
- `pull_request_template.md`
|
||||
- `pull_request_template.yaml`
|
||||
- `pull_request_template.yml`
|
||||
- `.gitea/PULL_REQUEST_TEMPLATE.md`
|
||||
- `.gitea/PULL_REQUEST_TEMPLATE.yaml`
|
||||
- `.gitea/PULL_REQUEST_TEMPLATE.yml`
|
||||
- `.gitea/pull_request_template.md`
|
||||
- `.gitea/pull_request_template.yaml`
|
||||
- `.gitea/pull_request_template.yml`
|
||||
- `.github/PULL_REQUEST_TEMPLATE.md`
|
||||
- `.github/PULL_REQUEST_TEMPLATE.yaml`
|
||||
- `.github/PULL_REQUEST_TEMPLATE.yml`
|
||||
- `.github/pull_request_template.md`
|
||||
- `.github/pull_request_template.yaml`
|
||||
- `.github/pull_request_template.yml`
|
||||
|
||||
#### 工單模板目錄
|
||||
|
||||
由於工單存在多種類型,Gitea 支援將工單模板統一收納到 `ISSUE_TEMPLATE` 目錄。以下是 Gitea 支援的工單模板目錄:
|
||||
|
||||
- `ISSUE_TEMPLATE`
|
||||
- `issue_template`
|
||||
- `.gitea/ISSUE_TEMPLATE`
|
||||
- `.gitea/issue_template`
|
||||
- `.github/ISSUE_TEMPLATE`
|
||||
- `.github/issue_template`
|
||||
- `.gitlab/ISSUE_TEMPLATE`
|
||||
- `.gitlab/issue_template`
|
||||
|
||||
目錄支援混合存放 Markdown (`.md`) 或 YAML (`.yaml`/`.yml`) 格式的工單模板。另外,合併請求模板不支援目錄存放。
|
||||
|
||||
## Markdown 模板語法
|
||||
|
||||
```md
|
||||
---
|
||||
name: "Template Name"
|
||||
about: "This template is for testing!"
|
||||
title: "[TEST] "
|
||||
ref: "main"
|
||||
labels:
|
||||
- bug
|
||||
- "help needed"
|
||||
---
|
||||
|
||||
This is the template!
|
||||
```
|
||||
|
||||
上面的範例表示使用者從列表中選擇一個工單模板時,列表會展示模板名稱 `Template Name` 和模板描述 `This template is for testing!`。 同時,標題會預先填充為 `[TEST]`,而正文將預先填充 `This is the template!`。該 Issue 會被指派給 `user1`。 最後,Issue 還會被分配兩個標籤,`bug` 和 `help needed`,並且將問題指向 `main` 分支。
|
||||
|
||||
## YAML 模板語法
|
||||
|
||||
YAML 模板格式如下,相比 Markdown 模板提供了更多實用性的功能。
|
||||
|
||||
```yaml
|
||||
name: 表單名稱
|
||||
about: 表單描述
|
||||
title: 默認標題
|
||||
body: 主體內容
|
||||
type: 定義表單元素類型
|
||||
id: 定義表單標號
|
||||
attributes: 擴展的屬性
|
||||
validations: 內容校驗
|
||||
```
|
||||
|
||||
下例 YAML 設定文件完整定義了一個用於提交 bug 的問卷調查。
|
||||
|
||||
```yaml
|
||||
name: Bug Report
|
||||
about: File a bug report
|
||||
title: "[Bug]: "
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report!
|
||||
- type: input
|
||||
id: contact
|
||||
attributes:
|
||||
label: Contact Details
|
||||
description: How can we get in touch with you if we need more info?
|
||||
placeholder: ex. [email protected]
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: What happened?
|
||||
description: Also tell us, what did you expect to happen?
|
||||
placeholder: Tell us what you see!
|
||||
value: "A bug happened!"
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: version
|
||||
attributes:
|
||||
label: Version
|
||||
description: What version of our software are you running?
|
||||
options:
|
||||
- 1.0.2 (Default)
|
||||
- 1.0.3 (Edge)
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: browsers
|
||||
attributes:
|
||||
label: What browsers are you seeing the problem on?
|
||||
multiple: true
|
||||
options:
|
||||
- Firefox
|
||||
- Chrome
|
||||
- Safari
|
||||
- Microsoft Edge
|
||||
- type: textarea
|
||||
id: logs
|
||||
attributes:
|
||||
label: Relevant log output
|
||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||
render: shell
|
||||
- type: checkboxes
|
||||
id: terms
|
||||
attributes:
|
||||
label: Code of Conduct
|
||||
description: By submitting this issue, you agree to follow our [Code of Conduct](https://example.com)
|
||||
options:
|
||||
- label: I agree to follow this project's Code of Conduct
|
||||
required: true
|
||||
```
|
||||
|
||||
### Markdown 段落
|
||||
|
||||
您可以在 YAML 模板中使用 `markdown` 元素為開發者提供額外的上下文支撐,這部分內容會作為建立工單的提示但不會作為工單內容提交。
|
||||
|
||||
`attributes` 子項提供了以下擴展能力:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ------- | ------------------------------ | ---- | ------ | ------ | ------ |
|
||||
| `value` | 渲染的文本。支援 Markdown 格式 | 必選 | 字符串 | - | - |
|
||||
|
||||
### Textarea 多行文本輸入框
|
||||
|
||||
您可以使用 `textarea` 元素在表單中添加多行文本輸入框。 除了輸入文本,開發者還可以在 `textarea` 區域附加文件。
|
||||
|
||||
`attributes` 子項提供了以下擴展能力:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ------------- | ----------------------------------------------------------------------------------------------------- | ---- | ------ | -------- | ------------------ |
|
||||
| `label` | 預期使用者輸入的簡短描述,也以表單形式顯示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指導的文本區域的描述,以表單形式顯示。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `placeholder` | 半透明的佔位符,在文本區域空白時呈現 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `value` | 在文本區域中預填充的文本。 | 可選 | 字符串 | - | - |
|
||||
| `render` | 如果提供了值,提交的文本將格式化為程式碼塊。 提供此鍵時,文本區域將不會擴展到文件附件或 Markdown 編輯。 | 可選 | 字符串 | - | Gitea 支援的語言。 |
|
||||
|
||||
`validations` 子項提供以下文本校驗參數:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ---------- | ---------------------------- | ---- | ------ | ------ | ------ |
|
||||
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布爾型 | false | - |
|
||||
|
||||
### Input 單行輸入框
|
||||
|
||||
您可以使用 `input` 元素添加單行文本欄位到表單。
|
||||
|
||||
`attributes` 子項提供了以下擴展能力:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ------------- | ---------------------------------------------- | ---- | ------ | -------- | ------ |
|
||||
| `label` | 預期使用者輸入的簡短描述,也以表單形式顯示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指導的欄位的描述,以表單形式顯示。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `placeholder` | 半透明的佔位符,在欄位空白時呈現。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `value` | 欄位中預填的文本。 | 可選 | 字符串 | - | - |
|
||||
|
||||
`validations` 子項提供以下文本校驗參數:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ----------- | -------------------------------- | ---- | ------ | ------ | -------------------------------------------------------------- |
|
||||
| `required` | 防止在未填內容時提交表單。 | 可選 | 布爾型 | false | - |
|
||||
| `is_number` | 防止在未填數字時提交表單。 | 可選 | 布爾型 | false | - |
|
||||
| `regex` | 直到滿足了與正則表達式匹配的值。 | 可選 | 字符串 | - | [正則表達式](https://en.wikipedia.org/wiki/Regular_expression) |
|
||||
|
||||
### Dropdown 下拉菜單
|
||||
|
||||
您可以使用 `dropdown` 元素在表單中添加下拉菜單。
|
||||
|
||||
`attributes` 子項提供了以下擴展能力:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ------------- | --------------------------------------------------------- | ---- | ---------- | -------- | ------ |
|
||||
| `label` | 預期使用者輸入的簡短描述,以表單形式顯示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 提供上下文或指導的下拉列表的描述,以表單形式顯示。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `multiple` | 確定使用者是否可以選擇多個選項。 | 可選 | 布爾型 | false | - |
|
||||
| `options` | 使用者可以選擇的選項列表。 不能為空,所有選擇必須是不同的。 | 必選 | 字符串數組 | - | - |
|
||||
|
||||
`validations` 子項提供以下文本校驗參數:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ---------- | ---------------------------- | ---- | ------ | ------ | ------ |
|
||||
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布爾型 | false | - |
|
||||
|
||||
### Checkboxes 複選框
|
||||
|
||||
您可以使用 `checkboxes` 元素添加一組複選框到表單。
|
||||
|
||||
`attributes` 子項提供了以下擴展能力:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ------------- | ----------------------------------------------------- | ---- | ------ | -------- | ------ |
|
||||
| `label` | 預期使用者輸入的簡短描述,以表單形式顯示。 | 必選 | 字符串 | - | - |
|
||||
| `description` | 複選框集的描述,以表單形式顯示。 支援 Markdown 格式。 | 可選 | 字符串 | 空字符串 | - |
|
||||
| `options` | 使用者可以選擇的複選框列表。 有關語法,請參閱下文。 | 必選 | 數組 | - | - |
|
||||
|
||||
對於 `options`,您可以設定以下參數:
|
||||
|
||||
| 鍵 | 描述 | 必選 | 類型 | 預設值 | 有效值 |
|
||||
| ---------- | --------------------------------------------------------------------------------- | ---- | ------ | ------ | ------ |
|
||||
| `label` | 選項的標識符,顯示在表單中。 支援 Markdown 用於粗體或斜體文本格式化和超文本鏈接。 | 必選 | 字符串 | - | - |
|
||||
| `required` | 防止在元素完成之前提交表單。 | 可選 | 布爾型 | false | - |
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "labels"
|
||||
sidebar_position: 13
|
||||
aliases:
|
||||
- /zh-tw/labels
|
||||
---
|
||||
|
||||
# 標籤
|
||||
|
||||
您可以使用標籤對工單和合併請求進行分類,並提高對它們的概覽。
|
||||
|
||||
## 建立標籤
|
||||
|
||||
對於儲存庫,可以在 `工單(Issues)` 中點擊 `標籤(Labels)` 來建立標籤。
|
||||
|
||||
對於組織,您可以定義組織級別的標籤,這些標籤與所有組織儲存庫共享,包括已存在的儲存庫和新建立的儲存庫。可以在組織的 `設定(Settings)` 中建立組織級別的標籤。
|
||||
|
||||
標籤具有必填的名稱和顏色,可選的描述,以及必須是獨佔的或非獨佔的(見下面的“作用域標籤”)。
|
||||
|
||||
當您建立一個儲存庫時,可以透過使用 `工單標籤(Issue Labels)` 選項來選擇標籤集。該選項列出了一些在您的實例上 [全域設定的可用標籤集](../../administration/customizing-gitea.md)。在建立儲存庫時,這些標籤也將被建立。
|
||||
|
||||
## 作用域標籤
|
||||
|
||||
作用域標籤用於確保將至多一個具有相同作用域的標籤分配給工單或合併請求。例如,如果標籤 `kind/bug` 和 `kind/enhancement` 的獨佔選項被設定,那麼工單隻能被分類為 bug 或 enhancement 中的一個。
|
||||
|
||||
作用域標籤的名稱必須包含 `/`(不能在名稱的任一端)。標籤的作用域是基於最後一個 `/` 決定的,因此例如標籤 `scope/subscope/item` 的作用域是 `scope/subscope`。
|
||||
|
||||
## 按標籤篩選
|
||||
|
||||
工單和合併請求列表可以按標籤進行篩選。選擇多個標籤將顯示具有所有選定標籤的工單和合併請求。
|
||||
|
||||
按住 alt 鍵並點擊標籤,可以將具有所選標籤的工單和合併請求從列表中排除。
|
||||
-143
@@ -1,143 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "automatically-linked-references"
|
||||
sidebar_position: 15
|
||||
aliases:
|
||||
- /zh-tw/automatically-linked-references
|
||||
---
|
||||
|
||||
# 自動鏈接引用
|
||||
|
||||
當發佈工單、合併請求或評論時,文本描述會被解析以查找引用。這些引用將顯示為工單視圖中的鏈接,並且在某些情況下會觸發特定的“操作”。
|
||||
|
||||
類似地,當列出提交消息時,它們也會被解析,並且當它們被推送到主分支時可以觸發“操作”。
|
||||
|
||||
為了防止意外建立引用,對於引用的識別有一定的規則。例如,它們不應該包含在程式碼文本內部。它們還應該在周圍的文本中合理清晰(例如,使用空格)。
|
||||
|
||||
## 使用者、團隊和組織提及
|
||||
|
||||
當找到形式為 `@username` 的文本,並且 `username` 與現有使用者的名稱匹配時,將建立一個“提及”引用。這將通過將文本更改為指向該使用者個人資料的鏈接來顯示,並根據被提及的使用者是否具有訪問內容所需的權限來可能建立通知。
|
||||
|
||||
範例:
|
||||
|
||||
> [@John](#),你能看一下這個嗎?
|
||||
|
||||
對於團隊和組織也是有效的:
|
||||
|
||||
> [@Documenters](#),我們需要為此進行規劃。
|
||||
> [@CoolCompanyInc](#),這個問題關係到我們所有人!
|
||||
|
||||
團隊將在適當時收到郵件通知,但整個組織不會收到通知。
|
||||
|
||||
提交消息不會產生使用者通知。
|
||||
|
||||
## 提交
|
||||
|
||||
可以使用提交的 SHA1 哈希或至少七個字符的一部分來引用提交。它們將顯示為指向相應提交的鏈接。
|
||||
|
||||
範例:
|
||||
|
||||
> 這個錯誤是在 [e59ff077](#) 中引入的
|
||||
|
||||
## 工單和合併請求
|
||||
|
||||
可以使用簡單的符號 `#1234` 來建立對另一個工單或合併請求的引用,其中 _1234_ 是同一儲存庫中一個工單或合併請求的編號。這些引用將顯示為指向被引用內容的鏈接。
|
||||
|
||||
建立此類型引用的效果是,在被引用的文件中建立一個“通知”,前提是引用的建立者對其具有讀取權限。
|
||||
|
||||
範例:
|
||||
|
||||
> 這似乎與 [#1234](#) 相關
|
||||
|
||||
還可以使用形式 `owner/repository#1234` 來引用其他儲存庫中的工單和合併請求:
|
||||
|
||||
> 這似乎與 [mike/compiler#1234](#) 相關
|
||||
|
||||
或者也可以使用 `!1234` 符號。雖然在 Gitea 中合併請求是工單的一種形式,但 `#1234` 形式總是鏈接到工單;如果鏈接的條目恰好是一個合併請求,Gitea 會適當地進行重定向。而使用 `!1234` 符號,則會建立一個合併請求鏈接,根據需要會被重定向到工單。然而,如果使用外部跟蹤器,這個區別可能很重要,因為工單和合併請求的鏈接是不能互換的。
|
||||
|
||||
## 可操作的引用在合併請求和提交消息中
|
||||
|
||||
有時,一個提交或合併請求可能會修復或重新出現在某個特定工單中。Gitea 支援在引用之前加上特定的“關鍵字”來關閉和重新打開被引用的工單。常見的關鍵字包括“closes”、“fixes”、“reopens”等。這個列表可以由站點管理員進行 [自訂](../../administration/config-cheat-sheet)。
|
||||
|
||||
範例:
|
||||
|
||||
> 這個合併請求 _closes_ [#1234](#)
|
||||
|
||||
如果可操作的引用被接受,這將在被引用的工單上建立一個通知,宣佈當引用的合併請求被合併時該工單將被關閉。
|
||||
|
||||
為了接受可操作的引用,必須滿足以下至少一項條件之一:
|
||||
|
||||
- 評論者在建立引用時具有關閉或重新打開工單的權限。
|
||||
- 引用位於提交消息中。
|
||||
- 引用作為合併請求描述的一部分發布。
|
||||
|
||||
在最後一種情況下,只有當合併合併請求的人具有相應權限時,工單纔會被關閉或重新打開。
|
||||
|
||||
此外,只有合併請求和提交消息可以建立一個操作,只有工單可以透過這種方式被關閉或重新打開。
|
||||
|
||||
預設的關鍵字如下:
|
||||
|
||||
- **關閉工單**: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved
|
||||
- **重新打開工單**: reopen, reopens, reopened
|
||||
|
||||
## 合併請求和提交消息中的時間跟蹤
|
||||
|
||||
當提交或合併合併請求導致自動關閉工單時,還可以透過提交消息添加解決此工單所花費的時間。
|
||||
|
||||
要指定解決工單所花費的時間,需要在工單編號後面以 `@<number><time-unit>` 的格式指定時間。在一個提交消息中,可以指定多個已解決的工單,併為每個工單指定花費的時間。
|
||||
|
||||
支援的時間單位(`<time-unit>`):
|
||||
|
||||
- `m` - 分鐘
|
||||
- `h` - 小時
|
||||
- `d` - 天(相當於 8 小時)
|
||||
- `w` - 周(相當於 5 天)
|
||||
- `mo` - 月(相當於 4 周)
|
||||
|
||||
用於指定時間的數字(`<number>`)也可以是小數,例如 `@1.5h` 表示一小時半。多個時間單位可以結合使用,例如 `@1h10m` 表示 1 小時 10 分鐘。
|
||||
|
||||
提交消息範例:
|
||||
|
||||
> Fixed #123 spent @1h, refs #102, fixes #124 @1.5h
|
||||
|
||||
這將導致工單 #123 增加 1 小時,工單 #124 增加 1 小時半。
|
||||
|
||||
## 外部跟蹤器
|
||||
|
||||
Gitea 支援使用外部工單跟蹤器,並可以在合併請求中建立對外部託管的工單的引用。但是,如果外部跟蹤器使用數字來標識工單,那麼它們將與 Gitea 中託管的合併請求無法區分。為了解決這個問題,Gitea 允許使用 `!` 標記來標識合併請求。例如:
|
||||
|
||||
> 這是工單 [#1234](#),並鏈接到外部跟蹤器。
|
||||
> 這是合併請求 [!1234](#),並鏈接到 Gitea 中的合併請求。
|
||||
|
||||
在工單和合併請求中,`!` 和 `#` 可以互換使用,除非需要進行區分。如果儲存庫使用外部跟蹤器,預設情況下,合併提交消息將使用 `!` 作為引用。
|
||||
|
||||
## 工單和合併請求引用摘要
|
||||
|
||||
下表說明了工單和合併請求的不同類型的交叉引用。在範例中,`User1/Repo1` 指的是使用引用的儲存庫,而 `UserZ/RepoZ` 表示另一個儲存庫。
|
||||
|
||||
| 在 User1/Repo1 中的引用 | Repo1 的工單是外部的 | RepoZ 的工單是外部的 | 渲染效果 |
|
||||
| ----------------------- | :------------------: | :------------------: | --------------------------------------------- |
|
||||
| `#1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
|
||||
| `!1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
|
||||
| `#1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _外部工單_ 1234 |
|
||||
| `!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| `User1/Repo1#1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
|
||||
| `User1/Repo1!1234` | 否 | - | 鏈接到 `User1/Repo1` 中的工單/合併請求 1234 |
|
||||
| `User1/Repo1#1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _外部工單_ 1234 |
|
||||
| `User1/Repo1!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| `UserZ/RepoZ#1234` | - | 否 | 鏈接到 `UserZ/RepoZ` 中的工單/合併請求 1234 |
|
||||
| `UserZ/RepoZ!1234` | - | 否 | 鏈接到 `UserZ/RepoZ` 中的工單/合併請求 1234 |
|
||||
| `UserZ/RepoZ#1234` | - | 是 | 鏈接到 `UserZ/RepoZ` 的 _外部工單_ 1234 |
|
||||
| `UserZ/RepoZ!1234` | - | 是 | 鏈接到 `UserZ/RepoZ` 的 _PR_ 1234 |
|
||||
| **字母數字工單編號:** | - | - | - |
|
||||
| `AAA-1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _外部工單_ `AAA-1234` |
|
||||
| `!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| `User1/Repo1!1234` | 是 | - | 鏈接到 `User1/Repo1` 的 _PR_ 1234 |
|
||||
| _不支援_ | - | 是 | 鏈接到 `UserZ/RepoZ` 的 _外部工單_ `AAA-1234` |
|
||||
| `UserZ/RepoZ!1234` | - | 是 | 鏈接到 `UserZ/RepoZ` 中的 _PR_ 1234 |
|
||||
|
||||
_最後一部分適用於使用字母數字格式的外部工單跟蹤器的儲存庫。_
|
||||
|
||||
_**-**: 不適用_
|
||||
|
||||
注意:不完全支援具有不同類型工單(外部 vs. 內部)的儲存庫之間的自動引用,可能會導致無效鏈接。
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "merge-message-templates"
|
||||
sidebar_position: 15
|
||||
|
||||
aliases:
|
||||
- /zh-tw/merge-message-templates
|
||||
---
|
||||
|
||||
# 合併消息模板
|
||||
|
||||
## 文件名
|
||||
|
||||
PR 預設合併消息模板可能的文件名:
|
||||
|
||||
- `.gitea/default_merge_message/MERGE_TEMPLATE.md`
|
||||
- `.gitea/default_merge_message/REBASE_TEMPLATE.md`
|
||||
- `.gitea/default_merge_message/REBASE-MERGE_TEMPLATE.md`
|
||||
- `.gitea/default_merge_message/SQUASH_TEMPLATE.md`
|
||||
- `.gitea/default_merge_message/MANUALLY-MERGED_TEMPLATE.md`
|
||||
- `.gitea/default_merge_message/REBASE-UPDATE-ONLY_TEMPLATE.md`
|
||||
|
||||
## 變量
|
||||
|
||||
您可以在這些模板中使用以下以 `${}` 包圍的變量,這些變量遵循 [os.Expand](https://pkg.go.dev/os#Expand) 語法:
|
||||
|
||||
- BaseRepoOwnerName:此合併請求的基礎儲存庫所有者名稱
|
||||
- BaseRepoName:此合併請求的基礎儲存庫名稱
|
||||
- BaseBranch:此合併請求的基礎儲存庫目標分支名稱
|
||||
- HeadRepoOwnerName:此合併請求的源儲存庫所有者名稱
|
||||
- HeadRepoName:此合併請求的源儲存庫名稱
|
||||
- HeadBranch:此合併請求的源儲存庫分支名稱
|
||||
- PullRequestTitle:合併請求的標題
|
||||
- PullRequestDescription:合併請求的描述
|
||||
- PullRequestPosterName:合併請求的提交者名稱
|
||||
- PullRequestIndex:合併請求的索引號
|
||||
- PullRequestReference:合併請求的引用字符與索引號。例如,#1、!2
|
||||
- ClosingIssues:返回一個包含將由此合併請求關閉的所有工單的字符串。例如 `close #1, close #2`
|
||||
- ReviewedOn: 該提交所屬的合併請求。例如: `Reviewed-on: https://gitea.com/foo/bar/pulls/1`
|
||||
- ReviewedBy: 誰同意的此合併請求。例如: `Reviewed-by: Jane Doe <[email protected]>`
|
||||
|
||||
## 變基(Rebase)
|
||||
|
||||
在沒有合併提交的情況下進行變基時,`REBASE_TEMPLATE.md` 修改最後一次提交的消息。此模板還提供以下附加變量:
|
||||
|
||||
- CommitTitle:提交的標題
|
||||
- CommitBody:提交的正文文本
|
||||
@@ -1,60 +0,0 @@
|
||||
---
|
||||
date: "2018-06-01T19:00:00+02:00"
|
||||
slug: "pull-request"
|
||||
sidebar_position: 13
|
||||
aliases:
|
||||
- /zh-tw/pull-request
|
||||
---
|
||||
|
||||
# 合併請求
|
||||
|
||||
合併請求(PR)是一種提出對儲存庫進行更改的方式。
|
||||
它是一種將一個分支合併到另一個分支的請求,附帶有對所做更改的描述。
|
||||
合併請求通常用作貢獻者對儲存庫貢獻程式碼的方式,儲存庫的維護者可以透過對合併請求進行審查來決定是否接受這些更改。
|
||||
|
||||
## 建立合併請求
|
||||
|
||||
要建立合併請求,您需要遵循以下步驟:
|
||||
|
||||
1. **Fork 儲存庫** - 如果您沒有直接對儲存庫進行更改的權限,您需要將儲存庫 fork 到您自己的帳號中。
|
||||
這將建立一個您可以對其進行更改的儲存庫副本。
|
||||
|
||||
2. **建立分支(可選)** - 在 fork 的儲存庫中建立一個新分支,該分支包含您要提出的更改。
|
||||
給分支取一個描述性的名稱,以指示更改的內容。
|
||||
|
||||
3. **進行更改** - 進行您想要的更改,提交併將其推送到 fork 的儲存庫中。
|
||||
|
||||
4. **建立合併請求** - 轉到原始儲存庫並轉到“合併請求”選項卡。單擊“新建合併請求”按鈕,並將您的新分支選擇為源分支。
|
||||
為您的合併請求輸入描述性標題和描述,然後單擊“建立合併請求”。
|
||||
|
||||
## 評審合併請求
|
||||
|
||||
建立合併請求後,將觸發評審流程。儲存庫的維護者將收到合併請求的通知,並可以審查所做的更改。
|
||||
他們可以留下評論、請求更改或批准更改。
|
||||
|
||||
如果維護者請求更改,您需要在分支中進行這些更改,並將更改推送到 fork 的儲存庫中。
|
||||
合併請求將自動使用新更改進行更新。
|
||||
|
||||
如果維護者批准更改,他們可以將合併請求合併到儲存庫中。
|
||||
|
||||
## 關閉合併請求
|
||||
|
||||
如果您不接受該合併請求,您可以關閉它。
|
||||
要關閉合併請求,請轉到打開的合併請求並單擊“關閉合併請求”按鈕。這將關閉合併請求並且不會將其合併。
|
||||
|
||||
## 使用“Work In Progress”標記
|
||||
|
||||
在合併請求中使用“Work In Progress”標記可以防止合併請求被意外合併。
|
||||
要將合併請求標記為“Work In Progress”,您必須在其標題中添加前綴`WIP:`或`[WIP]`(不區分大小寫)。
|
||||
標記前綴可以在您的`app.ini`文件中進行設定:
|
||||
|
||||
```
|
||||
[repository.pull-request]
|
||||
WORK_IN_PROGRESS_PREFIXES=WIP:,[WIP]
|
||||
```
|
||||
|
||||
列表的第一個值將用於 helpers 程式。
|
||||
|
||||
## 合併請求模板
|
||||
|
||||
有關合併請求模板的更多資訊請您移步 : [工單與合併請求模板](issue-pull-request-templates)
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"label": "Packages",
|
||||
"position": 40,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"slug": "/usage/packages",
|
||||
"description": "Managing packages and package registries"
|
||||
}
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
---
|
||||
date: "2023-03-25T00:00:00+00:00"
|
||||
slug: "alpine"
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Alpine 套件註冊表
|
||||
|
||||
在您的使用者或組織中發佈 [Alpine](https://pkgs.alpinelinux.org/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Alpine 註冊表,您需要使用像 curl 這樣的 HTTP 客戶端來上傳包,並使用像 apk 這樣的套件管理器來消費包。
|
||||
|
||||
以下範例使用 `apk`。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊 Alpine 註冊表,請將 URL 添加到已知的 apk 源列表中 (`/etc/apk/repositories`):
|
||||
|
||||
```
|
||||
https://gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository>
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ------------ | -------------- |
|
||||
| `owner` | 套件所有者 |
|
||||
| `branch` | 要使用的分支名 |
|
||||
| `repository` | 要使用的儲存庫名 |
|
||||
|
||||
如果註冊表是私有的,請在 URL 中提供憑據。您可以使用密碼或[個人存取權杖](development/api-usage.md#透過-api-認證):
|
||||
|
||||
```
|
||||
https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/alpine/<branch>/<repository>
|
||||
```
|
||||
|
||||
Alpine 註冊表文件使用 RSA 密鑰進行簽名,apk 必須知道該密鑰。下載公鑰並將其儲存在 `/etc/apk/keys/` 目錄中:
|
||||
|
||||
```shell
|
||||
curl -JO https://gitea.example.com/api/packages/{owner}/alpine/key
|
||||
```
|
||||
|
||||
之後,更新本地套件索引:
|
||||
|
||||
```shell
|
||||
apk update
|
||||
```
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈一個 Alpine 包(`*.apk`),請執行帶有包內容的 HTTP `PUT` 操作,將其放在請求體中。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------------ | --------------------------------------------------------------------------------------------------- |
|
||||
| `owner` | 包的所有者。 |
|
||||
| `branch` | 分支可以與操作系統的發行版本匹配,例如:v3.17。 |
|
||||
| `repository` | 儲存庫可以用於[分組包](https://wiki.alpinelinux.org/wiki/Repositories) 或者只是 `main` 或類似的名稱。 |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/file.apk \
|
||||
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main
|
||||
```
|
||||
|
||||
如果您使用的是雙重身份驗證或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。
|
||||
您不能將具有相同名稱的文件兩次發佈到一個包中。您必須首先刪除現有的包文件。
|
||||
|
||||
伺服器將以以下的 HTTP 狀態碼響應:
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ----------------- | ------------------------------------------ |
|
||||
| `201 Created` | 套件已發佈。 |
|
||||
| `400 Bad Request` | 套件的名稱、版本、分支、儲存庫或架構無效。 |
|
||||
| `409 Conflict` | 具有相同參數組合的包文件已存在於套件中。 |
|
||||
|
||||
## 刪除套件
|
||||
|
||||
要刪除 Alpine 包,執行 HTTP 的 DELETE 操作。如果沒有文件,這將同時刪除包版本。
|
||||
|
||||
```
|
||||
DELETE https://gitea.example.com/api/packages/{owner}/alpine/{branch}/{repository}/{architecture}/{filename}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `branch` | 要使用的分支名 |
|
||||
| `repository` | 要使用的儲存庫名 |
|
||||
| `architecture` | 套件的架構 |
|
||||
| `filename` | 要刪除的文件名 |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password -X DELETE \
|
||||
https://gitea.example.com/api/packages/testuser/alpine/v3.17/main/test-package-1.0.0.apk
|
||||
```
|
||||
|
||||
伺服器將以以下的 HTTP 狀態碼響應:
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ---------------- | ------------------ |
|
||||
| `204 No Content` | 成功 |
|
||||
| `404 Not Found` | 未找到套件或文件 |
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從 Alpine 註冊表安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
# use latest version
|
||||
apk add {package_name}
|
||||
# use specific version
|
||||
apk add {package_name}={package_version}
|
||||
```
|
||||
@@ -1,98 +0,0 @@
|
||||
---
|
||||
date: "2022-11-20T00:00:00+00:00"
|
||||
slug: "cargo"
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Cargo 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Cargo](https://doc.rust-lang.org/stable/cargo/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
若要使用 Cargo 套件註冊表, 您需要安裝 [Rust 和 Cargo](https://www.rust-lang.org/tools/install).
|
||||
|
||||
Cargo 將可用套件的資訊儲存在一個儲存在 git 儲存庫中的套件索引中。
|
||||
這個儲存庫是與註冊表交互所必需的。
|
||||
下面的部分將介紹如何建立它。
|
||||
|
||||
## 索引儲存庫
|
||||
|
||||
Cargo 將可用套件的資訊儲存在一個儲存在 git 儲存庫中的套件索引中。
|
||||
在 Gitea 中,這個儲存庫有一個特殊的名稱叫做 `_cargo-index`。
|
||||
在上傳套件之後,它的元資料會自動寫入索引中。
|
||||
不應手動修改這個註冊表的內容。
|
||||
|
||||
使用者或組織套件設定頁面允許建立這個索引儲存庫以及設定文件。
|
||||
如果需要,此操作將重寫設定文件。
|
||||
例如,如果 Gitea 實例的域名已更改,這將非常有用。
|
||||
|
||||
如果儲存在 Gitea 中的套件與索引註冊表中的資訊不同步,設定頁面允許重建這個索引註冊表。
|
||||
這個操作將遍歷註冊表中的所有套件,並將它們的資訊寫入索引中。
|
||||
如果有很多套件,這個過程可能需要一些時間。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊這個套件註冊表,必須更新 Cargo 的設定。
|
||||
將以下文本添加到位於當前使用者主目錄中的設定文件中(例如 `~/.cargo/config.toml`):
|
||||
|
||||
```
|
||||
[registry]
|
||||
default = "gitea"
|
||||
|
||||
[registries.gitea]
|
||||
index = "sparse+https://gitea.example.com/api/packages/{owner}/cargo/" # Sparse index
|
||||
# index = "https://gitea.example.com/{owner}/_cargo-index.git" # Git
|
||||
|
||||
[net]
|
||||
git-fetch-with-cli = true
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | ---------------- |
|
||||
| `owner` | 套件的所有者。 |
|
||||
|
||||
如果這個註冊表是私有的或者您想要發佈新的套件,您必須設定您的憑據。
|
||||
將憑據部分添加到位於當前使用者主目錄中的憑據文件中(例如 `~/.cargo/credentials.toml`):
|
||||
|
||||
```
|
||||
[registries.gitea]
|
||||
token = "Bearer {token}"
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | ------------------------------------------------------------------------------------- |
|
||||
| `token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證) |
|
||||
|
||||
## 發佈套件
|
||||
|
||||
在專案中運行以下命令來發布套件:
|
||||
|
||||
```shell
|
||||
cargo publish
|
||||
```
|
||||
|
||||
如果已經存在同名和版本的套件,您將無法發佈新的套件。您必須先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
cargo add {package_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ------------ |
|
||||
| `package_name` | 套件名稱。 |
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
cargo publish
|
||||
cargo add
|
||||
cargo install
|
||||
cargo yank
|
||||
cargo unyank
|
||||
cargo search
|
||||
```
|
||||
@@ -1,84 +0,0 @@
|
||||
---
|
||||
date: "2023-01-20T00:00:00+00:00"
|
||||
slug: "chef"
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Chef 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Chef](https://chef.io/) cookbooks。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Chef 套件註冊表,您需要使用 [`knife`](https://docs.chef.io/workstation/knife/).
|
||||
|
||||
## 認證
|
||||
|
||||
Chef 套件註冊表不使用使用者名稱和密碼進行身份驗證,而是使用私鑰和公鑰對請求進行簽名。
|
||||
請前往套件所有者設定頁面以建立必要的密鑰對。
|
||||
只有公鑰儲存在Gitea中。如果您丟失了私鑰的存取權限,您必須重新生成密鑰對。
|
||||
[設定 `knife`](https://docs.chef.io/workstation/knife_setup/),使用下載的私鑰,並將 Gitea 使用者名稱設定為 `client_name`。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要將 [`knife` 設定](https://docs.chef.io/workstation/knife_setup/)為使用 Gitea 套件註冊表,請將 URL 添加到 `~/.chef/config.rb` 文件中。
|
||||
|
||||
```
|
||||
knife[:supermarket_site] = 'https://gitea.example.com/api/packages/{owner}/chef'
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
## 發佈套件
|
||||
|
||||
若要發佈 Chef 套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
knife supermarket share {package_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ---------- |
|
||||
| `package_name` | 套件名稱 |
|
||||
|
||||
如果已經存在同名和版本的套件,則無法發佈新的套件。您必須先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表中安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
knife supermarket install {package_name}
|
||||
```
|
||||
|
||||
您可以指定套件的版本,這是可選的:
|
||||
|
||||
```shell
|
||||
knife supermarket install {package_name} {package_version}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | ---------- |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
|
||||
## 刪除套件
|
||||
|
||||
如果您想要從註冊表中刪除套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
knife supermarket unshare {package_name}
|
||||
```
|
||||
|
||||
可選地,您可以指定套件的版本:
|
||||
|
||||
```shell
|
||||
knife supermarket unshare {package_name}/versions/{package_version}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | ---------- |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
@@ -1,110 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "composer"
|
||||
sidebar_position: 10
|
||||
---
|
||||
|
||||
# Composer 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Composer](https://getcomposer.org/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Composer 套件註冊表,您可以使用 [Composer](https://getcomposer.org/download/) 消費,並使用類似 `curl` 的 HTTP 上傳客戶端發佈套件。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈 Composer 套件,請執行 HTTP `PUT` 操作,將套件內容放入請求體中。
|
||||
套件內容必須是包含 `composer.json` 文件的壓縮 PHP 專案。
|
||||
如果已經存在同名和版本的套件,則無法發佈新的套件。您必須先刪除現有的套件。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/composer
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
如果 `composer.json` 文件不包含 `version` 屬性,您必須將其作為查詢參數提供:
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/composer?version={x.y.z}
|
||||
```
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/project.zip \
|
||||
https://gitea.example.com/api/packages/testuser/composer
|
||||
```
|
||||
|
||||
或者將套件版本指定為查詢參數:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/project.zip \
|
||||
https://gitea.example.com/api/packages/testuser/composer?version=1.0.3
|
||||
```
|
||||
|
||||
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。
|
||||
|
||||
伺服器將以以下 HTTP 狀態碼響應。
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ----------------- | ----------------------------------------------------------- |
|
||||
| `201 Created` | 套件已發佈 |
|
||||
| `400 Bad Request` | 套件名稱和/或版本無效,或具有相同名稱和版本的套件已存在 |
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,您需要將其添加到 Composer 的 `config.json` 文件中(通常可以在 `<user-home-dir>/.composer/config.json` 中找到):
|
||||
|
||||
```json
|
||||
{
|
||||
"repositories": [{
|
||||
"type": "composer",
|
||||
"url": "https://gitea.example.com/api/packages/{owner}/composer"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
要使用憑據訪問套件註冊表,您必須在 `auth.json` 文件中指定它們,如下所示:
|
||||
|
||||
```json
|
||||
{
|
||||
"http-basic": {
|
||||
"gitea.example.com": {
|
||||
"username": "{username}",
|
||||
"password": "{password}"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ---------- | --------------------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `username` | 您的 Gitea 使用者名稱 |
|
||||
| `password` | 您的Gitea密碼或個人存取權杖 |
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表中安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
composer require {package_name}
|
||||
```
|
||||
|
||||
您可以指定套件的版本,這是可選的:
|
||||
|
||||
```shell
|
||||
composer require {package_name}:{package_version}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | ---------- |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
@@ -1,89 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "conan"
|
||||
sidebar_position: 20
|
||||
---
|
||||
|
||||
# Conan 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Conan](https://conan.io/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 [conan](https://conan.io/downloads.html) 套件註冊表,您需要使用 conan 命令行工具來消費和發佈套件。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,您需要設定一個新的 Conan remote:
|
||||
|
||||
```shell
|
||||
conan remote add {remote} https://gitea.example.com/api/packages/{owner}/conan
|
||||
conan user --remote {remote} --password {password} {username}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `remote` | 遠程名稱。 |
|
||||
| `username` | 您的 Gitea 使用者名稱。 |
|
||||
| `password` | 您的 Gitea 密碼。如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。 |
|
||||
| `owner` | 套件的所有者。 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
conan remote add gitea https://gitea.example.com/api/packages/testuser/conan
|
||||
conan user --remote gitea --password password123 testuser
|
||||
```
|
||||
|
||||
## 發佈套件
|
||||
|
||||
通過運行以下命令發佈 Conan 套件:
|
||||
|
||||
```shell
|
||||
conan upload --remote={remote} {recipe}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------- | --------------- |
|
||||
| `remote` | 遠程名稱 |
|
||||
| `recipe` | 要上傳的 recipe |
|
||||
|
||||
For example:
|
||||
|
||||
```shell
|
||||
conan upload --remote=gitea ConanPackage/1.2@gitea/final
|
||||
```
|
||||
|
||||
Gitea Conan 套件註冊表支援完整的[版本修訂](https://docs.conan.io/en/latest/versioning/revisions.html)。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表中安裝Conan套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
conan install --remote={remote} {recipe}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------- | --------------- |
|
||||
| `remote` | 遠程名稱 |
|
||||
| `recipe` | 要下載的 recipe |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
conan install --remote=gitea ConanPackage/1.2@gitea/final
|
||||
```
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
conan install
|
||||
conan get
|
||||
conan info
|
||||
conan search
|
||||
conan upload
|
||||
conan user
|
||||
conan download
|
||||
conan remove
|
||||
```
|
||||
@@ -1,73 +0,0 @@
|
||||
---
|
||||
date: "2022-12-28T00:00:00+00:00"
|
||||
slug: "conda"
|
||||
sidebar_position: 25
|
||||
---
|
||||
|
||||
# Conda 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Conda](https://docs.conda.io/en/latest/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Conda 套件註冊表,您需要使用 [conda](https://docs.conda.io/projects/conda/en/stable/user-guide/install/index.html) 命令行工具。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表並提供憑據,請編輯您的 `.condarc` 文件:
|
||||
|
||||
```yaml
|
||||
channel_alias: https://gitea.example.com/api/packages/{owner}/conda
|
||||
channels:
|
||||
- https://gitea.example.com/api/packages/{owner}/conda
|
||||
default_channels:
|
||||
- https://gitea.example.com/api/packages/{owner}/conda
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
有關各個設定的解釋,請參閱[官方文件](https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html)。
|
||||
|
||||
如果需要提供憑據,可以將它們作為通道 URL 的一部分嵌入(`https://user:[email protected]/...`)。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈一個套件,請執行一個HTTP `PUT`操作,請求正文中包含套件內容。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/conda/{channel}/{filename}
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ---------- | --------------------------------------------------------------------------------------------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `channel` | 套件的[通道](https://conda.io/projects/conda/en/latest/user-guide/concepts/channels.html)(可選) |
|
||||
| `filename` | 文件名 |
|
||||
|
||||
使用HTTP基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/package-1.0.conda \
|
||||
https://gitea.example.com/api/packages/testuser/conda/package-1.0.conda
|
||||
```
|
||||
|
||||
如果已經存在同名和版本的套件,則無法發佈套件。您必須先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表中安裝套件,請執行以下命令之一:
|
||||
|
||||
```shell
|
||||
conda install {package_name}
|
||||
conda install {package_name}={package_version}
|
||||
conda install -c {channel} {package_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | -------------------- |
|
||||
| `package_name` | 套件的名稱 |
|
||||
| `package_version` | 套件的版本 |
|
||||
| `channel` | 套件的通道(可選) |
|
||||
@@ -1,81 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "container"
|
||||
sidebar_position: 30
|
||||
---
|
||||
|
||||
# 容器註冊表
|
||||
|
||||
為您的使用者或組織發佈符合 [Open Container Initiative(OCI)](https://opencontainers.org/) 規範的鏡像。
|
||||
該容器註冊表遵循 OCI 規範,並支援所有相容的鏡像類型,如 [Docker](https://www.docker.com/) 和 [Helm Charts](https://helm.sh/)。
|
||||
|
||||
## 目錄
|
||||
|
||||
要使用容器註冊表,您可以使用適用於特定鏡像類型的工具。
|
||||
以下範例使用 `docker` 客戶端。
|
||||
|
||||
## 登入容器註冊表
|
||||
|
||||
要推送鏡像或者如果鏡像位於私有註冊表中,您需要進行身份驗證:
|
||||
|
||||
```shell
|
||||
docker login gitea.example.com
|
||||
```
|
||||
|
||||
如果您使用的是 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼進行身份驗證。
|
||||
|
||||
## 鏡像命名約定
|
||||
|
||||
鏡像必須遵循以下命名約定:
|
||||
|
||||
`{registry}/{owner}/{image}`
|
||||
|
||||
例如,以下是所有者為 `testuser` 的有效鏡像名稱範例:
|
||||
|
||||
`gitea.example.com/testuser/myimage`
|
||||
|
||||
`gitea.example.com/testuser/my-image`
|
||||
|
||||
`gitea.example.com/testuser/my/image`
|
||||
|
||||
**注意:** 該註冊表僅支援大小寫不敏感的標籤名稱。因此,`image:tag` 和 `image:Tag` 將被視為相同的鏡像和標籤。
|
||||
|
||||
## 推送鏡像
|
||||
|
||||
透過執行以下命令來推送鏡像:
|
||||
|
||||
```shell
|
||||
docker push gitea.example.com/{owner}/{image}:{tag}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | ------------ |
|
||||
| `owner` | 鏡像的所有者 |
|
||||
| `image` | 鏡像的名稱 |
|
||||
| `tag` | 鏡像的標籤 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
docker push gitea.example.com/testuser/myimage:latest
|
||||
```
|
||||
|
||||
## 拉取鏡像
|
||||
|
||||
透過執行以下命令來拉取鏡像:
|
||||
|
||||
```shell
|
||||
docker pull gitea.example.com/{owner}/{image}:{tag}
|
||||
```
|
||||
|
||||
| Parameter | Description |
|
||||
| --------- | ------------ |
|
||||
| `owner` | 鏡像的所有者 |
|
||||
| `image` | 鏡像的名稱 |
|
||||
| `tag` | 鏡像的標籤 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
docker pull gitea.example.com/testuser/myimage:latest
|
||||
```
|
||||
@@ -1,81 +0,0 @@
|
||||
---
|
||||
date: "2023-01-01T00:00:00+00:00"
|
||||
slug: "cran"
|
||||
sidebar_position: 35
|
||||
---
|
||||
|
||||
# CRAN 套件註冊表
|
||||
|
||||
將 [R](https://www.r-project.org/) 套件發佈到您的使用者或組織的類似 [CRAN](https://cran.r-project.org/) 的註冊表。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用CRAN套件註冊表,您需要安裝 [R](https://cran.r-project.org/)。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,您需要將其添加到 `Rprofile.site` 文件中,可以是系統級別、使用者級別 `~/.Rprofile` 或專案級別:
|
||||
|
||||
```
|
||||
options("repos" = c(getOption("repos"), c(gitea="https://gitea.example.com/api/packages/{owner}/cran")))
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
如果需要提供憑據,可以將它們嵌入到URL(`https://user:[email protected]/...`)中。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈 R 套件,請執行帶有套件內容的 HTTP `PUT` 操作。
|
||||
|
||||
源程式碼套件:
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/cran/src
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
二進制套件:
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/cran/bin?platform={platform}&rversion={rversion}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ---------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `platform` | 平台的名稱 |
|
||||
| `rversion` | 二進制的R版本 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/package.zip \
|
||||
https://gitea.example.com/api/packages/testuser/cran/bin?platform=windows&rversion=4.2
|
||||
```
|
||||
|
||||
如果同名和版本的套件已存在,則無法發佈套件。您必須首先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表中安裝R套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
install.packages("{package_name}")
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ----------------- |
|
||||
| `package_name` | The package name. |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
install.packages("testpackage")
|
||||
```
|
||||
@@ -1,121 +0,0 @@
|
||||
---
|
||||
date: "2023-01-07T00:00:00+00:00"
|
||||
slug: "debian"
|
||||
---
|
||||
|
||||
# Debian 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Debian](https://www.debian.org/distrib/packages) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Debian 註冊表,您需要使用類似於 `curl` 的 HTTP 客戶端進行上傳,並使用類似於 `apt` 的套件管理器消費套件。
|
||||
|
||||
以下範例使用 `apt`。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊 Debian 註冊表,請將 URL 添加到已知 `apt` 源列表中:
|
||||
|
||||
```shell
|
||||
echo "deb [signed-by=/etc/apt/keyrings/gitea-{owner}.asc] https://gitea.example.com/api/packages/{owner}/debian {distribution} {component}" | sudo tee -a /etc/apt/sources.list.d/gitea.list
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| -------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `distribution` | 要使用的發行版 |
|
||||
| `component` | 要使用的元件 |
|
||||
|
||||
如果註冊表是私有的,請在 URL 中提供憑據。您可以使用密碼或[個人存取權杖](development/api-usage.md#透過-api-認證):
|
||||
|
||||
```shell
|
||||
echo "deb [signed-by=/etc/apt/keyrings/gitea-{owner}.asc] https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/debian {distribution} {component}" | sudo tee -a /etc/apt/sources.list.d/gitea.list
|
||||
```
|
||||
|
||||
Debian 註冊表文件使用 PGP 密鑰進行簽名,`apt` 必須知道該密鑰:
|
||||
|
||||
```shell
|
||||
sudo curl https://gitea.example.com/api/packages/{owner}/debian/repository.key -o /etc/apt/keyrings/gitea-{owner}.asc
|
||||
```
|
||||
|
||||
然後更新本地套件索引:
|
||||
|
||||
```shell
|
||||
apt update
|
||||
```
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈一個 Debian 套件(`*.deb`),執行 HTTP `PUT` 操作,並將套件內容放入請求主體中。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/debian/pool/{distribution}/{component}/upload
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ----------------------------------------------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `distribution` | 發行版,可能與操作系統的發行版名稱匹配,例如 `bionic` |
|
||||
| `component` | 元件,可用於分組套件,或僅為 `main` 或類似的元件。 |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/file.deb \
|
||||
https://gitea.example.com/api/packages/testuser/debian/pool/bionic/main/upload
|
||||
```
|
||||
|
||||
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。
|
||||
您無法向套件中多次發佈具有相同名稱的文件。您必須首先刪除現有的套件版本。
|
||||
|
||||
伺服器將使用以下 HTTP 狀態程式碼進行響應。
|
||||
|
||||
| HTTP 狀態碼 | 意義 |
|
||||
| ----------------- | ---------------------------------------- |
|
||||
| `201 Created` | 套件已發佈 |
|
||||
| `400 Bad Request` | 套件名稱、版本、發行版、元件或架構無效 |
|
||||
| `409 Conflict` | 具有相同參數組合的套件文件已經存在 |
|
||||
|
||||
## 刪除套件
|
||||
|
||||
要刪除 Debian 套件,請執行 HTTP `DELETE` 操作。如果沒有文件留下,這將同時刪除套件版本。
|
||||
|
||||
```
|
||||
DELETE https://gitea.example.com/api/packages/{owner}/debian/pool/{distribution}/{component}/{package_name}/{package_version}/{architecture}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
| `distribution` | 套件發行版 |
|
||||
| `component` | 套件元件 |
|
||||
| `architecture` | 套件架構 |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password -X DELETE \
|
||||
https://gitea.example.com/api/packages/testuser/debian/pools/bionic/main/test-package/1.0.0/amd64
|
||||
```
|
||||
|
||||
伺服器將使用以下 HTTP 狀態程式碼進行響應。
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ---------------- | ------------------ |
|
||||
| `204 No Content` | 成功 |
|
||||
| `404 Not Found` | 找不到套件或文件 |
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從 Debian 註冊表安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
# use latest version
|
||||
apt install {package_name}
|
||||
# use specific version
|
||||
apt install {package_name}={package_version}
|
||||
```
|
||||
@@ -1,135 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "generic"
|
||||
sidebar_position: 500
|
||||
---
|
||||
|
||||
# 通用套件註冊表
|
||||
|
||||
發佈通用文件,如發佈二進制文件或其他輸出,供您的使用者或組織使用。
|
||||
|
||||
## 身份驗證套件註冊表
|
||||
|
||||
要身份驗證套件註冊表,您需要提供[自訂 HTTP 頭或使用 HTTP 基本身份驗證](development/api-usage.md#透過-api-認證)。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈通用套件,請執行 HTTP `PUT` 操作,並將套件內容放入請求主體中。
|
||||
您無法向套件中多次發佈具有相同名稱的文件。您必須首先刪除現有的套件版本。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}/{file_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `owner` | 套件的所有者。 |
|
||||
| `package_name` | 套件名稱。它只能包含小寫字母 (`a-z`)、大寫字母 (`A-Z`)、數字 (`0-9`)、點號 (`.`)、連字符 (`-`)、加號 (`+`) 或下劃線 (`_`) |
|
||||
| `package_version` | 套件版本,一個非空字符串,不包含前導或尾隨空格 |
|
||||
| `file_name` | 文件名。它只能包含小寫字母 (`a-z`)、大寫字母 (`A-Z`)、數字 (`0-9`)、點號 (`.`)、連字符 (`-`)、加號 (`+`) 或下劃線 (`_`) |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/file.bin \
|
||||
https://gitea.example.com/api/packages/testuser/generic/test_package/1.0.0/file.bin
|
||||
```
|
||||
|
||||
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。
|
||||
|
||||
伺服器將使用以下 HTTP 狀態程式碼進行響應。
|
||||
|
||||
| HTTP 狀態碼 | 意義 |
|
||||
| ----------------- | ---------------------------------- |
|
||||
| `201 Created` | 套件已發佈 |
|
||||
| `400 Bad Request` | 套件名稱和/或版本和/或文件名無效 |
|
||||
| `409 Conflict` | 具有相同名稱的文件已存在於套件中 |
|
||||
|
||||
## 下載套件
|
||||
|
||||
要下載通用套件,請執行 HTTP `GET` 操作。
|
||||
|
||||
```
|
||||
GET https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}/{file_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
| `file_name` | 文件名 |
|
||||
|
||||
文件內容將在響應主體中返回。響應的內容類型為 `application/octet-stream`。
|
||||
|
||||
伺服器將使用以下 HTTP 狀態程式碼進行響應。
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password \
|
||||
https://gitea.example.com/api/packages/testuser/generic/test_package/1.0.0/file.bin
|
||||
```
|
||||
|
||||
伺服器會以以下 HTTP 狀態碼進行響應:
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| --------------- | -------------------- |
|
||||
| `200 OK` | 成功 |
|
||||
| `404 Not Found` | 找不到套件或者文件 |
|
||||
|
||||
## 刪除套件
|
||||
|
||||
要刪除通用套件,請執行 HTTP DELETE 操作。這將同時刪除該版本的所有文件。
|
||||
|
||||
```
|
||||
DELETE https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
|
||||
伺服器將使用以下 HTTP 狀態程式碼進行響應。
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password -X DELETE \
|
||||
https://gitea.example.com/api/packages/testuser/generic/test_package/1.0.0
|
||||
```
|
||||
|
||||
The server responds with the following HTTP Status codes.
|
||||
|
||||
| HTTP 狀態碼 | 意義 |
|
||||
| ---------------- | ------------ |
|
||||
| `204 No Content` | 成功 |
|
||||
| `404 Not Found` | 找不到套件 |
|
||||
|
||||
## 刪除套件文件
|
||||
|
||||
要刪除通用套件的文件,請執行 HTTP `DELETE` 操作。如果沒有文件留下,這將同時刪除套件版本。
|
||||
|
||||
```
|
||||
DELETE https://gitea.example.com/api/packages/{owner}/generic/{package_name}/{package_version}/{filename}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
| `filename` | 文件名 |
|
||||
|
||||
使用 HTTP 基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password -X DELETE \
|
||||
https://gitea.example.com/api/packages/testuser/generic/test_package/1.0.0/file.bin
|
||||
```
|
||||
|
||||
伺服器將使用以下 HTTP 狀態程式碼進行響應:
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ---------------- | ------------------ |
|
||||
| `204 No Content` | 成功 |
|
||||
| `404 Not Found` | 找不到套件或文件 |
|
||||
@@ -1,64 +0,0 @@
|
||||
---
|
||||
date: "2023-05-10T00:00:00+00:00"
|
||||
slug: "go"
|
||||
sidebar_position: 45
|
||||
---
|
||||
|
||||
# Go 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 Go 套件。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈 Go 套件,請執行 HTTP `PUT` 操作,並將套件內容放入請求主體中。
|
||||
如果已經存在相同名稱和版本的套件,您無法發佈套件。您必須首先刪除現有的套件。
|
||||
該套件必須遵循[文件中的結構](https://go.dev/ref/mod#zip-files)。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/go/upload
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
要身份驗證到套件註冊表,您需要提供[自訂 HTTP 頭或使用 HTTP 基本身份驗證](development/api-usage.md#透過-api-認證):
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/file.zip \
|
||||
https://gitea.example.com/api/packages/testuser/go/upload
|
||||
```
|
||||
|
||||
如果您使用的是 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼進行身份驗證。
|
||||
|
||||
伺服器將使用以下 HTTP 狀態程式碼進行響應。
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ----------------- | -------------------------- |
|
||||
| `201 Created` | 套件已發佈 |
|
||||
| `400 Bad Request` | 套件無效 |
|
||||
| `409 Conflict` | 具有相同名稱的套件已存在 |
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要安裝Go套件,請指示Go使用套件註冊表作為代理:
|
||||
|
||||
```shell
|
||||
# 使用最新版本
|
||||
GOPROXY=https://gitea.example.com/api/packages/{owner}/go go install {package_name}
|
||||
# 或者
|
||||
GOPROXY=https://gitea.example.com/api/packages/{owner}/go go install {package_name}@latest
|
||||
# 使用特定版本
|
||||
GOPROXY=https://gitea.example.com/api/packages/{owner}/go go install {package_name}@{package_version}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
|
||||
如果套件的所有者是私有的,則需要[提供憑據](https://go.dev/ref/mod#private-module-proxy-auth)。
|
||||
|
||||
有關 `GOPROXY` 環境變量的更多資訊以及如何防止資料泄漏的資訊,請[參閱文件](https://go.dev/ref/mod#private-modules)。
|
||||
@@ -1,55 +0,0 @@
|
||||
---
|
||||
date: "2022-04-14T00:00:00+00:00"
|
||||
slug: "helm"
|
||||
sidebar_position: 50
|
||||
---
|
||||
|
||||
# Helm Chart 註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Helm](https://helm.sh/) charts。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Helm Chart 註冊表,可以使用諸如 `curl` 或 [`helm cm-push`](https://github.com/chartmuseum/helm-push/) 外掛之類的簡單HTTP客戶端。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
通過運行以下命令來發布套件:
|
||||
|
||||
```shell
|
||||
curl --user {username}:{password} -X POST --upload-file ./{chart_file}.tgz https://gitea.example.com/api/packages/{owner}/helm/api/charts
|
||||
```
|
||||
|
||||
或者使用 `helm cm-push` 外掛:
|
||||
|
||||
```shell
|
||||
helm repo add --username {username} --password {password} {repo} https://gitea.example.com/api/packages/{owner}/helm
|
||||
helm cm-push ./{chart_file}.tgz {repo}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `username` | 您的Gitea使用者名稱 |
|
||||
| `password` | 您的Gitea密碼。如果您使用的是2FA或OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼進行身份驗證。 |
|
||||
| `repo` | 儲存庫名稱 |
|
||||
| `chart_file` | Helm Chart 歸檔文件 |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從註冊表中安裝Helm Chart,請執行以下命令:
|
||||
|
||||
```shell
|
||||
helm repo add --username {username} --password {password} {repo} https://gitea.example.com/api/packages/{owner}/helm
|
||||
helm repo update
|
||||
helm install {name} {repo}/{chart}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ---------- | --------------------------- |
|
||||
| `username` | 您的Gitea使用者名稱 |
|
||||
| `password` | 您的Gitea密碼或個人存取權杖 |
|
||||
| `repo` | 儲存庫的名稱 |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `name` | 本地名稱 |
|
||||
| `chart` | Helm Chart的名稱 |
|
||||
@@ -1,154 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "maven"
|
||||
sidebar_position: 60
|
||||
---
|
||||
|
||||
# Maven 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Maven](https://maven.apache.org) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Maven 套件註冊表,您可以使用 [Maven](https://maven.apache.org/install.html) 或 [Gradle](https://gradle.org/install/)。
|
||||
以下範例使用 `Maven` 和 `Gradle Groovy`。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,首先需要將存取權杖添加到 [`settings.xml`](https://maven.apache.org/settings.html) 文件中:
|
||||
|
||||
```xml
|
||||
<settings>
|
||||
<servers>
|
||||
<server>
|
||||
<id>gitea</id>
|
||||
<configuration>
|
||||
<httpHeaders>
|
||||
<property>
|
||||
<name>Authorization</name>
|
||||
<value>token {access_token}</value>
|
||||
</property>
|
||||
</httpHeaders>
|
||||
</configuration>
|
||||
</server>
|
||||
</servers>
|
||||
</settings>
|
||||
```
|
||||
|
||||
然後在專案的 `pom.xml` 文件中添加以下部分:
|
||||
|
||||
```xml
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>gitea</id>
|
||||
<url>https://gitea.example.com/api/packages/{owner}/maven</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>gitea</id>
|
||||
<url>https://gitea.example.com/api/packages/{owner}/maven</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>gitea</id>
|
||||
<url>https://gitea.example.com/api/packages/{owner}/maven</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ------------------------------------------------------------------------------------- |
|
||||
| `access_token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證) |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
### Gradle variant
|
||||
|
||||
如果您計劃在專案中添加來自 Gitea 實例的一些套件,請將其添加到 repositories 部分中:
|
||||
|
||||
```groovy
|
||||
repositories {
|
||||
// other repositories
|
||||
maven { url "https://gitea.example.com/api/packages/{owner}/maven" }
|
||||
}
|
||||
```
|
||||
|
||||
在 Groovy gradle 中,您可以在發佈部分中包含以下腳本:
|
||||
|
||||
```groovy
|
||||
publishing {
|
||||
// 其他發佈設置
|
||||
repositories {
|
||||
maven {
|
||||
name = "Gitea"
|
||||
url = uri("https://gitea.example.com/api/packages/{owner}/maven")
|
||||
|
||||
credentials(HttpHeaderCredentials) {
|
||||
name = "Authorization"
|
||||
value = "token {access_token}"
|
||||
}
|
||||
|
||||
authentication {
|
||||
header(HttpHeaderAuthentication)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈套件,只需運行以下命令:
|
||||
|
||||
```shell
|
||||
mvn deploy
|
||||
```
|
||||
|
||||
或者,如果您使用的是 Gradle,請使用 `gradle` 命令和 `publishAllPublicationsToGiteaRepository` 任務:
|
||||
|
||||
```groovy
|
||||
./gradlew publishAllPublicationsToGiteaRepository
|
||||
```
|
||||
|
||||
如果您想要將預構建的套件發佈到註冊表中,可以使用 [`mvn deploy:deploy-file`](https://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html) 命令:
|
||||
|
||||
```shell
|
||||
mvn deploy:deploy-file -Durl=https://gitea.example.com/api/packages/{owner}/maven -DrepositoryId=gitea -Dfile=/path/to/package.jar
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
如果存在相同名稱和版本的套件,您無法發佈該套件。您必須先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表中安裝 Maven 套件,請在專案的 `pom.xml` 文件中添加新的依賴項:
|
||||
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>com.test.package</groupId>
|
||||
<artifactId>test_project</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
在 `Gradle Groovy` 中類似的操作如下:
|
||||
|
||||
```groovy
|
||||
implementation "com.test.package:test_project:1.0.0"
|
||||
```
|
||||
|
||||
然後運行:
|
||||
|
||||
```shell
|
||||
mvn install
|
||||
```
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
mvn install
|
||||
mvn deploy
|
||||
mvn dependency:get:
|
||||
```
|
||||
@@ -1,132 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "npm"
|
||||
sidebar_position: 70
|
||||
---
|
||||
|
||||
# NPM Package Registry
|
||||
|
||||
為您的使用者或組織發佈 [npm](https://www.npmjs.com/) 包。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 npm 包註冊表,您需要安裝 [Node.js](https://nodejs.org/en/download/) 以及與之配套的套件管理器,例如 [Yarn](https://classic.yarnpkg.com/en/docs/install) 或 [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) 本身。
|
||||
|
||||
該註冊表支援[作用域](https://docs.npmjs.com/misc/scope/)和非作用域套件。
|
||||
|
||||
以下範例使用具有作用域 `@test` 的 `npm` 工具。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,您需要設定一個新的套件源。
|
||||
|
||||
```shell
|
||||
npm config set {scope}:registry=https://gitea.example.com/api/packages/{owner}/npm/
|
||||
npm config set -- '//gitea.example.com/api/packages/{owner}/npm/:_authToken' "{token}"
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | --------------------------------------------------------------------------------------- |
|
||||
| `scope` | 套件的作用域 |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證)。 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
npm config set @test:registry=https://gitea.example.com/api/packages/testuser/npm/
|
||||
npm config set -- '//gitea.example.com/api/packages/testuser/npm/:_authToken' "personal_access_token"
|
||||
```
|
||||
|
||||
或者,不使用作用域:
|
||||
|
||||
```shell
|
||||
npm config set registry https://gitea.example.com/api/packages/testuser/npm/
|
||||
npm config set -- '//gitea.example.com/api/packages/testuser/npm/:_authToken' "personal_access_token"
|
||||
```
|
||||
|
||||
## 發佈套件
|
||||
|
||||
在專案中運行以下命令發佈套件:
|
||||
|
||||
```shell
|
||||
npm publish
|
||||
```
|
||||
|
||||
如果已經存在相同名稱和版本的套件,您無法發佈該套件。您必須先刪除現有的套件。
|
||||
|
||||
## 刪除套件
|
||||
|
||||
通過運行以下命令刪除套件:
|
||||
|
||||
```shell
|
||||
npm unpublish {package_name}[@{package_version}]
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | ---------- |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
|
||||
例如
|
||||
|
||||
```shell
|
||||
npm unpublish @test/test_package
|
||||
npm unpublish @test/[email protected]
|
||||
```
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表中安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
npm install {package_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ---------- |
|
||||
| `package_name` | 套件名稱 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
npm install @test/test_package
|
||||
```
|
||||
|
||||
## 給套件打標籤
|
||||
|
||||
該註冊表支援[版本標籤](https://docs.npmjs.com/adding-dist-tags-to-packages/),可以透過 `npm dist-tag` 管理:
|
||||
|
||||
```shell
|
||||
npm dist-tag add {package_name}@{version} {tag}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ---------- |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `version` | 套件版本 |
|
||||
| `tag` | 套件標籤 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
npm dist-tag add [email protected] release
|
||||
```
|
||||
|
||||
標籤名稱不能是有效的版本。所有可解析為版本的標籤名稱都將被拒絕。
|
||||
|
||||
## 搜索套件
|
||||
|
||||
該註冊表支援[搜索](https://docs.npmjs.com/cli/v7/commands/npm-search/),但不支援像 `author:gitea` 這樣的特殊搜索限定符。
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
npm install
|
||||
npm ci
|
||||
npm publish
|
||||
npm unpublish
|
||||
npm dist-tag
|
||||
npm view
|
||||
npm search
|
||||
```
|
||||
@@ -1,105 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "nuget"
|
||||
sidebar_position: 80
|
||||
---
|
||||
|
||||
# NuGet 套件註冊表
|
||||
|
||||
發佈適用於您的使用者或組織的 [NuGet](https://www.nuget.org/) 套件。套件註冊表支援 V2 和 V3 API 協議,並且您還可以使用 [NuGet 符號套件](https://docs.microsoft.com/zh-tw/nuget/create-packages/symbol-packages-snupkg)。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 NuGet 套件註冊表,您可以使用命令行介面工具,以及各種整合開發環境(IDE)中的 NuGet 功能,如 Visual Studio。有關 NuGet 客戶端的更多資訊,請參[閱官方文件](https://docs.microsoft.com/zh-tw/nuget/install-nuget-client-tools)。
|
||||
以下範例使用 `dotnet nuget` 工具。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,您需要設定一個新的 NuGet 源:
|
||||
|
||||
```shell
|
||||
dotnet nuget add source --name {source_name} --username {username} --password {password} https://gitea.example.com/api/packages/{owner}/nuget/index.json
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------------- | ---------------------------------------------------------------------------------------------------------------- |
|
||||
| `source_name` | 所需源名稱 |
|
||||
| `username` | 您的 Gitea 使用者名稱 |
|
||||
| `password` | 您的 Gitea 密碼。如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。 |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
dotnet nuget add source --name gitea --username testuser --password password123 https://gitea.example.com/api/packages/testuser/nuget/index.json
|
||||
```
|
||||
|
||||
您可以在不提供憑據的情況下添加源,並在發佈套件時使用--api-key 參數。在這種情況下,您需要提供[個人存取權杖](development/api-usage.md#透過-api-認證)。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
通過運行以下命令發佈套件:
|
||||
|
||||
```shell
|
||||
dotnet nuget push --source {source_name} {package_file}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ---------------------------- |
|
||||
| `source_name` | 所需源名稱 |
|
||||
| `package_file` | 套件 `.nupkg` 文件的路徑。 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
dotnet nuget push --source gitea test_package.1.0.0.nupkg
|
||||
```
|
||||
|
||||
如果已經存在相同名稱和版本的套件,您無法發佈該套件。您必須先刪除現有的套件。
|
||||
|
||||
### 符號套件
|
||||
|
||||
NuGet 套件註冊表支援構建用於符號伺服器的符號套件。客戶端可以請求嵌入在符號套件(`.snupkg`)中的 PDB 文件。
|
||||
為此,請將 NuGet 套件註冊表註冊為符號源:
|
||||
|
||||
```
|
||||
https://gitea.example.com/api/packages/{owner}/nuget/symbols
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | -------------------- |
|
||||
| `owner` | 套件註冊表的所有者 |
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
https://gitea.example.com/api/packages/testuser/nuget/symbols
|
||||
```
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表安裝 NuGet 套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
dotnet add package --source {source_name} --version {package_version} {package_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | ------------ |
|
||||
| `source_name` | 所需源名稱 |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本。 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
dotnet add package --source gitea --version 1.0.0 test_package
|
||||
```
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
dotnet add
|
||||
dotnet nuget push
|
||||
dotnet nuget delete
|
||||
```
|
||||
@@ -1,96 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "overview"
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# 套件註冊表
|
||||
|
||||
從Gitea **1.17**版本開始,套件註冊表可以用作常見套件管理器的公共或私有註冊表。
|
||||
|
||||
## 支援的套件管理器
|
||||
|
||||
目前支援以下套件管理器:
|
||||
|
||||
| Name | Language | Package client |
|
||||
| ------------------------------------------------------------------- | ---------- | ------------------------- |
|
||||
| [Alpine](usage/packages/alpine.md) | - | `apk` |
|
||||
| [Cargo](usage/packages/cargo.md) | Rust | `cargo` |
|
||||
| [Chef](usage/packages/chef.md) | - | `knife` |
|
||||
| [Composer](usage/packages/composer.md) | PHP | `composer` |
|
||||
| [Conan](usage/packages/conan.md) | C++ | `conan` |
|
||||
| [Conda](usage/packages/conda.md) | - | `conda` |
|
||||
| [Container](usage/packages/container.md) | - | 任何符合OCI規範的客戶端 |
|
||||
| [CRAN](usage/packages/cran.md) | R | - |
|
||||
| [Debian](usage/packages/debian.md) | - | `apt` |
|
||||
| [Generic](usage/packages/generic.md) | - | 任何HTTP客戶端 |
|
||||
| [Go](usage/packages/go.md) | Go | `go` |
|
||||
| [Helm](usage/packages/helm.md) | - | 任何HTTP客戶端, `cm-push` |
|
||||
| [Maven](usage/packages/maven.md) | Java | `mvn`, `gradle` |
|
||||
| [npm](usage/packages/npm.md) | JavaScript | `npm`, `yarn`, `pnpm` |
|
||||
| [NuGet](usage/packages/nuget.md) | .NET | `nuget` |
|
||||
| [Pub](usage/packages/pub.md) | Dart | `dart`, `flutter` |
|
||||
| [PyPI](usage/packages/pypi.md) | Python | `pip`, `twine` |
|
||||
| [RPM](usage/packages/rpm.md) | - | `yum`, `dnf`, `zypper` |
|
||||
| [RubyGems](usage/packages/rubygems.md) | Ruby | `gem`, `Bundler` |
|
||||
| [Swift](usage/packages/rubygems.md) | Swift | `swift` |
|
||||
| [Vagrant](usage/packages/vagrant.md) | - | `vagrant` |
|
||||
|
||||
**以下段落僅適用於未全域禁用套件的情況!**
|
||||
|
||||
## 儲存庫 x 套件
|
||||
|
||||
套件始終屬於所有者(使用者或組織),而不是儲存庫。
|
||||
要將(已上傳的)套件鏈接到儲存庫,請打開該套件的設定頁面,並選擇要將此套件鏈接到的儲存庫。
|
||||
將鏈接到整個套件,而不僅是單個版本。
|
||||
|
||||
鏈接套件將導致在儲存庫的套件列表中顯示該套件,並在套件頁面上顯示到儲存庫的鏈接(以及到儲存庫工單的鏈接)。
|
||||
|
||||
## 訪問限制
|
||||
|
||||
| 套件所有者類型 | 使用者 | 組織 |
|
||||
| ---------------- | ---------------------------------------- | ------------------------------------------ |
|
||||
| **讀取** 訪問 | 公開,如果使用者也是公開的;否則僅限此使用者 | 公開,如果組織是公開的,否則僅限組織成員 |
|
||||
| **寫入** 訪問 | 僅套件所有者 | 具有組織中的管理員或寫入存取權限的組織成員 |
|
||||
|
||||
注意:這些訪問限制可能會[變化](https://github.com/go-gitea/gitea/issues/19270),將通過專門的組織團隊權限添加更細粒度的控制。
|
||||
|
||||
## 建立或上傳套件
|
||||
|
||||
根據套件類型,使用相應的套件管理器。請查看特定套件管理器的子頁面以獲取說明。
|
||||
|
||||
## 查看套件
|
||||
|
||||
您可以在儲存庫頁面上查看儲存庫的套件。
|
||||
|
||||
1. 轉到儲存庫主頁。
|
||||
2. 在導航欄中選擇**套件**
|
||||
|
||||
要查看有關套件的更多詳細資訊,請選擇套件的名稱。
|
||||
|
||||
## 下載套件
|
||||
|
||||
要從儲存庫下載套件:
|
||||
|
||||
1. 在導航欄中選擇**套件**
|
||||
2. 選擇套件的名稱以查看詳細資訊。
|
||||
3. 在 **Assets** 部分,選擇要下載的套件文件的名稱。
|
||||
|
||||
## 刪除套件
|
||||
|
||||
在將套件發佈到套件註冊表後,您無法編輯套件。相反,您必須刪除並重新建立它。
|
||||
|
||||
要從儲存庫中刪除套件:
|
||||
|
||||
1. 在導航欄中選擇**套件**
|
||||
2. 選擇套件的名稱以查看詳細資訊。
|
||||
3. 單擊**刪除套件**以永久刪除套件。
|
||||
|
||||
## 禁用套件註冊表
|
||||
|
||||
包註冊表已自動啟用。要在單個儲存庫中禁用它:
|
||||
|
||||
1. 在導航欄中選擇**設定**。
|
||||
2. 禁用**啟用儲存庫套件註冊表**.
|
||||
|
||||
禁用套件註冊表不會刪除先前發佈的套件。
|
||||
@@ -1,71 +0,0 @@
|
||||
---
|
||||
date: "2022-07-31T00:00:00+00:00"
|
||||
slug: "pub"
|
||||
sidebar_position: 90
|
||||
---
|
||||
|
||||
# Pub 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Pub](https://dart.dev/guides/packages) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用Pub套件註冊表,您需要使用 [dart](https://dart.dev/tools/dart-tool) 和/或 [flutter](https://docs.flutter.dev/reference/flutter-cli). 工具。
|
||||
|
||||
以下範例使用 `dart`。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表並提供憑據,請執行以下操作:
|
||||
|
||||
```shell
|
||||
dart pub token add https://gitea.example.com/api/packages/{owner}/pub
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
您需要提供您的[個人存取權杖](development/api-usage.md#透過-api-認證)。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈套件,請編輯 `pubspec.yaml` 文件,並添加以下行:
|
||||
|
||||
```yaml
|
||||
publish_to: https://gitea.example.com/api/packages/{owner}/pub
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
|
||||
現在,您可以透過運行以下命令來發布套件:
|
||||
|
||||
```shell
|
||||
dart pub publish
|
||||
```
|
||||
|
||||
如果已存在具有相同名稱和版本的套件,則無法發佈套件。您必須先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表安裝Pub套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
dart pub add {package_name} --hosted-url=https://gitea.example.com/api/packages/{owner}/pub/
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
# use latest version
|
||||
dart pub add mypackage --hosted-url=https://gitea.example.com/api/packages/testuser/pub/
|
||||
# specify version
|
||||
dart pub add mypackage:1.0.8 --hosted-url=https://gitea.example.com/api/packages/testuser/pub/
|
||||
```
|
||||
@@ -1,75 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "pypi"
|
||||
sidebar_position: 100
|
||||
---
|
||||
|
||||
# PyPI 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [PyPI](https://pypi.org/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 PyPI 套件註冊表,您需要使用 [pip](https://pypi.org/project/pip/) 工具來消費和使用 [twine](https://pypi.org/project/twine/) 工具來發布套件。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,您需要編輯本地的 `~/.pypirc` 文件。添加以下內容:
|
||||
|
||||
```ini
|
||||
[distutils]
|
||||
index-servers = gitea
|
||||
|
||||
[gitea]
|
||||
repository = https://gitea.example.com/api/packages/{owner}/pypi
|
||||
username = {username}
|
||||
password = {password}
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `username` | 您的 Gitea 使用者名稱 |
|
||||
| `password` | 您的 Gitea 密碼。如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼 |
|
||||
|
||||
## 發佈套件
|
||||
|
||||
通過運行以下命令來發布套件:
|
||||
|
||||
```shell
|
||||
python3 -m twine upload --repository gitea /path/to/files/*
|
||||
```
|
||||
|
||||
套件文件的擴展名為 `.tar.gz` 和 `.whl`。
|
||||
|
||||
如果已存在具有相同名稱和版本的套件,則無法發佈套件。您必須先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表安裝 PyPI 套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
pip install --index-url https://{username}:{password}@gitea.example.com/api/packages/{owner}/pypi/simple --no-deps {package_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ----------------------------- |
|
||||
| `username` | 您的 Gitea 使用者名稱 |
|
||||
| `password` | 您的 Gitea 密碼或個人存取權杖 |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
pip install --index-url https://testuser:[email protected]/api/packages/testuser/pypi/simple --no-deps test_package
|
||||
```
|
||||
|
||||
您可以使用 `--extra-index-url` 替代 `--index-url`,但這樣會使您容易受到依賴混淆攻擊,因為 `pip` 會先檢查官方 PyPi 儲存庫中的套件,然後再檢查指定的自訂儲存庫。請閱讀 `pip` 文件以獲取更多資訊。
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
pip install
|
||||
twine upload
|
||||
```
|
||||
@@ -1,108 +0,0 @@
|
||||
---
|
||||
date: "2023-03-08T00:00:00+00:00"
|
||||
slug: "packages/rpm"
|
||||
sidebar_position: 105
|
||||
---
|
||||
|
||||
# RPM 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [RPM](https://rpm.org/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用RPM註冊表,您需要使用像 `yum`, `dnf` 或 `zypper` 這樣的套件管理器來消費套件。
|
||||
|
||||
以下範例使用 `dnf`。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊RPM註冊表,請將 URL 添加到已知 `apt` 源列表中:
|
||||
|
||||
```shell
|
||||
dnf config-manager --add-repo https://gitea.example.com/api/packages/{owner}/rpm/{group}.repo
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ------- |--------------------------------------|
|
||||
| `owner` | 套件的所有者 |
|
||||
| `group` | 任何名稱,例如 `centos/7`、`el-7`、`fc38` |
|
||||
|
||||
如果註冊表是私有的,請在URL中提供憑據。您可以使用密碼或[個人存取權杖](development/api-usage.md#透過-api-認證):
|
||||
|
||||
```shell
|
||||
dnf config-manager --add-repo https://{username}:{your_password_or_token}@gitea.example.com/api/packages/{owner}/rpm/{group}.repo
|
||||
```
|
||||
|
||||
您還必須將憑據添加到 `/etc/yum.repos.d` 中的 `rpm.repo` 文件中的URL中。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
要發佈RPM套件(`*.rpm`),請執行帶有套件內容的 HTTP `PUT` 操作。
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/rpm/{group}/upload
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- |--------------|
|
||||
| `owner` | 套件的所有者 |
|
||||
| `group` | 套件自訂分組名稱 |
|
||||
|
||||
使用HTTP基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/file.rpm \
|
||||
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/version/upload
|
||||
```
|
||||
|
||||
如果您使用 2FA 或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)替代密碼。您無法將具有相同名稱的文件兩次發佈到套件中。您必須先刪除現有的套件版本。
|
||||
|
||||
伺服器將以以下HTTP狀態碼響應。
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ----------------- | ------------------------------------------------ |
|
||||
| `201 Created` | 套件已發佈 |
|
||||
| `400 Bad Request` | 套件無效 |
|
||||
| `409 Conflict` | 具有相同參數組合的套件文件已經存在於該套件中 |
|
||||
|
||||
## 刪除套件
|
||||
|
||||
要刪除 RPM 套件,請執行 HTTP `DELETE` 操作。如果沒有文件剩餘,這也將刪除套件版本。
|
||||
|
||||
```
|
||||
DELETE https://gitea.example.com/api/packages/{owner}/rpm/{group}/package/{package_name}/{package_version}/{architecture}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `group` | 套件自訂分組 |
|
||||
| `package_name` | 套件名稱 |
|
||||
| `package_version` | 套件版本 |
|
||||
| `architecture` | 套件架構 |
|
||||
|
||||
使用HTTP基本身份驗證的範例請求:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_token_or_password -X DELETE \
|
||||
https://gitea.example.com/api/packages/testuser/rpm/centos/el7/package/test-package/1.0.0/x86_64
|
||||
```
|
||||
|
||||
伺服器將以以下HTTP狀態碼響應:
|
||||
|
||||
| HTTP 狀態碼 | 含義 |
|
||||
| ---------------- | ------------------ |
|
||||
| `204 No Content` | 成功 |
|
||||
| `404 Not Found` | 未找到套件或文件 |
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從RPM註冊表安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
# use latest version
|
||||
dnf install {package_name}
|
||||
# use specific version
|
||||
dnf install {package_name}-{package_version}.{architecture}
|
||||
```
|
||||
@@ -1,115 +0,0 @@
|
||||
---
|
||||
date: "2021-07-20T00:00:00+00:00"
|
||||
slug: "rubygems"
|
||||
sidebar_position: 110
|
||||
---
|
||||
|
||||
# RubyGems 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [RubyGems](https://guides.rubygems.org/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用RubyGems套件註冊表,您需要使用 [gem](https://guides.rubygems.org/command-reference/) 命令行工具來消費和發佈套件。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表,請編輯 `~/.gem/credentials` 文件並添加:
|
||||
|
||||
```ini
|
||||
---
|
||||
https://gitea.example.com/api/packages/{owner}/rubygems: Bearer {token}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ------- | ------------------------------------------------------------------------------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `token` | 您的[個人存取權杖](development/api-usage.md#透過-api-認證) |
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
---
|
||||
https://gitea.example.com/api/packages/testuser/rubygems: Bearer 3bd626f84b01cd26b873931eace1e430a5773cc4
|
||||
```
|
||||
|
||||
## 發佈套件
|
||||
|
||||
通過運行以下命令來發布套件:
|
||||
|
||||
```shell
|
||||
gem push --host {host} {package_file}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | ------------------------ |
|
||||
| `host` | 套件註冊表的URL |
|
||||
| `package_file` | 套件 `.gem` 文件的路徑 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
gem push --host https://gitea.example.com/api/packages/testuser/rubygems test_package-1.0.0.gem
|
||||
```
|
||||
|
||||
如果已經存在相同名稱和版本的套件,您將無法發佈套件。您必須先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表安裝套件,您可以使用 [Bundler](https://bundler.io) 或 `gem`。
|
||||
|
||||
### Bundler
|
||||
|
||||
在您的 `Gemfile` 中添加一個新的 `source` 塊:
|
||||
|
||||
```
|
||||
source "https://gitea.example.com/api/packages/{owner}/rubygems" do
|
||||
gem "{package_name}"
|
||||
end
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
source "https://gitea.example.com/api/packages/testuser/rubygems" do
|
||||
gem "test_package"
|
||||
end
|
||||
```
|
||||
|
||||
之後運行以下命令:
|
||||
|
||||
```shell
|
||||
bundle install
|
||||
```
|
||||
|
||||
### gem
|
||||
|
||||
執行以下命令:
|
||||
|
||||
```shell
|
||||
gem install --host https://gitea.example.com/api/packages/{owner}/rubygems {package_name}
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | -------------- |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件名稱 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
gem install --host https://gitea.example.com/api/packages/testuser/rubygems test_package
|
||||
```
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
gem install
|
||||
bundle install
|
||||
gem push
|
||||
```
|
||||
@@ -1,72 +0,0 @@
|
||||
---
|
||||
date: "2022-11-01T00:00:00+00:00"
|
||||
slug: "storage"
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# 儲存
|
||||
|
||||
本文件描述了套件註冊表的儲存方式以及如何管理儲存。
|
||||
|
||||
## 去重
|
||||
|
||||
套件註冊表具有內置的去重功能,可以對上傳的 Blob 進行去重處理。
|
||||
如果上傳了兩個相同的文件,只會在文件系統上保存一個 Blob。
|
||||
這樣可以確保不會浪費空間用於重複的文件。
|
||||
|
||||
如果上傳了兩個具有相同文件的套件,這兩個套件將顯示相同的大小,但在文件系統上,它們只需要一半的大小。
|
||||
每當刪除一個套件時,只會刪除對底層 Blob 的引用。
|
||||
此時,Blob 不會被刪除,因此它們仍然佔用文件系統上的空間。
|
||||
當上傳新的套件時,現有的 Blob 可能會再次被引用。
|
||||
|
||||
這些無引用的 Blob 會在一個清理任務中被刪除。
|
||||
設定 `OLDER_THAN` 可以設定無引用的 Blob 在被刪除之前保留的時間。
|
||||
|
||||
## 清理規則
|
||||
|
||||
套件註冊表可能會隨著時間的推移而變得很大,如果不進行清理的話。
|
||||
建議刪除不必要的套件並設定清理規則以自動管理套件註冊表的使用情況。
|
||||
每個套件所有者(使用者或組織)都可以管理應用於其套件的清理規則。
|
||||
|
||||
| 設定 | 描述 |
|
||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 啟用 | 打開或關閉清理規則。 |
|
||||
| 類型 | 每個規則管理特定的套件類型。 |
|
||||
| 將模式應用於完整的套件名稱 | 如果啟用,則應用以下模式到完整的套件名稱(`package/version`),否則只使用版本號(`version`)。 |
|
||||
| 保留最近的版本數 | 對於每個套件要始終保留的版本數量。 |
|
||||
| 保留與以下模式匹配的版本 | 確定要保留哪些版本的正則表達式模式。空模式表示不保留任何版本,而 `.+` 表示保留所有版本。即使未設定,容器註冊表也始終保留 `latest` 版本。 |
|
||||
| 刪除早於多少天的版本 | 僅刪除早於所選天數的版本。 |
|
||||
| 刪除與以下模式匹配的版本 | 確定要刪除哪些版本的正則表達式模式。空模式或 `.+` 表示如果沒有其他設定指定,則刪除所有套件。 |
|
||||
|
||||
每個清理規則都可以顯示受影響的套件的預覽。
|
||||
這可以用來檢查清理規則是否正確設定。
|
||||
|
||||
### 正則表達式範例
|
||||
|
||||
正則表達式模式會自動使用 `\A` 和 `\z` 錨點進行包圍。
|
||||
不要在正則表達式模式中包含任何 `\A`、`\z`、`^` 或 `$` 標記,因為它們不是必要的。
|
||||
模式是不區分大小寫的,與 Gitea 中的套件註冊表的行為相匹配。
|
||||
|
||||
| Pattern | Description |
|
||||
| ---------------------------- | ------------------------------------------------------------------------------------------------------------- |
|
||||
| `.*` | 匹配任何可能的版本。 |
|
||||
| `v.+` | 匹配以 `v` 開頭的版本。 |
|
||||
| `release` | 僅匹配版本號為 `release`。 |
|
||||
| `release.*` | 匹配以 `release` 命名或以 `release` 開頭的版本。 |
|
||||
| `.+-temp-.+` | 匹配包含 `-temp-` 的版本。 |
|
||||
| `v.+\|release` | 匹配以 `v` 開頭的版本或版本號為 `release`。 |
|
||||
| `package/v.+\|other/release` | 匹配以 `v` 開頭的 package 的版本或 `other` 的版本號為 `release`。需要啟用*將模式應用於完整的套件名稱*設定。 |
|
||||
|
||||
### 清理規則的工作原理
|
||||
|
||||
清理規則是清理任務的一部分,定期運行。
|
||||
|
||||
清理規則:
|
||||
|
||||
1. 收集所有屬於所有者註冊表的特定套件類型的套件。
|
||||
2. 對於每個套件,收集所有版本。
|
||||
3. 根據 *保留最近的版本數* 的值,從列表中排除版本。
|
||||
4. 根據 *保留與以下模式匹配的版本* 的值,從列表中排除任何版本。
|
||||
5. 根據 *刪除早於多少天的版本* 的值,從列表中排除比這個值更近的版本。
|
||||
6. 根據 *刪除與以下模式匹配的版本* 的值,從列表中排除任何不匹配的版本。
|
||||
7. 刪除剩餘的版本。
|
||||
@@ -1,81 +0,0 @@
|
||||
---
|
||||
date: "2023-01-10T00:00:00+00:00"
|
||||
slug: "swift"
|
||||
sidebar_position: 115
|
||||
---
|
||||
|
||||
# Swift 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Swift](https://www.swift.org/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Swift 套件註冊表,您需要使用 [swift](https://www.swift.org/getting-started/) 消費套件,並使用 HTTP 客戶端(如 `curl`)發佈套件。
|
||||
|
||||
## 設定套件註冊表
|
||||
|
||||
要註冊套件註冊表並提供憑據,請執行以下命令:
|
||||
|
||||
```shell
|
||||
swift package-registry set https://gitea.example.com/api/packages/{owner}/swift -login {username} -password {password}
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `owner` | 套件的所有者。 |
|
||||
| `username` | 您的 Gitea 使用者名稱。 |
|
||||
| `password` | 您的 Gitea 密碼。如果您使用兩步驗證或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。 |
|
||||
|
||||
登入是可選的,只有在套件註冊表是私有的情況下才需要。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
首先,您需要打包套件的內容:
|
||||
|
||||
```shell
|
||||
swift package archive-source
|
||||
```
|
||||
|
||||
要發佈套件,請執行一個帶有套件內容的 HTTP `PUT` 請求,將內容放在請求正文中。
|
||||
|
||||
```shell --user your_username:your_password_or_token \
|
||||
curl -X PUT --user {username}:{password} \
|
||||
-H "Accept: application/vnd.swift.registry.v1+json" \
|
||||
-F source-archive=@/path/to/package.zip \
|
||||
-F metadata={metadata} \
|
||||
https://gitea.example.com/api/packages/{owner}/swift/{scope}/{name}/{version}
|
||||
```
|
||||
|
||||
| 佔位符 | 描述 |
|
||||
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `username` | 您的 Gitea 使用者名稱。 |
|
||||
| `password` | 您的 Gitea 密碼。如果您使用兩步驗證或 OAuth,請使用[個人存取權杖](development/api-usage.md#透過-api-認證)代替密碼。 |
|
||||
| `owner` | 套件的所有者。 |
|
||||
| `scope` | 套件的作用域。 |
|
||||
| `name` | 套件的名稱。 |
|
||||
| `version` | 套件的版本。 |
|
||||
| `metadata` | (可選)套件的元資料。以 JSON 編碼的子集,格式參考 https://schema.org/SoftwareSourceCode |
|
||||
|
||||
如果已經存在相同名稱和版本的套件,則無法發佈套件。您必須首先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表安裝 Swift 套件,請將其添加到 `Package.swift` 文件的依賴項列表中:
|
||||
|
||||
```
|
||||
dependencies: [
|
||||
.package(id: "{scope}.{name}", from:"{version}")
|
||||
]
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| --------- | -------------- |
|
||||
| `scope` | 套件的作用域 |
|
||||
| `name` | 套件的名稱 |
|
||||
| `version` | 套件的版本 |
|
||||
|
||||
之後,執行以下命令來安裝它:
|
||||
|
||||
```shell
|
||||
swift package resolve
|
||||
```
|
||||
@@ -1,66 +0,0 @@
|
||||
---
|
||||
date: "2022-08-23T00:00:00+00:00"
|
||||
slug: "vagrant"
|
||||
sidebar_position: 120
|
||||
---
|
||||
|
||||
# Vagrant 套件註冊表
|
||||
|
||||
為您的使用者或組織發佈 [Vagrant](https://www.vagrantup.com/) 套件。
|
||||
|
||||
## 要求
|
||||
|
||||
要使用 Vagrant 套件註冊表,您需要安裝 [Vagrant](https://www.vagrantup.com/downloads) 並使用類似於 `curl` 的工具進行 HTTP 請求。
|
||||
|
||||
## 發佈套件
|
||||
|
||||
透過執行 HTTP PUT 請求將 Vagrant box 發佈到註冊表:
|
||||
|
||||
```
|
||||
PUT https://gitea.example.com/api/packages/{owner}/vagrant/{package_name}/{package_version}/{provider}.box
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| ----------------- | ------------------------------------------------------------------ |
|
||||
| `owner` | 套件的所有者 |
|
||||
| `package_name` | 套件的名稱 |
|
||||
| `package_version` | 套件的版本,相容 semver 格式 |
|
||||
| `provider` | [支援的提供程式名稱](https://www.vagrantup.com/docs/providers)之一 |
|
||||
|
||||
上傳 Hyper-V box 的範例:
|
||||
|
||||
```shell
|
||||
curl --user your_username:your_password_or_token \
|
||||
--upload-file path/to/your/vagrant.box \
|
||||
https://gitea.example.com/api/packages/testuser/vagrant/test_system/1.0.0/hyperv.box
|
||||
```
|
||||
|
||||
如果已經存在相同名稱、版本和提供程式的套件,則無法發佈套件。您必須首先刪除現有的套件。
|
||||
|
||||
## 安裝套件
|
||||
|
||||
要從套件註冊表安裝套件,請執行以下命令:
|
||||
|
||||
```shell
|
||||
vagrant box add "https://gitea.example.com/api/packages/{owner}/vagrant/{package_name}"
|
||||
```
|
||||
|
||||
| 參數 | 描述 |
|
||||
| -------------- | --------------- |
|
||||
| `owner` | 套件的所有者. |
|
||||
| `package_name` | 套件的名稱 |
|
||||
|
||||
例如:
|
||||
|
||||
```shell
|
||||
vagrant box add "https://gitea.example.com/api/packages/testuser/vagrant/test_system"
|
||||
```
|
||||
|
||||
這將安裝套件的最新版本。要添加特定版本,請使用` --box-version` 參數。
|
||||
如果註冊表是私有的,您可以將您的[個人存取權杖](development/api-usage.md#透過-api-認證)傳遞給 `VAGRANT_CLOUD_TOKEN` 環境變量。
|
||||
|
||||
## 支援的命令
|
||||
|
||||
```
|
||||
vagrant box add
|
||||
```
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "profile-readme"
|
||||
sidebar_position: 12
|
||||
---
|
||||
|
||||
# 個人資料 README
|
||||
|
||||
要在您的 Gitea 個人資料頁面顯示一個 Markdown 文件,只需建立一個名為 `.profile` 的儲存庫,並編輯其中的 `README.md` 文件。Gitea 將自動獲取該文件並在您的儲存庫上方顯示。
|
||||
|
||||
注意:您可以將此儲存庫設為私有。這樣可以隱藏您的源文件,使其對公眾不可見,並允許您將某些文件設為私有。但是,README.md 文件將是您個人資料上唯一存在的文件。如果您希望完全私有化 .profile 儲存庫,則需刪除或重命名 README.md 文件。
|
||||
|
||||
使用者範例 `.profile/README.md`:
|
||||
|
||||

|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"label": "Repository",
|
||||
"position": 10,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"slug": "/usage/repository",
|
||||
"description": "Repository management, Git operations, and content features"
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
|
||||
slug: "clone-filters"
|
||||
sidebar_position: 25
|
||||
aliases:
|
||||
- /zh-tw/clone-filters
|
||||
---
|
||||
|
||||
# 克隆過濾器 (部分克隆)
|
||||
|
||||
Git 引入了 `--filter` 選項用於 `git clone` 命令,該選項可以過濾掉大文件和對象(如 blob),從而建立一個儲存庫的部分克隆。克隆過濾器對於大型儲存庫和/或按流量計費的連接特別有用,因為完全克隆(不使用 `--filter`)可能會很昂貴(需要下載所有歷史資料)。
|
||||
|
||||
這需要 Git 2.22 或更高版本,無論是在 Gitea 伺服器上還是在客戶端上都需要如此。為了使克隆過濾器正常工作,請確保客戶端上的 Git 版本至少與伺服器上的版本相同(或更高)。以管理員身份登入到 Gitea,然後轉到管理後臺 -> 應用設定,查看伺服器的 Git 版本。
|
||||
|
||||
預設情況下,克隆過濾器是啟用的,除非在 `[git]` 下將 `DISABLE_PARTIAL_CLONE` 設定為 `true`。
|
||||
|
||||
請參閱 [GitHub 部落格文章:瞭解部分克隆](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) 以獲取克隆過濾器的常見用法(無 Blob 和無樹的克隆),以及 [GitLab 部分克隆文件](https://docs.gitlab.com/ee/topics/git/partial_clone.html) 以獲取更高級的用法(例如按文件大小過濾和取消過濾以將部分克隆轉換為完全克隆)。
|
||||
@@ -1,38 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
|
||||
slug: "incoming-email"
|
||||
sidebar_position: 13
|
||||
aliases:
|
||||
- /zh-tw/incoming-email
|
||||
---
|
||||
|
||||
# 郵件接收
|
||||
|
||||
Gitea 支援通過接收郵件執行多種操作。本頁面描述瞭如何進行設定。
|
||||
|
||||
## 要求
|
||||
|
||||
處理接收的電子郵件需要啟用 IMAP 功能的電子郵件帳戶。
|
||||
推薦的策略是使用 [電子郵件子地址](https://en.wikipedia.org/wiki/Email_address#Sub-addressing),但也可以使用 catch-all 郵箱。
|
||||
接收電子電子郵件地址中包含一個使用者/操作特定的令牌,告訴 Gitea 應執行哪個操作。
|
||||
此令牌應該出現在 `To` 和 `Delivered-To` 頭欄位中。
|
||||
|
||||
Gitea 會嘗試檢測自動回覆並跳過它們,電子郵件伺服器也應該設定以減少接收到的干擾(垃圾郵件、通訊訂閱等)。
|
||||
|
||||
## 設定
|
||||
|
||||
要激活處理接收的電子郵件消息功能,您需要在設定文件中設定 `email.incoming` 部分。
|
||||
|
||||
`REPLY_TO_ADDRESS` 包含電子郵件客戶端將要回復的地址。
|
||||
該地址需要包含 `%{token}` 佔位符,該佔位符將被替換為描述使用者/操作的令牌。
|
||||
此佔位符在地址中只能出現一次,並且必須位於地址的使用者部分(`@` 之前)。
|
||||
|
||||
使用電子郵件子地址的範例可能如下:`incoming+%{token}@example.com`
|
||||
|
||||
如果使用 catch-all 郵箱,則佔位符可以出現在地址的使用者部分的任何位置:`incoming+%{token}@example.com`、`incoming_%{token}@example.com`、`%{token}@example.com`
|
||||
|
||||
## 安全性
|
||||
|
||||
在選擇用於接收傳入電子郵件的域時要小心。
|
||||
建議在子域名上接收傳入電子郵件,例如 `incoming.example.com`,以防止與運行在 `example.com` 上的其他服務可能存在的安全問題。
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "profile-readme"
|
||||
sidebar_position: 12
|
||||
---
|
||||
|
||||
# 個人資料 README
|
||||
|
||||
要在您的 Gitea 個人資料頁面顯示一個 Markdown 文件,只需建立一個名為 `.profile` 的儲存庫,並編輯其中的 `README.md` 文件。Gitea 將自動獲取該文件並在您的儲存庫上方顯示。
|
||||
|
||||
注意:您可以將此儲存庫設為私有。這樣可以隱藏您的源文件,使其對公眾不可見,並允許您將某些文件設為私有。但是,README.md 文件將是您個人資料上唯一存在的文件。如果您希望完全私有化 .profile 儲存庫,則需刪除或重命名 README.md 文件。
|
||||
|
||||
使用者範例 `.profile/README.md`:
|
||||
|
||||

|
||||
@@ -1,61 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "push"
|
||||
sidebar_position: 15
|
||||
aliases:
|
||||
- /zh-tw/push-to-create
|
||||
- /zh-tw/push-options
|
||||
---
|
||||
|
||||
# 推送
|
||||
|
||||
在將提交推送到 Gitea 伺服器時,還有一些額外的功能。
|
||||
|
||||
## 通過推送打開 PR
|
||||
|
||||
當您第一次將提交推送到非預設分支時,您將收到一個鏈接,您可以單擊該鏈接訪問分支與主分支的比較頁面。
|
||||
從那裡,您可以輕鬆建立一個拉取請求,即使您想要將其目標指向另一個分支。
|
||||
|
||||

|
||||
|
||||
## 推送選項
|
||||
|
||||
在 Gitea `1.13` 版本中,添加了對一些 [推送選項](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt) 的支援。
|
||||
|
||||
### 支援的選項
|
||||
|
||||
- `repo.private` (true|false) - 更改儲存庫的可見性。
|
||||
|
||||
這在與 push-to-create 結合使用時特別有用。
|
||||
|
||||
- `repo.template` (true|false) - 更改儲存庫是否為模板。
|
||||
|
||||
將儲存庫的可見性更改為公開的範例:
|
||||
|
||||
```shell
|
||||
git push -o repo.private=false -u origin main
|
||||
```
|
||||
|
||||
## 推送建立
|
||||
|
||||
推送建立是一項功能,允許您將提交推送到在 Gitea 中尚不存在的儲存庫。這對於自動化和允許使用者建立儲存庫而無需通過 Web 介面非常有用。此功能預設處於禁用狀態。
|
||||
|
||||
### 啟用推送建立
|
||||
|
||||
在 `app.ini` 文件中,將 `ENABLE_PUSH_CREATE_USER` 設定為 `true`,如果您希望允許使用者在自己的使用者帳戶和所屬的組織中建立儲存庫,將 `ENABLE_PUSH_CREATE_ORG` 設定為 `true`。重新啟動 Gitea 以使更改生效。您可以在 [設定速查表](../../administration/config-cheat-sheet.md#儲存庫-repository) 中瞭解有關這兩個選項的更多資訊。
|
||||
|
||||
### 使用推送建立
|
||||
|
||||
假設您在當前目錄中有一個 git 儲存庫,您可以透過運行以下命令將提交推送到在 Gitea 中尚不存在的儲存庫:
|
||||
|
||||
```shell
|
||||
# 添加要推送到的遠程倉庫
|
||||
git remote add origin git@{domain}:{username}/{尚不存在的倉庫名稱}.git
|
||||
|
||||
# 推送到遠程倉庫
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
這假設您使用的是 SSH 遠程,但您也可以使用 HTTPS 遠程。
|
||||
|
||||
推送建立將預設使用 `app.ini` 中定義的可見性 `DEFAULT_PUSH_CREATE_PRIVATE`。
|
||||
@@ -1,98 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "repo-mirror"
|
||||
sidebar_position: 45
|
||||
aliases:
|
||||
- /zh-tw/repo-mirror
|
||||
---
|
||||
|
||||
# 儲存庫鏡像
|
||||
|
||||
儲存庫鏡像允許將儲存庫與外部源之間進行鏡像。您可以使用它在儲存庫之間鏡像分支、標籤和提交。
|
||||
|
||||
## 使用場景
|
||||
|
||||
以下是一些儲存庫鏡像的可能使用場景:
|
||||
|
||||
- 您遷移到了 Gitea,但仍需要在其他源中保留您的專案。在這種情況下,您可以簡單地設定它以進行鏡像到 Gitea(拉取),這樣您的 Gitea 實例中就可以獲取到所有必要的提交歷史、標籤和分支。
|
||||
- 您在其他源中有一些舊專案,您不再主動使用,但出於歸檔目的不想刪除。在這種情況下,您可以建立一個推送鏡像,以便您的活躍的 Gitea 儲存庫可以將其更改推送到舊位置。
|
||||
|
||||
## 從遠程儲存庫拉取
|
||||
|
||||
對於現有的遠程儲存庫,您可以按照以下步驟設定拉取鏡像:
|
||||
|
||||
1. 在右上角的“建立...”菜單中選擇“遷移外部儲存庫”。
|
||||
2. 選擇遠程儲存庫服務。
|
||||
3. 輸入儲存庫的 URL。
|
||||
4. 如果儲存庫需要身份驗證,請填寫您的身份驗證資訊。
|
||||
5. 選中“該儲存庫將是一個鏡像”複選框。
|
||||
6. 選擇“遷移儲存庫”以保存設定。
|
||||
|
||||
現在,該儲存庫會定期從遠程儲存庫進行鏡像。您可以透過在儲存庫設定中選擇“立即同步”來強制進行同步。
|
||||
|
||||
:::warning
|
||||
:exclamation::exclamation: **注意:**您只能為尚不存在於您的實例上的儲存庫設定拉取鏡像。一旦儲存庫建立成功,您就無法再將其轉換為拉取鏡像。:exclamation::exclamation:
|
||||
:::
|
||||
|
||||
## 推送到遠程儲存庫
|
||||
|
||||
對於現有的儲存庫,您可以按照以下步驟設定推送鏡像:
|
||||
|
||||
1. 在儲存庫中,轉到**設定** > **儲存庫**,然後進入**鏡像設定**部分。
|
||||
2. 輸入一個儲存庫的 URL。
|
||||
3. 如果儲存庫需要身份驗證,請展開**授權**部分並填寫您的身份驗證資訊。請注意,所請求的**密碼**也可以是您的存取權杖。
|
||||
4. 選擇**添加推送鏡像**以保存設定。
|
||||
|
||||
該儲存庫現在會定期鏡像到遠程儲存庫。您可以透過選擇**立即同步**來強制同步。如果出現錯誤,會顯示一條消息幫助您解決問題。
|
||||
|
||||
:::warning
|
||||
:exclamation::exclamation: **注意:** 這將強制推送到遠程儲存庫。這將覆蓋遠程儲存庫中的任何更改! :exclamation::exclamation:
|
||||
:::
|
||||
|
||||
### 從 Gitea 向 GitHub 設定推送鏡像
|
||||
|
||||
要從 Gitea 設定鏡像到 GitHub,您需要按照以下步驟進行操作:
|
||||
|
||||
1. 建立一個具有選中 _public_repo_ 選項的 [GitHub 個人存取權杖](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token)。
|
||||
2. 在 GitHub 上建立一個同名的儲存庫。與 Gitea 不同,GitHub 不支援通過推送到遠程來建立儲存庫。如果您的現有遠程儲存庫與您的 Gitea 儲存庫具有相同的提交歷史,您也可以使用現有的遠程儲存庫。
|
||||
3. 在您的 Gitea 儲存庫設定中,填寫**Git 遠程儲存庫 URL**:`https://github.com/<your_github_group>/<your_github_project>.git`。
|
||||
4. 使用您的 GitHub 使用者名稱填寫**授權**欄位,並將個人存取權杖作為**密碼**。
|
||||
5. (可選,適用於 Gitea 1.18+)選擇`當推送新提交時同步`,這樣一旦有更改,鏡像將會及時更新。如果您願意,您還可以禁用定期同步。
|
||||
6. 選擇**添加推送鏡像**以保存設定。
|
||||
|
||||
儲存庫會很快進行推送。要強制推送,請選擇**立即同步**按鈕。
|
||||
|
||||
### 從 Gitea 向 GitLab 設定推送鏡像
|
||||
|
||||
要從 Gitea 設定鏡像到 GitLab,您需要按照以下步驟進行操作:
|
||||
|
||||
1. 建立具有 _write_repository_ 作用域的 [GitLab 個人存取權杖](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)。
|
||||
2. 填寫**Git 遠程儲存庫 URL**:`https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.git`。
|
||||
3. 在**授權**欄位中填寫 `oauth2` 作為**使用者名稱**,並將您的 GitLab 個人存取權杖作為**密碼**。
|
||||
4. 選擇**添加推送鏡像**以保存設定。
|
||||
|
||||
儲存庫會很快進行推送。要強制推送,請選擇**立即同步**按鈕。
|
||||
|
||||
### 從 Gitea 向 Bitbucket 設定推送鏡像
|
||||
|
||||
要從 Gitea 設定鏡像到 Bitbucket,您需要按照以下步驟進行操作:
|
||||
|
||||
1. 建立一個具有選中 _Repository Write_ 選項的 [Bitbucket 應用密碼](https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/)。
|
||||
2. 填寫**Git 遠程儲存庫 URL**:`https://bitbucket.org/<your_bitbucket_group_or_name>/<your_bitbucket_project>.git`。
|
||||
3. 使用您的 Bitbucket 使用者名稱填寫**授權**欄位,並將應用密碼作為**密碼**。
|
||||
4. 選擇**添加推送鏡像**以保存設定。
|
||||
|
||||
儲存庫會很快進行推送。要強制推送,請選擇**立即同步**按鈕。
|
||||
|
||||
### 鏡像現有的 ssh 儲存庫
|
||||
|
||||
當前,Gitea 不支援從 ssh 儲存庫進行鏡像。如果您想要鏡像一個 ssh 儲存庫,您需要將其轉換為 http 儲存庫。您可以使用以下命令將現有的 ssh 儲存庫轉換為 http 儲存庫:
|
||||
|
||||
1. 確保運行 gitea 的使用者有權限訪問您試圖從 shell 鏡像到的 git 儲存庫。
|
||||
2. 在 Web 介面的版本庫設定 > git 鉤子中為鏡像添加一個接收後鉤子。
|
||||
|
||||
```
|
||||
#!/usr/bin/env bash
|
||||
git push --mirror --quiet [email protected]:username/repository.git &>/dev/null &
|
||||
echo "GitHub mirror initiated .."
|
||||
```
|
||||
-76
@@ -1,76 +0,0 @@
|
||||
---
|
||||
date: "2023-05-23T09:00:00+08:00"
|
||||
slug: "template-repositories"
|
||||
sidebar_position: 14
|
||||
aliases:
|
||||
- /zh-tw/template-repositories
|
||||
---
|
||||
|
||||
# 模板儲存庫
|
||||
|
||||
Gitea `1.11.0` 及以上版本引入了模板儲存庫,並且其中一個實現的功能是自動展開模板文件中的特定變量。
|
||||
|
||||
要告訴 Gitea 哪些文件需要展開,您必須在模板儲存庫的 `.gitea` 目錄中包含一個 `template` 文件。
|
||||
|
||||
Gitea 使用 [gobwas/glob](https://github.com/gobwas/glob) 作為其 glob 語法。它與傳統的 `.gitignore` 語法非常相似,但可能存在細微的差異。
|
||||
|
||||
## `.gitea/template` 文件範例
|
||||
|
||||
所有路徑都是相對於儲存庫的根目錄
|
||||
|
||||
```gitignore
|
||||
# 倉庫中的所有 .go 文件
|
||||
**.go
|
||||
|
||||
# text 目錄中的所有文本文件
|
||||
text/*.txt
|
||||
|
||||
# 特定文件
|
||||
a/b/c/d.json
|
||||
|
||||
# 匹配批處理文件的大小寫變體
|
||||
**.[bB][aA][tT]
|
||||
```
|
||||
|
||||
**注意:** 當從模板生成儲存庫時,`.gitea` 目錄中的 `template` 文件將被刪除。
|
||||
|
||||
## 參數展開
|
||||
|
||||
在與上述通配符匹配的任何文件中,將會擴展某些變量。
|
||||
|
||||
文件名和路徑的匹配也可以被擴展,並且會經過謹慎的清理處理,以支援跨平台的文件系統。
|
||||
|
||||
所有變量都必須採用`$VAR`或`${VAR}`的形式。要轉義擴展,使用雙重`$$`,例如`$$VAR`或`$${VAR}`。
|
||||
|
||||
| 變量 | 擴展為 | 可轉換 |
|
||||
| -------------------- | ----------------------------- | ------ |
|
||||
| REPO_NAME | 生成的儲存庫名稱 | ✓ |
|
||||
| TEMPLATE_NAME | 模板儲存庫名稱 | ✓ |
|
||||
| REPO_DESCRIPTION | 生成的儲存庫描述 | ✘ |
|
||||
| TEMPLATE_DESCRIPTION | 模板儲存庫描述 | ✘ |
|
||||
| REPO_OWNER | 生成的儲存庫所有者 | ✓ |
|
||||
| TEMPLATE_OWNER | 模板儲存庫所有者 | ✓ |
|
||||
| REPO_LINK | 生成的儲存庫鏈接 | ✘ |
|
||||
| TEMPLATE_LINK | 模板儲存庫鏈接 | ✘ |
|
||||
| REPO_HTTPS_URL | 生成的儲存庫的 HTTP(S) 克隆鏈接 | ✘ |
|
||||
| TEMPLATE_HTTPS_URL | 模板儲存庫的 HTTP(S) 克隆鏈接 | ✘ |
|
||||
| REPO_SSH_URL | 生成的儲存庫的 SSH 克隆鏈接 | ✘ |
|
||||
| TEMPLATE_SSH_URL | 模板儲存庫的 SSH 克隆鏈接 | ✘ |
|
||||
|
||||
## 轉換器 :robot:
|
||||
|
||||
Gitea `1.12.0` 添加了一些轉換器以應用於上述適用的變量。
|
||||
|
||||
例如,要以 `PASCAL`-case 獲取 `REPO_NAME`,你的模板應使用 `${REPO_NAME_PASCAL}`
|
||||
|
||||
將 `go-sdk` 傳遞給可用的轉換器的效果如下...
|
||||
|
||||
| 轉換器 | 效果 |
|
||||
| ------ | ------ |
|
||||
| SNAKE | go_sdk |
|
||||
| KEBAB | go-sdk |
|
||||
| CAMEL | goSdk |
|
||||
| PASCAL | GoSdk |
|
||||
| LOWER | go-sdk |
|
||||
| UPPER | GO-SDK |
|
||||
| TITLE | Go-Sdk |
|
||||
@@ -1,720 +0,0 @@
|
||||
---
|
||||
date: "2016-12-01T16:00:00+02:00"
|
||||
slug: "webhooks"
|
||||
sidebar_position: 30
|
||||
aliases:
|
||||
- /zh-tw/webhooks
|
||||
---
|
||||
|
||||
# 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
|
||||
|
||||
`Gitea` 與 `Gogs` 類型會送出通用 Webhook payload。上面列出的聊天與服務整合
|
||||
則會把同一個內部事件轉換成各自服務所需的請求主體格式。
|
||||
|
||||
本頁分成三個部分:
|
||||
|
||||
- `設定`:如何設定 Webhook 選項,例如 URL、密鑰、分支過濾器與授權標頭。
|
||||
- `投遞`:Gitea 如何送出 Webhook 請求、會附帶哪些標頭,以及如何驗證投遞。
|
||||
- `事件`:Gitea 會投遞哪些事件,以及每個事件包含哪些頂層 payload 參數。
|
||||
|
||||
## 設定
|
||||
|
||||
本節介紹在建立或編輯 Webhook 時可以設定的選項。
|
||||
|
||||
### 設定 Webhook
|
||||
|
||||
建立 Webhook 時,主要設定專案包括:
|
||||
|
||||
- `Target URL`:接收投遞的目標位址。
|
||||
- `HTTP Method`:通用 Webhook 通常使用 `POST`。
|
||||
- `POST Content Type`:通用 Webhook 可使用 `application/json` 或
|
||||
`application/x-www-form-urlencoded`。
|
||||
- `Secret`:用來對原始請求主體進行 HMAC 簽章。
|
||||
- `Authorization Header`:可選的自訂 `Authorization` 標頭,會隨每次請求送出。
|
||||
- `Branch Filter`:可選的分支或標籤過濾規則。
|
||||
- `Trigger On`:`Push Events`、`All Events` 或自訂事件選擇。
|
||||
- `Active`:是否啟用該 Webhook。
|
||||
|
||||
:::note
|
||||
舊版範例中可能仍會在 JSON payload 裡看到 `secret` 欄位。當前版本的 Gitea
|
||||
不會再把 Webhook 密鑰放進 payload 內容中。請務必透過簽章標頭驗證請求。
|
||||
:::
|
||||
|
||||
### 分支過濾器
|
||||
|
||||
分支過濾器使用與
|
||||
[`github.com/gobwas/glob`](https://pkg.go.dev/github.com/gobwas/glob#Compile)
|
||||
相容的 glob 語法。
|
||||
|
||||
- 空值、`*` 或 `**` 代表符合全部。
|
||||
- 像 `main` 這樣的一般分支名稱會符合該分支。
|
||||
- 也支援 `refs/tags/v*` 這類完整 ref。
|
||||
- 支援 `{main,release/*}` 這類大括號表達式。
|
||||
- 過濾器只會套用在帶有 git ref 的事件,例如 `create`、`delete` 與 `push`。
|
||||
- 不帶 ref 的事件,例如 issue 或 release,會忽略分支過濾器。
|
||||
|
||||
範例:
|
||||
|
||||
- `main`
|
||||
- `{main,feature/*}`
|
||||
- `{refs/heads/feature/*,refs/tags/release/*}`
|
||||
|
||||
### 授權標頭
|
||||
|
||||
Gitea 可以設定為在每次 Webhook 投遞時送出自訂的
|
||||
[Authorization header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization)。
|
||||
它與 Webhook 密鑰彼此獨立:
|
||||
|
||||
- 使用密鑰透過 HMAC 驗證請求完整性。
|
||||
- 當接收端需要應用層認證時,使用 `Authorization` 標頭。
|
||||
|
||||
## 投遞
|
||||
|
||||
本節說明 Gitea 如何送出 Webhook 投遞,以及接收端如何識別與驗證這些請求。
|
||||
|
||||
### 投遞行為
|
||||
|
||||
- Webhook 會透過 HTTP 非同步投遞。
|
||||
- 通用 `Gitea` 與 `Gogs` Webhook 支援 `POST` 與 `GET`;通常應使用 `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` | 規範化事件名稱,例如 `push`、`issues` 或 `pull_request`。 |
|
||||
| `X-Gitea-Event-Type` | 更具體的事件類型,例如 `issue_assign` 或 `pull_request_review_comment`。 |
|
||||
| `X-Gitea-Signature` | 原始請求主體的十六進位 HMAC-SHA256 值,不含前綴。 |
|
||||
| `X-Gitea-Hook-Installation-Target-Type` | Webhook 定義所在範圍,通常是 `repository`、`organization`、`user` 或 `system`。預設 Webhook 會先複製到儲存庫後再投遞,因此通常會呈現為 `repository`。 |
|
||||
| `X-Gogs-Delivery`、`X-Gogs-Event`、`X-Gogs-Event-Type`、`X-Gogs-Signature` | 與 Gitea 對應標頭值相同的相容性標頭。 |
|
||||
| `X-GitHub-Delivery`、`X-GitHub-Event`、`X-GitHub-Event-Type` | GitHub 風格相容性標頭。 |
|
||||
| `X-GitHub-Hook-Installation-Target-Type` | GitHub 風格的 Webhook 範圍標頭。 |
|
||||
| `X-Hub-Signature` | GitHub 相容的 HMAC-SHA1 標頭,格式為 `sha1=<digest>`。 |
|
||||
| `X-Hub-Signature-256` | GitHub 相容的 HMAC-SHA256 標頭,格式為 `sha256=<digest>`。 |
|
||||
|
||||
如果未設定密鑰,簽章標頭仍然會存在,但摘要值為空。
|
||||
|
||||
#### `Event` 與 `Event-Type`
|
||||
|
||||
某些 Gitea Webhook 訂閱會被歸類到同一個規範化事件名稱下。例如,issue 指派
|
||||
投遞會歸類到 issue 事件群組:
|
||||
|
||||
```http
|
||||
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
|
||||
<?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 Events`、
|
||||
`Issue Events`、`Pull Request Events` 與 `Workflow Events`。
|
||||
|
||||
### 儲存庫事件
|
||||
|
||||
- `create`、`delete`、`fork`、`push`、`wiki`、`repository`、`release`、`package`、`status`
|
||||
|
||||
#### `create`
|
||||
|
||||
當分支或標籤被建立時,會觸發此事件。
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `sha` | `string` | **必填。** 新建引用對應的物件 ID。 |
|
||||
| `ref` | `string` | **必填。** 被建立的分支名稱或標籤名稱。 |
|
||||
| `ref_type` | `string` | **必填。** 引用類型,例如 `branch` 或 `tag`。 |
|
||||
| `repository` | `object` | **必填。** 建立該引用的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 建立該引用的使用者。 |
|
||||
|
||||
#### `delete`
|
||||
|
||||
當分支或標籤被刪除時,會觸發此事件。
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `ref` | `string` | **必填。** 被刪除的分支名稱或標籤名稱。 |
|
||||
| `ref_type` | `string` | **必填。** 引用類型,例如 `branch` 或 `tag`。 |
|
||||
| `pusher_type` | `string` | **必填。** 刪除該 ref 的行為主體類型。目前 Gitea payload 使用 `user`。 |
|
||||
| `repository` | `object` | **必填。** 刪除該引用所在的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 刪除該引用的使用者。 |
|
||||
|
||||
#### `fork`
|
||||
|
||||
當儲存庫被 fork 時,會觸發此事件。
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `forkee` | `object` | **必填。** 新建立的 fork 儲存庫。 |
|
||||
| `repository` | `object` | **必填。** 被 fork 的原始儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 建立 fork 的使用者。 |
|
||||
|
||||
#### `push`
|
||||
|
||||
當提交被推送到某個分支或標籤時,會觸發此事件。
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `ref` | `string` | **必填。** 被推送的完整 ref,例如 `refs/heads/main`。 |
|
||||
| `before` | `string` | **必填。** 推送前的提交 SHA。 |
|
||||
| `after` | `string` | **必填。** 推送後的提交 SHA。 |
|
||||
| `compare_url` | `string` | **必填。** 用於比較 `before` 與 `after` 的 URL。 |
|
||||
| `commits` | `array` | **必填。** 本次推送包含的提交清單。 |
|
||||
| `total_commits` | `integer` | **必填。** 本次推送中的提交數量。 |
|
||||
| `head_commit` | `object` | 本次推送中的最新提交。 |
|
||||
| `repository` | `object` | **必填。** 接收此次推送的儲存庫。 |
|
||||
| `pusher` | `object` | **必填。** 執行推送的使用者。 |
|
||||
| `sender` | `object` | **必填。** 觸發 Webhook 的使用者。 |
|
||||
|
||||
#### `wiki`
|
||||
|
||||
當 Wiki 頁面被建立、編輯或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `created`、`edited`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** Wiki 頁面操作類型。 |
|
||||
| `repository` | `object` | **必填。** 擁有該 Wiki 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 修改 Wiki 頁面的使用者。 |
|
||||
| `page` | `string` | **必填。** Wiki 頁面名稱。 |
|
||||
| `comment` | `string` | Wiki 提交訊息或註解。 |
|
||||
|
||||
#### `repository`
|
||||
|
||||
當儲存庫被建立或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `created`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 儲存庫操作類型。 |
|
||||
| `repository` | `object` | **必填。** 被建立或刪除的儲存庫。 |
|
||||
| `organization` | `object` | 當儲存庫屬於某個組織時會出現。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
|
||||
#### `release`
|
||||
|
||||
當發行版本被發佈、更新或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `published`、`updated`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** Release 操作類型。 |
|
||||
| `release` | `object` | **必填。** 被操作的發行版本。 |
|
||||
| `repository` | `object` | **必填。** 包含該發行版本的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
|
||||
#### `package`
|
||||
|
||||
當套件被建立或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `created`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 套件操作類型。 |
|
||||
| `repository` | `object` | 與該套件關聯的儲存庫;如果適用則會出現。 |
|
||||
| `package` | `object` | **必填。** 被操作的套件。 |
|
||||
| `organization` | `object` | 當套件擁有者是組織時會出現。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
|
||||
#### `status`
|
||||
|
||||
當透過 API 建立或更新提交狀態時,會觸發此事件。
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `commit` | `object` | 與該狀態關聯的提交。 |
|
||||
| `context` | `string` | **必填。** 狀態內容,例如 `ci/build`。 |
|
||||
| `created_at` | `string` | **必填。** 狀態建立時間。 |
|
||||
| `description` | `string` | 狀態描述文字。 |
|
||||
| `id` | `integer` | **必填。** 狀態識別碼。 |
|
||||
| `repository` | `object` | **必填。** 包含該提交的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 建立該狀態的使用者。 |
|
||||
| `sha` | `string` | **必填。** 提交 SHA。 |
|
||||
| `state` | `string` | **必填。** 狀態值,例如 `pending`、`success`、`error` 或 `failure`。 |
|
||||
| `target_url` | `string` | 與該狀態關聯的目標 URL。 |
|
||||
| `updated_at` | `string` | 狀態最後更新時間。 |
|
||||
|
||||
與多數其他 payload 不同,此事件不使用 `action` 欄位,狀態變化透過 `state`
|
||||
欄位表示。
|
||||
|
||||
### 議題事件
|
||||
|
||||
- `issues`、`issue_assign`、`issue_label`、`issue_milestone`、`issue_comment`
|
||||
|
||||
#### `issues`
|
||||
|
||||
當 issue 被開啟、關閉、重新開啟、編輯或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `opened`、`closed`、`reopened`、`edited`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** Issue 操作類型。 |
|
||||
| `number` | `integer` | **必填。** Issue 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `issue` | `object` | **必填。** 被操作的 issue。 |
|
||||
| `repository` | `object` | **必填。** 包含該 issue 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 issue 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
|
||||
#### `issue_assign`
|
||||
|
||||
當 issue 被指派或取消指派時,會觸發此事件。
|
||||
|
||||
**動作類型:** `assigned`、`unassigned`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 指派操作類型。 |
|
||||
| `number` | `integer` | **必填。** Issue 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `issue` | `object` | **必填。** 被操作的 issue。 |
|
||||
| `repository` | `object` | **必填。** 包含該 issue 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 issue 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
|
||||
#### `issue_label`
|
||||
|
||||
當 issue 標籤被更新或清空時,會觸發此事件。
|
||||
|
||||
**動作類型:** `label_updated`、`label_cleared`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 標籤更新操作類型。 |
|
||||
| `number` | `integer` | **必填。** Issue 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `issue` | `object` | **必填。** 被操作的 issue。 |
|
||||
| `repository` | `object` | **必填。** 包含該 issue 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 issue 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
|
||||
#### `issue_milestone`
|
||||
|
||||
當 issue 被設定里程碑或移除里程碑時,會觸發此事件。
|
||||
|
||||
**動作類型:** `milestoned`、`demilestoned`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 里程碑操作類型。 |
|
||||
| `number` | `integer` | **必填。** Issue 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `issue` | `object` | **必填。** 被操作的 issue。 |
|
||||
| `repository` | `object` | **必填。** 包含該 issue 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 issue 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
|
||||
#### `issue_comment`
|
||||
|
||||
當 issue 評論被建立、編輯或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `created`、`edited`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 評論操作類型。 |
|
||||
| `issue` | `object` | **必填。** 該評論所屬的 issue。 |
|
||||
| `pull_request` | `object` | 當該評論位於 pull request 時間線上時會出現。 |
|
||||
| `comment` | `object` | **必填。** 被建立、編輯或刪除的評論。 |
|
||||
| `changes` | `object` | 可選。當操作類型為 `edited` 時,表示評論內容的舊值。 |
|
||||
| `repository` | `object` | **必填。** 包含該 issue 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `is_pull` | `boolean` | **必填。** 該評論是否位於 pull request 時間線上。 |
|
||||
|
||||
### Pull Request 事件
|
||||
|
||||
- `pull_request`、`pull_request_assign`、`pull_request_label`、`pull_request_milestone`、`pull_request_comment`、`pull_request_review`、`pull_request_review_approved`、`pull_request_review_rejected`、`pull_request_review_comment`、`pull_request_sync`、`pull_request_review_request`
|
||||
|
||||
#### `pull_request`
|
||||
|
||||
當 pull request 被開啟、關閉、重新開啟、編輯或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `opened`、`closed`、`reopened`、`edited`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** Pull request 操作類型。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被操作的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 pull request 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | 在 pull request review 事件中會出現。 |
|
||||
|
||||
#### `pull_request_assign`
|
||||
|
||||
當 pull request 被指派或取消指派時,會觸發此事件。
|
||||
|
||||
**動作類型:** `assigned`、`unassigned`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 指派操作類型。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被操作的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 pull request 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | 在 pull request review 事件中會出現。 |
|
||||
|
||||
#### `pull_request_label`
|
||||
|
||||
當 pull request 標籤被更新或清空時,會觸發此事件。
|
||||
|
||||
**動作類型:** `label_updated`、`label_cleared`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 標籤更新操作類型。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被操作的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 pull request 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | 在 pull request review 事件中會出現。 |
|
||||
|
||||
#### `pull_request_milestone`
|
||||
|
||||
當 pull request 被設定里程碑或移除里程碑時,會觸發此事件。
|
||||
|
||||
**動作類型:** `milestoned`、`demilestoned`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 里程碑操作類型。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被操作的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 pull request 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | 在 pull request review 事件中會出現。 |
|
||||
|
||||
#### `pull_request_comment`
|
||||
|
||||
當 pull request 時間線評論被建立、編輯或刪除時,會觸發此事件。
|
||||
|
||||
**動作類型:** `created`、`edited`、`deleted`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 評論操作類型。 |
|
||||
| `issue` | `object` | **必填。** 與該 pull request 關聯的 issue 記錄。 |
|
||||
| `pull_request` | `object` | **必填。** 評論所屬的 pull request。 |
|
||||
| `comment` | `object` | **必填。** 被建立、編輯或刪除的評論。 |
|
||||
| `changes` | `object` | 可選。當操作類型為 `edited` 時,表示評論內容的舊值。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `is_pull` | `boolean` | **必填。** 對此事件而言固定為 `true`。 |
|
||||
|
||||
#### `pull_request_review`
|
||||
|
||||
這是 Webhook 設定介面中的一個僅用於訂閱的彙總事件。
|
||||
|
||||
它不會產生獨立的投遞 payload。勾選後,Gitea 實際投遞的是更具體的
|
||||
`pull_request_review_approved`、`pull_request_review_rejected` 與
|
||||
`pull_request_review_comment` 事件。
|
||||
|
||||
#### `pull_request_review_approved`
|
||||
|
||||
當 pull request review 以覈准形式提交時,會觸發此事件。
|
||||
|
||||
**動作類型:** `reviewed`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 固定為 `reviewed`。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被審查的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 提交該審查的使用者。 |
|
||||
| `commit_id` | `string` | 與該審查事件關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | **必填。** 審查 payload。對此事件而言,`review.type` 為 `approved`。 |
|
||||
|
||||
#### `pull_request_review_rejected`
|
||||
|
||||
當 pull request review 以拒絕或請求修改的形式提交時,會觸發此事件。
|
||||
|
||||
**動作類型:** `reviewed`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 固定為 `reviewed`。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被審查的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 提交該審查的使用者。 |
|
||||
| `commit_id` | `string` | 與該審查事件關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | **必填。** 審查 payload。對此事件而言,`review.type` 為 `rejected`。 |
|
||||
|
||||
#### `pull_request_review_comment`
|
||||
|
||||
當 pull request review 以評論形式提交時,會觸發此事件。
|
||||
|
||||
**動作類型:** `reviewed`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 固定為 `reviewed`。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被審查的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 提交該審查的使用者。 |
|
||||
| `commit_id` | `string` | 與該審查事件關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | **必填。** 審查 payload。對此事件而言,`review.type` 為 `comment`。 |
|
||||
|
||||
#### `pull_request_sync`
|
||||
|
||||
當新的提交被推送後,pull request 被同步時,會觸發此事件。
|
||||
|
||||
**動作類型:** `synchronized`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 固定為 `synchronized`。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被同步的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 在審查請求事件中會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行同步操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該同步事件關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | 在 pull request review 事件中會出現。 |
|
||||
|
||||
#### `pull_request_review_request`
|
||||
|
||||
當請求審查者或移除審查請求時,會觸發此事件。
|
||||
|
||||
**動作類型:** `review_requested`、`review_request_removed`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 審查請求操作類型。 |
|
||||
| `number` | `integer` | **必填。** Pull request 編號。 |
|
||||
| `changes` | `object` | 可選。編輯欄位之前的值,或標籤變更明細。 |
|
||||
| `pull_request` | `object` | **必填。** 被操作的 pull request。 |
|
||||
| `requested_reviewer` | `object` | 被請求或被移除的審查者。 |
|
||||
| `repository` | `object` | **必填。** 包含該 pull request 的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 執行該操作的使用者。 |
|
||||
| `commit_id` | `string` | 與該 pull request 操作關聯的提交 SHA;如果適用則會出現。 |
|
||||
| `review` | `object` | 在 pull request review 事件中會出現。 |
|
||||
|
||||
### 工作流程事件
|
||||
|
||||
- `workflow_run`、`workflow_job`
|
||||
|
||||
#### `workflow_run`
|
||||
|
||||
當 Gitea Actions 工作流程執行狀態發生變化時,會觸發此事件。
|
||||
|
||||
**動作類型:** `queued`、`waiting`、`in_progress`、`completed`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 工作流程執行狀態變化。 |
|
||||
| `workflow` | `object` | **必填。** 工作流程定義。 |
|
||||
| `workflow_run` | `object` | **必填。** 被操作的工作流程執行記錄。 |
|
||||
| `pull_request` | `object` | 當該工作流程執行與某個 pull request 相關時會出現。 |
|
||||
| `organization` | `object` | 當儲存庫擁有者是組織時會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該工作流程的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 觸發該工作流程執行更新的使用者。 |
|
||||
|
||||
#### `workflow_job`
|
||||
|
||||
當 Gitea Actions 工作流程作業狀態發生變化時,會觸發此事件。
|
||||
|
||||
**動作類型:** `queued`、`waiting`、`in_progress`、`completed`
|
||||
|
||||
##### Payload 參數
|
||||
|
||||
| 名稱 | 類型 | 說明 |
|
||||
| --- | --- | --- |
|
||||
| `action` | `string` | **必填。** 工作流程作業狀態變化。 |
|
||||
| `workflow_job` | `object` | **必填。** 被操作的工作流程作業。 |
|
||||
| `pull_request` | `object` | 當該工作流程作業與某個 pull request 相關時會出現。 |
|
||||
| `organization` | `object` | 當儲存庫擁有者是組織時會出現。 |
|
||||
| `repository` | `object` | **必填。** 包含該工作流程作業的儲存庫。 |
|
||||
| `sender` | `object` | **必填。** 觸發該工作流程作業更新的使用者。 |
|
||||
|
||||
## 測試、最近投遞與重新投遞
|
||||
|
||||
每個 Webhook 頁面都包含:
|
||||
|
||||
- `Test Delivery`:會向儲存庫送出一次模擬的 `push` 事件。
|
||||
- `Recent Deliveries`:顯示請求與回應詳細資訊。
|
||||
- `Redelivery`:重新投遞一筆歷史 Webhook 記錄。
|
||||
|
||||
如果儲存庫還沒有任何提交,測試投遞會使用一個產生的假提交,以便仍能測試
|
||||
Webhook。
|
||||
|
||||
## 管理說明
|
||||
|
||||
管理員還可以透過實例層級設定控制 Webhook 投遞,例如主機允許清單、投遞逾時
|
||||
與清理策略。詳見
|
||||
[設定速查表中的 Webhook 小節](../../administration/config-cheat-sheet.md#webhook-webhook)。
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"label": "User Setting",
|
||||
"position": 200,
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"slug": "/usage/user-setting",
|
||||
"description": "Configuring user preferences and settings"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user