From c4caf767ad93b600add65d27703a4e71f5d49d96 Mon Sep 17 00:00:00 2001 From: silverwind <2021+silverwind@noreply.gitea.com> Date: Fri, 25 Sep 2026 02:51:09 +0000 Subject: [PATCH] docs: document `self:`, `builtin:`, `$/` and runner tracing (#553) Documents the `self:` and `builtin:` action prefixes from https://github.com/go-gitea/gitea/pull/39358, https://gitea.com/gitea/runner/pulls/1233 and https://gitea.com/gitea/runner/pulls/871, workflow-relative `$/` actions, and the runner's OpenTelemetry tracing from https://gitea.com/gitea/runner/pulls/1206. 1. Trims the action resolution and `DEFAULT_ACTIONS_URL` docs to state each fact once. 1. Drops outdated runner content from the FAQ and design pages. 1. Syncs zh-cn and zh-tw, including a port of the token permissions page they now link to. _Written by Claude._ Reviewed-on: https://gitea.com/gitea/docs/pulls/553 Reviewed-by: bircni Co-authored-by: silverwind <2021+silverwind@noreply.gitea.com> --- docs/administration/config-cheat-sheet.md | 15 +-- docs/usage/actions/comparison.md | 74 +++++----- docs/usage/actions/design.md | 8 +- docs/usage/actions/faq.md | 86 +++--------- docs/usage/actions/scoped-workflows.md | 4 +- .../administration/config-cheat-sheet.md | 15 +-- .../current/development/api-usage.md | 1 + .../current/usage/actions/comparison.md | 115 +++++++--------- .../current/usage/actions/design.md | 9 +- .../current/usage/actions/faq.md | 91 +++---------- .../current/usage/actions/scoped-workflows.md | 4 +- .../usage/actions/token-permissions.md | 126 ++++++++++++++++++ .../administration/config-cheat-sheet.md | 15 +-- .../current/usage/actions/comparison.md | 117 +++++++--------- .../current/usage/actions/design.md | 9 +- .../current/usage/actions/faq.md | 91 +++---------- .../current/usage/actions/scoped-workflows.md | 4 +- .../usage/actions/token-permissions.md | 126 ++++++++++++++++++ runner-docs/monitoring.md | 10 ++ 19 files changed, 476 insertions(+), 444 deletions(-) create mode 100644 i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md create mode 100644 i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md diff --git a/docs/administration/config-cheat-sheet.md b/docs/administration/config-cheat-sheet.md index b7346061..99faa6d5 100644 --- a/docs/administration/config-cheat-sheet.md +++ b/docs/administration/config-cheat-sheet.md @@ -1702,18 +1702,9 @@ PROXY_HOSTS = *.github.com - `SCOPED_WORKFLOW_DIRS`: **.gitea/scoped_workflows**: Comma-separated list of directories holding [scoped workflows](usage/actions/scoped-workflows.md) (workflows defined in a central source repository that run on other repositories). Must not overlap with `WORKFLOW_DIRS`. Leave empty so no directory is scanned for scoped workflows; none are found or run. - `MAX_RERUN_ATTEMPTS`: **50**: Maximum number of attempts a single workflow run can have (initial run + reruns). Defaults value is 50. Set any positive value that fits your workflow needs. -`DEFAULT_ACTIONS_URL` indicates where the Gitea Actions runners should find the actions with relative path. -For example, `uses: actions/checkout@v4` means `https://github.com/actions/checkout@v4` since the value of `DEFAULT_ACTIONS_URL` is `github`. -And it can be changed to `self` to make it `root_url_of_your_gitea/actions/checkout@v4`. - -Please note that using `self` is not recommended for most cases, as it could make names globally ambiguous. -Additionally, it requires you to mirror all the actions you need to your Gitea instance, which may not be worth it. -Therefore, please use `self` only if you understand what you are doing. - -In earlier versions (`<= 1.19`), `DEFAULT_ACTIONS_URL` could be set to any custom URLs like `https://gitea.com` or `http://your-git-server,https://gitea.com`, and the default value was `https://gitea.com`. -However, later updates removed those options, and now the only options are `github` and `self`, with the default value being `github`. -However, if you want to use actions from other git server, you can use a complete URL in `uses` field, it's supported by Gitea (but not GitHub). -Like `uses: https://gitea.com/actions/checkout@v4` or `uses: http://your-git-server/actions/checkout@v4`. +`DEFAULT_ACTIONS_URL` sets where runners download actions without a host. +With `github`, `uses: actions/checkout@v4` resolves to `https://github.com/actions/checkout@v4`, with `self` to `/actions/checkout@v4`. +`self` requires mirroring every action you use to your instance, so prefer naming the host per action instead: `uses: self:owner/repo@ref` for your instance, or a full URL like `uses: https://gitea.com/actions/checkout@v4` for any other host. ## Other (`other`) diff --git a/docs/usage/actions/comparison.md b/docs/usage/actions/comparison.md index 26477ce0..134f1341 100644 --- a/docs/usage/actions/comparison.md +++ b/docs/usage/actions/comparison.md @@ -6,104 +6,94 @@ sidebar_position: 120 # Compared to GitHub Actions -Even though Gitea Actions is designed to be compatible with GitHub Actions, there are some differences between them. +Gitea Actions is designed to be compatible with GitHub Actions, with the differences below. ## Additional features ### Absolute action URLs -Gitea Actions supports defining actions via absolute URL, which means that you can use actions from any git repository. -Like `uses: https://github.com/actions/checkout@v4` or `uses: http://your_gitea.com/owner/repo@branch`. +`uses:` accepts an absolute URL to any git host, e.g. `uses: https://gitea.com/actions/checkout@v4`. + +### Action prefixes + +`uses:` accepts these prefixes: + +- `self:` references your own Gitea instance, e.g. `uses: self:owner/repo@v1` or `uses: self:owner/repo/.gitea/workflows/build.yml@v1` +- `builtin:` runs an action built into Gitea Runner, which needs no download and no Node in the job image, e.g. `uses: builtin:checkout` + +`builtin:checkout` accepts the `repository`, `ref`, `token`, `path` and `fetch-depth` inputs of `actions/checkout` with the same defaults, and fails on any other input. + +### Workflow-relative actions + +`$/` references the repository and commit of the workflow, or of the enclosing composite action, e.g. `uses: $/.gitea/actions/build`. +Unlike `./`, it needs no checkout first. ### Actions written in Go -Gitea Actions supports writing actions in Go. See [Creating Go Actions](https://blog.gitea.com/creating-go-actions/). ### Support the non-standard syntax @yearly, @monthly, @weekly, @daily, @hourly on schedule -Github Actions doesn't support that. https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule +`schedule` also accepts `@yearly`, `@monthly`, `@weekly`, `@daily` and `@hourly`, which [GitHub does not](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule). ## Unsupported workflows syntax ### `jobs..environment` -See [Workflow syntax for GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment). - -It's ignored by Gitea Actions now. +[`jobs..environment`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment) is ignored. ### Complex `runs-on` -See [Workflow syntax for GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). +[`runs-on`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on) supports: -Gitea Actions supports: - Static strings: `runs-on: self-hosted` - Arrays of labels: `runs-on: [linux, self-hosted]` - String expressions: `runs-on: ${{ github.event_name == 'push' && 'ubuntu-latest' || 'self-hosted' }}` - Arrays containing expressions: `runs-on: [linux, "${{ github.event_name == 'push' && 'ubuntu-latest' || 'self-hosted' }}"]` - ## Missing features ### Package repository authorization -The `GITEA_TOKEN` for a job running within a repository should be able to publish to the associated package repository (i.e. to upload OCI images). See the "packages" scope for the "default access" in [Automatic token authentication](https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication#permissions-for-the-github_token). - -This is not implemented in Gitea Actions now. A workaround for Gitea Actions is to use a Personal Access Token (PAT). See this [github issue and comment](https://github.com/go-gitea/gitea/issues/23642#issuecomment-2119876692) for tracking this feature. +`GITEA_TOKEN` cannot publish to the package registry of its repository, e.g. to push OCI images. +Use a personal access token instead, see [this issue](https://github.com/go-gitea/gitea/issues/23642#issuecomment-2119876692). ### Problem Matchers -Problem Matchers are a way to scan the output of actions for a specified regex pattern and surface that information prominently in the UI. -See [Problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md). - -It's ignored by Gitea Actions now. +[Problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md) are ignored. ### Create an error annotation -See [Creating an annotation for an error](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error) - -It's ignored by Gitea Actions now. +[Error annotations](https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error) are ignored. ### Expressions -For [expressions](https://docs.github.com/en/actions/learn-github-actions/expressions), Gitea Actions supports standard GitHub functions (e.g. `success()`, `failure()`, `always()`, `cancelled()`, `format()`, `toJSON()`) and context variables (like `github`, `matrix`, `vars`, `env`). +[Expressions](https://docs.github.com/en/actions/learn-github-actions/expressions) support the standard GitHub functions and contexts. ## Missing UI features ### Pre and Post steps -Pre and Post steps don't have their own section in the job log user interface. +Pre and post steps have no section of their own in the job log. ### Services steps -Services steps don't have their own section in the job log user interface. +Service steps have no section of their own in the job log. ## Different behavior ### Job token permissions (`permissions`) -Gitea supports `permissions` and `jobs..permissions` to control the default `GITEA_TOKEN` permissions. - -The effective permissions are clamped by the repository/owner settings and are further restricted for fork pull requests and cross-repository access. -GitHub-only scopes such as `statuses`, `checks`, `deployments`, `id-token`, `security-events`, and `pages` are not supported, while Gitea-specific scopes such as `code`, `releases`, `wiki`, and `projects` are available. - +`permissions` and `jobs..permissions` control the `GITEA_TOKEN` permissions, clamped by the repository and owner settings and further restricted for fork pull requests and cross-repository access. +GitHub-only scopes like `statuses`, `checks`, `deployments`, `id-token`, `security-events` and `pages` are not supported, while Gitea adds `code`, `releases`, `wiki` and `projects`. See [Actions job token permissions](token-permissions.md). ### Downloading actions -Previously (Pre 1.21.0), `[actions].DEFAULT_ACTIONS_URL` defaulted to `https://gitea.com`. -We have since restricted this option to only allow two values (`github` and `self`). -When set to `github`, the new default, Gitea will download non-fully-qualified actions from `https://github.com`. -For example, if you use `uses: actions/checkout@v4`, it will download the checkout repository from `https://github.com/actions/checkout.git`. - -If you want to download an action from another git hoster, you can use an absolute URL, e.g. `uses: https://gitea.com/actions/checkout@v4`. - -If your Gitea instance is in an intranet or a restricted area, you can set the URL to `self` to only download actions from your own instance by default. -Of course, you can still use absolute URLs in workflows. - -More details about the `[actions].DEFAULT_ACTIONS_URL` configuration can be found in the [Configuration Cheat Sheet](../../administration/config-cheat-sheet.md#actions-actions)。 +Actions without a host, like `uses: actions/checkout@v4`, are downloaded from `https://github.com`, or from your own instance when `[actions].DEFAULT_ACTIONS_URL` is `self`. +See the [Configuration Cheat Sheet](../../administration/config-cheat-sheet.md#actions-actions). +For other sources, see [Absolute action URLs](#absolute-action-urls), [Action prefixes](#action-prefixes) and [Workflow-relative actions](#workflow-relative-actions). ### Context availability -Context availability is not checked, so you can use the env context on more places. -See [Context availability](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability). +[Context availability](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability) is not checked, so contexts like `env` work in more places. diff --git a/docs/usage/actions/design.md b/docs/usage/actions/design.md index 80a7bc18..ef0f7171 100644 --- a/docs/usage/actions/design.md +++ b/docs/usage/actions/design.md @@ -19,7 +19,7 @@ Additionally, the runner will introduce itself to Gitea and declare what kind of Earlier, we mentioned that `runs-on: ubuntu-latest` in a workflow file means that the job will be run on a runner with the `ubuntu-latest` label. But how does the runner know to run `ubuntu-latest`? The answer lies in mapping the label to an environment. -That's why when you add custom labels during registration, you will need to input some complex content like `my_custom_label:docker://centos:7`. +That's why each label of a runner names an environment, like `my_custom_label:docker://centos:7`. This means that the runner can take the job which needs to run on `my_custom_label`, and it will run it via a docker container with the image `centos:7`. Docker isn't the only option, though. @@ -34,7 +34,6 @@ So, - `my_custom_label:docker://node:18`: Run jobs labeled with `my_custom_label` using the `node:18` Docker image. - `my_custom_label:host`: Run jobs labeled with `my_custom_label` directly on the host. - `my_custom_label`: Same as `my_custom_label:host`. -- `my_custom_label:vm:ubuntu-latest`: (Example only, not implemented) Run jobs labeled with `my_custom_label` using a virtual machine with the `ubuntu-latest` ISO. ## Communication protocol @@ -43,7 +42,7 @@ However, we did not think it was a good idea to have Gitea listen on a new port. Instead, we wanted to reuse the HTTP port, which means we needed a protocol that is compatible with HTTP. We chose to use gRPC over HTTP. -We use [actions-proto-def](https://gitea.com/gitea/actions-proto-def) and [actions-proto-go](https://gitea.com/gitea/actions-proto-go) to wire them up. +The protocol is defined in [actions-proto-def](https://gitea.com/gitea/actions-proto-def), its Go code lives in [actionslib](https://gitea.com/gitea/actionslib). More information about gRPC can be found on [its website](https://grpc.io/). ## Network architecture @@ -71,7 +70,8 @@ However, if a job container tries to fetch code from localhost, it will fail bec ### Connection 3, runner to internet When you use some actions like `actions/checkout@v4`, the runner downloads the scripts, not the job containers. -By default, it downloads from [github.com](http://github.com/), so it requires access to the internet. If you configure the `DEFAULT_ACTIONS_URL` to `self`, then it will download from your Gitea instance by default. Then it will not connect to internet when downloading the action itself. +By default, it downloads them from [github.com](https://github.com/), which requires internet access. +With `DEFAULT_ACTIONS_URL` set to `self`, or with `uses: self:owner/repo@ref`, it downloads them from your Gitea instance instead. It also downloads some docker images from Docker Hub by default, which also requires internet access. However, internet access is not strictly necessary. diff --git a/docs/usage/actions/faq.md b/docs/usage/actions/faq.md index fcf1015c..435ee5e1 100644 --- a/docs/usage/actions/faq.md +++ b/docs/usage/actions/faq.md @@ -27,50 +27,24 @@ Still, this is completely optional since both options have the same effect at th ## Where will the runner download scripts when using actions such as `actions/checkout@v4`? -There are tens of thousands of [actions scripts](https://github.com/marketplace?type=actions) in GitHub, and when you write `uses: actions/checkout@v4`, it downloads the scripts from [github.com/actions/checkout](http://github.com/actions/checkout) by default. -But what if you want to use actions from other places such as gitea.com instead of GitHub? +From `https://github.com` by default, or from your own instance when `[actions].DEFAULT_ACTIONS_URL` is `self`, see the [Configuration Cheat Sheet](../../administration/config-cheat-sheet.md#actions-actions). -The good news is that you can specify the URL prefix to use actions from anywhere. -This is an extra syntax in Gitea Actions. -For example: +To use an action from elsewhere, name its host: -- `uses: https://gitea.com/xxx/xxx@xxx` -- `uses: https://github.com/xxx/xxx@xxx` -- `uses: http://your_gitea_instance.com/xxx@xxx` - -Be careful, the `https://` or `http://` prefix is necessary! - -This is one of the differences from GitHub Actions which supports actions scripts only from GitHub. -But it should allow users much more flexibility in how they run Actions. - -Alternatively, if you want your runners to download actions from your own Gitea instance by default, you can configure it by setting `[actions].DEFAULT_ACTIONS_URL`. -See [Configuration Cheat Sheet](../../administration/config-cheat-sheet.md#actions-actions). +- `uses: https://gitea.com/owner/repo@ref` +- `uses: http://your_gitea_instance.com/owner/repo@ref` +- `uses: self:owner/repo@ref` for your own Gitea instance ## How to limit the permission of the runners? -Runners have no more permissions than simply connecting to your Gitea instance. -When any runner receives a job to run, it will temporarily gain limited permission to the repository associated with the job. -If you want to give more permissions to the runner, allowing it to access more private repositories or external systems, you can pass [secrets](usage/actions/secrets.md) to it. - -Refined permission control to Actions is a complicated job. -In the future, we will add more options to Gitea to make it more configurable, such as allowing more write access to repositories or read access to all repositories in the same organization. +Runners only connect to your Gitea instance. +For each job, a runner gets a `GITEA_TOKEN` limited to the job's repository, see [Actions job token permissions](token-permissions.md). +To give a job access to more private repositories or external systems, pass it [secrets](usage/actions/secrets.md). ## Which operating systems are supported by Gitea Runner? -We released official binaries for Linux, macOS, and Windows. -While other operating systems are theoretically supported if it is supported by golang and docker(docker mode enabled). - -One thing to note is that if you choose to run jobs directly on the host instead of in job containers, the environmental differences between operating systems may cause unexpected failures. - -For example, bash is not available on Windows in most cases, while act tries to use bash to run scripts by default. -Therefore, you need to specify `powershell` as the default shell in your workflow file, see [defaults.run](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun). - - -```yaml -defaults: - run: - shell: powershell -``` +Official binaries are released for Linux, macOS and Windows. +Other systems supported by Go and Docker work in theory. ## How to avoid being hacked? @@ -99,42 +73,13 @@ It is exciting to be able to reuse them. ## What if it runs on multiple labels, such as `runs-on: [label_a, label_b]`? -This is valid syntax. -It means that it should run on runners that have both the `label_a` **and** `label_b` labels, see [Workflow syntax for GitHub Actions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). -Unfortunately, the runner does not work this way until v0.2.11. -As mentioned, we map labels to environments: - -- `ubuntu` → `ubuntu:22.04` -- `centos` → `centos:8` - -But we need to map label groups to environments instead, like so: - -- `[ubuntu]` → `ubuntu:22.04` -- `[with-gpu]` → `linux:with-gpu` -- `[ubuntu, with-gpu]` → `ubuntu:22.04_with-gpu` - -We also need to re-design how tasks are assigned to runners. -A runner with `ubuntu`, `centos`, or `with-gpu` does not necessarily indicate that it can accept jobs with `[centos, with-gpu]`. -Therefore, the runner should inform the Gitea instance that it can only accept jobs with `[ubuntu]`, `[centos]`, `[with-gpu]`, and `[ubuntu, with-gpu]`. -This is not a technical problem, it was just overlooked in the early design. -See [runtime.go#L65](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L65). - -Currently, the runner attempts to match everyone in the labels and uses the first match it finds. +The job runs on a runner that has all of the labels, as on [GitHub](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). +The runner uses the environment of the first label it has. ## What is the difference between agent labels and custom labels for a runner? -![labels](/images/usage/actions/labels.png) - -Agent labels are reported to the Gitea instance by the runner during registration. -Custom labels, on the other hand, are added manually by a Gitea administrator or owners of the organization or repository (depending on the level of the runner). - -However, the design here needs improvement, as it currently has some rough edges. -You can add a custom label such as `centos` to a registered runner, which means the runner will receive jobs with `runs-on: centos`. -However, the runner may not know which environment to use for this label, resulting in it using a default image or leading to a logical dead end. -This default may not match user expectations. -See [runtime.go#L71](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L71). - -In the meantime, we suggest that you re-register your runner if you want to change its labels. +Gitea no longer has custom labels. +A runner declares its labels every time it starts, from its `runner.labels` configuration or the labels given at registration, so change them there and restart the runner. ## Will there be more implementations for Gitea Actions runner? @@ -177,3 +122,6 @@ For events supported only by GitHub, see GitHub's [documentation](https://docs.g Go to the repository's **Settings** > **Actions** > **General** page and add collaborative owners. The private repositories of collaborative owners are allowed to access the actions and workflows in the current repository. + +To share within the same user or organization, add the private repositories under its **Settings** > **Actions** > **General** > **Cross-Repository Access** instead. +See [Cross-repository access](token-permissions.md#cross-repository-access). diff --git a/docs/usage/actions/scoped-workflows.md b/docs/usage/actions/scoped-workflows.md index c9e53a89..cf4e3e4b 100644 --- a/docs/usage/actions/scoped-workflows.md +++ b/docs/usage/actions/scoped-workflows.md @@ -102,8 +102,8 @@ Only a workflow that runs on an event that posts a commit status (`push`, `pull_ Scoped workflows can call reusable workflows: -- A **local** reference (`uses: ./...`) resolves against the **source** repository: the repository the calling workflow's content came from, not the consuming repository. -- A **cross-repository** reference (`uses: owner/repo/...@ref`) is resolved with the **consuming repository's** read permission. If it points to a private repository, make sure every consuming repository can read it; otherwise the workflow will fail there. +- A **local** reference (`uses: ./...` or `uses: $/...`) resolves against the **source** repository: the repository the calling workflow's content came from, not the consuming repository. +- A **cross-repository** reference (`uses: owner/repo/...@ref` or `uses: self:owner/repo/...@ref`) is resolved with the **consuming repository's** read permission. If it points to a private repository, make sure every consuming repository can read it; otherwise the workflow will fail there. A reusable workflow can live under `SCOPED_WORKFLOW_DIRS` (or `WORKFLOW_DIRS`) of the source repository. diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md b/i18n/zh-cn/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md index c9a8c9a5..88ce6de7 100644 --- a/i18n/zh-cn/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md +++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md @@ -1541,18 +1541,9 @@ PROXY_HOSTS = *.github.com - `SCOPED_WORKFLOW_DIRS`:**.gitea/scoped_workflows**:以逗号分隔的目录列表,用于存放[作用域工作流](usage/actions/scoped-workflows.md)(在一个中心源仓库中定义、并在其他仓库上运行的工作流)。不得与 `WORKFLOW_DIRS` 重叠。留空则不会扫描任何目录来查找作用域工作流,因此不会找到或运行任何作用域工作流。 - `MAX_RERUN_ATTEMPTS`:**50**:单个工作流运行最多可以有的尝试次数(初始运行 + 重新运行)。默认 50。可根据需要设置为任何正整数。 -`DEFAULT_ACTIONS_URL` 指示 Gitea 操作运行程序应该在哪里找到带有相对路径的操作。 -例如,`uses: actions/checkout@v4` 表示 `https://github.com/actions/checkout@v4`,因为 `DEFAULT_ACTIONS_URL` 的值为 `github`。 -它可以更改为 `self`,以使其成为 `root_url_of_your_gitea/actions/checkout@v4`。 - -请注意,对于大多数情况,不建议使用 `self`,因为它可能使名称在全局范围内产生歧义。 -此外,它要求您将所有所需的操作镜像到您的 Gitea 实例,这可能不值得。 -因此,请仅在您了解自己在做什么的情况下使用 `self`。 - -在早期版本(`<= 1.19`)中,`DEFAULT_ACTIONS_URL` 可以设置为任何自定义 URL,例如 `https://gitea.com` 或 `http://your-git-server,https://gitea.com`,默认值为 `https://gitea.com`。 -然而,后来的更新删除了这些选项,现在唯一的选项是 `github` 和 `self`,默认值为 `github`。 -但是,如果您想要使用其他 Git 服务器中的操作,您可以在 `uses` 字段中使用完整的 URL,Gitea 支持此功能(GitHub 不支持)。 -例如 `uses: https://gitea.com/actions/checkout@v4` 或 `uses: http://your-git-server/actions/checkout@v4`。 +`DEFAULT_ACTIONS_URL` 设置 runner 从何处下载未指定主机的操作。 +值为 `github` 时,`uses: actions/checkout@v4` 解析为 `https://github.com/actions/checkout@v4`,值为 `self` 时解析为 `/actions/checkout@v4`。 +`self` 要求您将用到的所有操作镜像到您的实例,因此更推荐为每个操作单独指明主机:使用 `uses: self:owner/repo@ref` 指向您的实例,或使用完整 URL(如 `uses: https://gitea.com/actions/checkout@v4`)指向任何其他主机。 ## 其他 (`other`) diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current/development/api-usage.md b/i18n/zh-cn/docusaurus-plugin-content-docs/current/development/api-usage.md index c6496546..1b98d07b 100644 --- a/i18n/zh-cn/docusaurus-plugin-content-docs/current/development/api-usage.md +++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current/development/api-usage.md @@ -12,6 +12,7 @@ aliases: 通常情况下, `ENABLE_SWAGGER` 默认开启并且参数 `MAX_RESPONSE_ITEMS` 默认为 50。您可以从 [Config Cheat Sheet](../administration/config-cheat-sheet.md) 中获取更多配置相关信息。 + ## 通过 API 认证 Gitea 支持以下几种 API 认证方式: diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/comparison.md b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/comparison.md index 5601c54d..5e994654 100644 --- a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/comparison.md +++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/comparison.md @@ -6,120 +6,97 @@ sidebar_position: 15 # 与GitHub Actions的对比 -尽管Gitea Actions旨在与GitHub Actions兼容,但它们之间存在一些差异。 +Gitea Actions旨在与GitHub Actions兼容,差异如下。 ## 额外功能 + ### Action URL绝对路径 -Gitea Actions支持通过URL绝对路径定义actions,这意味着您可以使用来自任何Git存储库的Actions。 -例如,`uses: https://github.com/actions/checkout@v4`或`uses: http://your_gitea.com/owner/repo@branch`。 +`uses:`支持指向任意Git托管平台的绝对URL,例如`uses: https://gitea.com/actions/checkout@v4`。 + + +### 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`输入,默认值相同,其他输入会使步骤失败。 + + +### 相对于工作流的Actions + +`$/`引用工作流所在的仓库和提交,或外层复合Action所在的仓库和提交,例如`uses: $/.gitea/actions/build`。 +与`./`不同,它无需事先检出代码。 ### 使用Go编写Actions -Gitea Actions支持使用Go编写Actions。 请参阅[创建Go Actions](https://blog.gitea.com/creating-go-actions/)。 ### 支持非标准的调度语法 @yearly, @monthly, @weekly, @daily, @hourly -Github Actions 不支持这些语法,详见: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule +`schedule`还支持`@yearly`、`@monthly`、`@weekly`、`@daily`和`@hourly`,而[GitHub不支持](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)。 ## 不支持的工作流语法 -### `concurrency` - -这是用于一次运行一个Job。 -请参阅[使用并发](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。 - -Gitea Actions目前不支持此功能。 - -### `run-name` - -这是工作流生成的工作流运行的名称。 -请参阅[GitHub Actions 的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#run-name)。 - -Gitea Actions目前不支持此功能。 - -### `permissions`和`jobs..permissions` - -请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#permissions)。 - -Gitea Actions目前不支持此功能。 - -### `jobs..timeout-minutes` - -请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)。 - -Gitea Actions目前不支持此功能。 - -### `jobs..continue-on-error` - -请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error)。 - -Gitea Actions目前不支持此功能。 - ### `jobs..environment` -请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment)。 - -Gitea Actions 目前不支持此功能。 +[`jobs..environment`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment)会被忽略。 ### 复杂的`runs-on` -请参阅[GitHub Actions的工作流语法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。 +[`runs-on`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)支持: -Gitea Actions目前只支持`runs-on: xyz`或`runs-on: [xyz]`。 - -### `hashFiles`表达式 - -请参阅[表达式](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles)。 - -Gitea Actions目前不支持此功能,如果使用它,结果将始终为空字符串。 - -作为解决方法,您可以使用[go-hashfiles](https://gitea.com/actions/go-hashfiles)。 +- 静态字符串:`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)。 + ### 问题匹配器 -问题匹配器是一种扫描Actions输出以查找指定正则表达式模式并在用户界面中突出显示该信息的方法。 -请参阅[问题匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)。 - -Gitea Actions目前不支持此功能。 +[问题匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)会被忽略。 ### 为错误创建注释 -请参阅[为错误创建注释](https://docs.github.com/zh/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error)。 - -Gitea Actions目前不支持此功能。 +[错误注释](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), 当前仅 [`always()`](https://docs.github.com/en/actions/learn-github-actions/expressions#always) 被支持。 +[表达式](https://docs.github.com/en/actions/learn-github-actions/expressions)支持GitHub的标准函数和上下文。 ## 缺失的UI功能 ### 预处理和后处理步骤 -预处理和后处理步骤在Job日志用户界面中没有自己的用户界面。 +预处理和后处理步骤在Job日志中没有单独的区块。 ### 服务步骤 -服务步骤在Job日志用户界面中没有自己的用户界面。 +服务步骤在Job日志中没有单独的区块。 ## 不一样的行为 +### `permissions`和`jobs..permissions` + +`permissions`和`jobs..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].DEFAULT_ACTIONS_URL` 保持默认值为 `github` 时,Gitea将会从 https://github.com 下载相对路径的actions。比如: -如果你使用 `uses: actions/checkout@v4`,Gitea将会从 https://github.com/actions/checkout.git 下载这个 actions 项目。 -如果你想要从另外一个 Git服务下载actions,你只需要使用绝对URL `uses: https://gitea.com/actions/checkout@v4` 来下载。 - -如果你的 Gitea 实例是部署在一个互联网限制的网络中,也可以使用绝对地址来下载 actions。你也可以将配置项修改为 `[actions].DEFAULT_ACTIONS_URL = self`。这样所有的相对路径的actions引用,将不再会从 github.com 去下载,而会从这个 Gitea 实例自己的仓库中去下载。例如: `uses: actions/checkout@v4` 将会从 `[server].ROOT_URL`/actions/checkout.git 这个地址去下载 actions。 - -设置`[actions].DEFAULT_ACTIONS_URL`进行配置。请参阅[配置备忘单](../../administration/config-cheat-sheet.md#actions-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)。 ### 上下文可用性 -不检查上下文可用性,因此您可以在更多地方使用env上下文。 -请参阅[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability)。 +不检查[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability),因此`env`等上下文可以在更多地方使用。 diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/design.md b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/design.md index b8b4fa51..a23f03e8 100644 --- a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/design.md +++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/design.md @@ -19,7 +19,7 @@ Gitea Runner部分基于[nektos/act](https://github.com/nektos/act)的硬分支 之前,我们提到工作流文件中的 `runs-on: ubuntu-latest` 表示该Job将在具有`ubuntu-latest`标签的Runner上运行。 但是,Runner如何知道要运行 `ubuntu-latest`?答案在于将标签映射到环境。 -这就是为什么在注册过程中添加自定义标签时,需要输入一些复杂内容,比如`my_custom_label:docker://centos:7`。 +这就是为什么Runner的每个标签都会指定一个环境,比如`my_custom_label:docker://centos:7`。 这意味着Runner可以接受需要在`my_custom_label`上运行的Job,并通过使用`centos:7`镜像的Docker容器来运行它。 然而,Docker不是唯一的选择。 @@ -35,7 +35,6 @@ Runner 也支持直接在主机上运行Job。 - `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`。 -- `my_custom_label:vm:ubuntu-latest`:(仅为示例,未实现)使用带有`ubuntu-latest` ISO的虚拟机运行带有`my_custom_label`标签的Job。 ## 通信协议 @@ -44,7 +43,7 @@ Runner 也支持直接在主机上运行Job。 相反,我们希望重用HTTP端口,这意味着我们需要一个与HTTP兼容的协议。 因此,我们选择使用基于HTTP的gRPC。 -我们使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 进行连接。 +该协议定义在[actions-proto-def](https://gitea.com/gitea/actions-proto-def)中,其Go代码位于[actionslib](https://gitea.com/gitea/actionslib)。 有关 gRPC 的更多信息,请访问[其官方网站](https://grpc.io/)。 ## 网络架构 @@ -72,8 +71,8 @@ Runner 必须能够连接到Gitea以接收任务并发送执行结果回来。 ### 连接 3,runner 到互联网 当您使用诸如 `actions/checkout@v4` 的一些Actions时, runner下载的是脚本,而不是Job容器。 -默认情况下,它从[github.com](http://github.com/)下载,因此需要访问互联网。如果您设置的是 self, -那么默认将从您的当前Gitea实例下载,那么此步骤不需要连接到互联网。 +默认情况下,它从[github.com](https://github.com/)下载这些脚本,这需要访问互联网。 +如果将`DEFAULT_ACTIONS_URL`设置为`self`,或使用`uses: self:owner/repo@ref`,它会改为从您的Gitea实例下载。 它还默认从Docker Hub下载一些Docker镜像,这也需要互联网访问。 然而,互联网访问并不是绝对必需的。 diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/faq.md b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/faq.md index fafa8216..61cd8c9d 100644 --- a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/faq.md +++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/faq.md @@ -27,34 +27,19 @@ DEFAULT_REPO_UNITS = ...,repo.actions ## 使用`actions/checkout@v4`等Actions时,Job容器会从何处下载脚本? -GitHub 上有成千上万个 [Actions 脚本](https://github.com/marketplace?type=actions)。 -当您编写 `uses: actions/checkout@v4` 时,它默认会从 [github.com/actions/checkout](https://github.com/actions/checkout) 下载脚本。 -那如果您想使用一些托管在其它平台上的脚本呢,比如在 gitea.com 上的? +默认从`https://github.com`下载,当`[actions].DEFAULT_ACTIONS_URL`为`self`时则从您自己的实例下载,参见[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。 -好消息是,您可以指定要从任何位置使用Actions的URL前缀。 -这是Gitea Actions中的额外语法。 -例如: +要使用其他位置的Action,请指明其主机: -- `uses: https://gitea.com/xxx/xxx@xxx` -- `uses: https://github.com/xxx/xxx@xxx` -- `uses: http://your_gitea_instance.com/xxx@xxx` - -注意,`https://`或`http://`前缀是必需的! - -这是与 GitHub Actions 的一个区别,GitHub Actions 只允许使用托管在 GitHub 上的 actions 脚本。 -但用户理应拥有权利去灵活决定如何运行 Actions。 - -另外,如果您希望您的 Runner 默认从您自己的 Gitea 实例下载 Actions,可以通过设置 `[actions].DEFAULT_ACTIONS_URL`进行配置。 -参见[配置速查表](../../administration/config-cheat-sheet.md#actions-actions)。 +- `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实例的权限。 -当任何Runner接收到要运行的Job时,它将临时获得与Job关联的仓库的有限权限。 -如果您想为Runner提供更多权限,允许它访问更多私有仓库或外部系统,您可以向其传递[密钥](usage/actions/secrets.md)。 - -对于 Actions 的细粒度权限控制是一项复杂的工作。 -在未来,我们将添加更多选项以使Gitea更可配置,例如允许对仓库进行更多写访问或对同一组织中的所有仓库进行读访问。 +Runner仅连接到您的Gitea实例。 +对于每个Job,Runner会获得一个仅限于该Job所属仓库的`GITEA_TOKEN`,参见[Actions Job令牌权限](token-permissions.md)。 +如需让Job访问更多私有仓库或外部系统,请向其传递[密钥](usage/actions/secrets.md)。 ## 如何避免被黑客攻击? @@ -75,19 +60,8 @@ Runner仅具有连接到您的Gitea实例的权限。 ## Runner 支持哪些操作系统? -它在Linux、macOS和Windows上运行良好。 -虽然理论上支持其他操作系统,但需要进一步测试。 - -需要注意的一点是,如果选择直接在主机上运行Job而不是在Job容器中运行,操作系统之间的环境差异可能会导致意外的失败。 - -例如,在大多数情况下,Windows上没有可用的bash,而act尝试默认使用bash运行脚本。 -因此,您需要在工作流文件中将默认shell指定为`powershell`,参考[defaults.run](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun)。 - -```yaml -defaults: - run: - shell: powershell -``` +官方发布了Linux、macOS和Windows的二进制文件。 +理论上,Go和Docker支持的其他系统也可以运行。 ## 为什么选择GitHub Actions?为什么不选择与GitLab CI/CD兼容的工具? @@ -99,42 +73,13 @@ defaults: ## 如果它在多个标签上运行,例如 `runs-on: [label_a, label_b]`,会发生什么? -这是有效的语法。 -它意味着它应该在具有`label_a` **和** `label_b`标签的Runner上运行,参考[GitHub Actions的工作流语法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。 -不幸的是,runner 并不支持这种方式。 -如上所述,我们将标签映射到环境: - -- `ubuntu` → `ubuntu:22.04` -- `centos` → `centos:8` - -但我们需要将标签组映射到环境,例如: - -- `[ubuntu]` → `ubuntu:22.04` -- `[with-gpu]` → `linux:with-gpu` -- `[ubuntu, with-gpu]` → `ubuntu:22.04_with-gpu` - -我们还需要重新设计任务分配给Runner的方式。 -具有`ubuntu`、`centos`或`with-gpu`的Runner并不一定表示它可以接受`[centos, with-gpu]`的Job。 -因此,Runner应该通知Gitea实例它只能接受具有 `[ubuntu]`、`[centos]`、`[with-gpu]` 和 `[ubuntu, with-gpu]`的Job。 -这不是一个技术问题,只是在早期设计中被忽视了。 -参见[runtime.go#L65](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L65)。 - -目前,runner 尝试匹配标签中的每一个,并使用找到的第一个匹配项。 +该Job会在拥有所有这些标签的Runner上运行,与[GitHub](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)一致。 +Runner会使用这些标签中它所拥有的第一个标签对应的环境。 ## 代理标签和自定义标签对于Runner有什么区别? -![labels](/images/usage/actions/labels.png) - -代理标签是由 Runner 在注册过程中向 Gitea 实例报告的。 -而自定义标签则是由Gitea的管理员或组织或仓库的所有者手动添加的(取决于Runner所属的级别)。 - -然而,目前这方面的设计还有待改进,因为它目前存在一些不完善之处。 -您可以向已注册的Runner添加自定义标签,比如 `centos`,这意味着该Runner将接收具有`runs-on: centos`的Job。 -然而,Runner可能不知道要使用哪个环境来执行该标签,导致它使用默认镜像或导致逻辑死胡同。 -这个默认值可能与用户的期望不符。 -参见[runtime.go#L71](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L71)。 - -与此同时,如果您想更改Runner的标签,我们建议您重新注册Runner。 +Gitea已不再有自定义标签。 +Runner每次启动时都会声明其标签,标签来自`runner.labels`配置或注册时指定的标签,因此请在那里修改并重启Runner。 ## Gitea Actions runner会有更多的实现吗? @@ -165,3 +110,11 @@ defaults: > 对于 `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** > **常规**页面并添加协作所有者。 +协作所有者的私有仓库可以访问当前仓库中的Actions和工作流。 + +如需在同一用户或组织内共享,请改为在该用户或组织的**设置** > **Actions** > **常规** > **跨仓库访问**中添加这些私有仓库。 +参见[跨仓库访问](token-permissions.md#cross-repository-access)。 diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md index a37a6e22..1000357c 100644 --- a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md +++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md @@ -102,8 +102,8 @@ SCOPED_WORKFLOW_DIRS = .gitea/scoped_workflows 作用域工作流可以调用可复用工作流: -- **本地**引用(`uses: ./...`)会相对于**源**仓库解析:即调用方工作流内容的来源仓库,而非消费方仓库。 -- **跨仓库**引用(`uses: owner/repo/...@ref`)会以**消费方仓库的**读取权限来解析。如果它指向一个私有仓库,请确保每个消费方仓库都能读取它,否则工作流会在那里失败。 +- **本地**引用(`uses: ./...` 或 `uses: $/...`)会相对于**源**仓库解析:即调用方工作流内容的来源仓库,而非消费方仓库。 +- **跨仓库**引用(`uses: owner/repo/...@ref` 或 `uses: self:owner/repo/...@ref`)会以**消费方仓库的**读取权限来解析。如果它指向一个私有仓库,请确保每个消费方仓库都能读取它,否则工作流会在那里失败。 可复用工作流可以放在源仓库的 `SCOPED_WORKFLOW_DIRS`(或 `WORKFLOW_DIRS`)之下。 diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md new file mode 100644 index 00000000..4e295512 --- /dev/null +++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md @@ -0,0 +1,126 @@ +--- +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)。 + + +## 权限来源 + +Gitea按以下顺序确定Job令牌的权限: + +1. Job级别的`permissions:`(`jobs..permissions`) +2. 工作流级别的`permissions:`(顶层) +3. 设置中的默认权限(所有者或仓库) + +然后,该结果会受到所配置的最大令牌权限的**限制**(见下文)。 + + +## 支持的工作流语法 + +Gitea支持与GitHub Actions兼容的`permissions:`关键字。 + + +### 标量值 + +```yaml +permissions: read-all # or: write-all +``` + + +### 按权限范围映射 + +```yaml +permissions: + contents: read + issues: write + pull-requests: none +``` + +每个权限范围的有效访问模式值为`read`、`write`和`none`。 + + +### 支持的权限范围 + +- `contents`(适用于`code`和`releases`) +- `code` +- `releases` +- `issues` +- `pull-requests` +- `actions` +- `wiki` +- `projects` +- `packages`(如果目标功能支持) + +如果同时指定了`contents`和更细粒度的权限范围(如`code`或`releases`),则该单元以更细粒度的权限范围为准。 + + +### 兼容性说明 + +Gitea支持GitHub Actions权限范围的一个子集。 +Gitea Actions目前不支持`statuses`、`checks`、`deployments`、`id-token`、`security-events`和`pages`等GitHub专有的权限范围。 + +Gitea还提供了一些仓库单元权限范围,它们在GitHub Actions中不作为独立的权限范围存在: + +- `code` +- `releases` +- `wiki` +- `projects` + + +## 默认权限模式 + +如果工作流和Job都没有定义`permissions:`,Gitea会使用所配置的默认模式: + +- **宽松**:对Job所属仓库的大多数单元拥有读写权限(向后兼容的默认值)。 +- **受限**:对Job所属仓库的`code`、`releases`和`packages`拥有只读权限,默认无权访问其他单元。 + + +## 最大令牌权限(限制) + +您可以为每个仓库单元配置最大权限。 +Job的实际权限按以下方式计算: + +`effective = min(requested, maximum)` + +这意味着工作流可以降低Job的权限,但不能超过您配置的最大权限。 +如果未配置最大权限,则所有权限范围的最大权限默认为`write`。 + + +## 配置位置 + +您可以在以下位置配置默认权限和最大权限: + +- **用户/组织**:`Settings` → `Actions` → `General` +- **仓库**:`Settings` → `Actions` → `General` + - 对于组织中的仓库,可以遵循所有者级别的配置,也可以通过**覆盖所有者级别的配置**选择不遵循。 + +注意:仅在启用**仓库Actions**后,才会显示仓库级别的令牌权限设置。 + + +## Fork拉取请求 + +出于安全考虑,由fork拉取请求触发的工作流始终只拥有仓库内容的只读权限,与工作流的`permissions:`或设置无关。 + + +## 跨仓库访问 + +默认情况下,`GITEA_TOKEN`只能访问: + +- Job所属仓库(依据计算出的权限) +- 公开仓库(只读) + +默认拒绝访问其他私有仓库。 +用户或组织可以通过**设置 → Actions → 常规 → 跨仓库访问**,允许以只读方式访问选定的私有仓库。 + +私有仓库也可以通过**设置 → Actions → 常规**允许选定的协作所有者。 +这样,这些所有者的私有仓库便可读取当前私有仓库以供Actions使用,例如私有Actions和可复用工作流。 + +fork拉取请求的工作流永远不会获得对私有仓库的跨仓库访问权限,即使这些仓库已被列出。 diff --git a/i18n/zh-tw/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md b/i18n/zh-tw/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md index 13083e94..0e19f6f6 100644 --- a/i18n/zh-tw/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md +++ b/i18n/zh-tw/docusaurus-plugin-content-docs/current/administration/config-cheat-sheet.md @@ -1548,18 +1548,9 @@ PROXY_HOSTS = *.github.com - `SCOPED_WORKFLOW_DIRS`:**.gitea/scoped_workflows**:以逗號分隔的目錄列表,用於存放[作用域工作流程](usage/actions/scoped-workflows.md)(在一個中心來源儲存庫中定義、並在其他儲存庫上執行的工作流程)。不得與 `WORKFLOW_DIRS` 重疊。留空則不會掃描任何目錄來尋找作用域工作流程,也就不會找到或執行任何作用域工作流程。 - `MAX_RERUN_ATTEMPTS`:**50**:單個工作流執行最多可以有的嘗試次數(初始執行 + 重新執行)。預設 50。可根據需要設定為任何正整數。 -`DEFAULT_ACTIONS_URL` 指示 Gitea 操作運行程式應該在哪裡找到帶有相對路徑的操作。 -例如,`uses: actions/checkout@v4` 表示 `https://github.com/actions/checkout@v4`,因為 `DEFAULT_ACTIONS_URL` 的值為 `github`。 -它可以更改為 `self`,以使其成為 `root_url_of_your_gitea/actions/checkout@v4`。 - -請注意,對於大多數情況,不建議使用 `self`,因為它可能使名稱在全域範圍內產生歧義。 -此外,它要求您將所有所需的操作鏡像到您的 Gitea 實例,這可能不值得。 -因此,請僅在您瞭解自己在做什麼的情況下使用 `self`。 - -在早期版本(`<= 1.19`)中,`DEFAULT_ACTIONS_URL` 可以設定為任何自訂 URL,例如 `https://gitea.com` 或 `http://your-git-server,https://gitea.com`,預設值為 `https://gitea.com`。 -然而,後來的更新刪除了這些選項,現在唯一的選項是 `github` 和 `self`,預設值為 `github`。 -但是,如果您想要使用其他 Git 伺服器中的操作,您可以在 `uses` 欄位中使用完整的 URL,Gitea 支援此功能(GitHub 不支援)。 -例如 `uses: https://gitea.com/actions/checkout@v4` 或 `uses: http://your-git-server/actions/checkout@v4`。 +`DEFAULT_ACTIONS_URL` 設定 Runner 從何處下載未指定主機的 Actions。 +設為 `github` 時,`uses: actions/checkout@v4` 解析為 `https://github.com/actions/checkout@v4`,設為 `self` 時則解析為 `/actions/checkout@v4`。 +`self` 要求您將用到的每個 Action 都鏡像到您的實例,因此建議改為逐一為 Action 指定主機:您的實例使用 `uses: self:owner/repo@ref`,其他主機則使用完整 URL,例如 `uses: https://gitea.com/actions/checkout@v4`。 ## 其他 (`other`) diff --git a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/comparison.md b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/comparison.md index ae424921..09b1c3de 100644 --- a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/comparison.md +++ b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/comparison.md @@ -6,120 +6,97 @@ sidebar_position: 15 # 與GitHub Actions的對比 -儘管Gitea Actions旨在與GitHub Actions相容,但它們之間存在一些差異。 +Gitea Actions 旨在與 GitHub Actions 相容,差異如下。 ## 額外功能 + ### Action URL絕對路徑 -Gitea Actions支援通過URL絕對路徑定義actions,這意味著您可以使用來自任何Git儲存庫的Actions。 -例如,`uses: https://github.com/actions/checkout@v4`或`uses: http://your_gitea.com/owner/repo@branch`。 +`uses:` 接受指向任意 Git 主機的絕對 URL,例如 `uses: https://gitea.com/actions/checkout@v4`。 + + +### 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` 輸入,預設值相同,其他輸入會使步驟失敗。 + + +### 相對於工作流的 Actions + +`$/` 參照工作流(或外層複合 Action)所在的儲存庫與提交,例如 `uses: $/.gitea/actions/build`。 +與 `./` 不同,它不需要事先簽出程式碼。 ### 使用Go編寫Actions -Gitea Actions支援使用Go編寫Actions。 -請參閱[建立Go Actions](https://blog.gitea.com/creating-go-actions/)。 +請參閱[建立 Go Actions](https://blog.gitea.com/creating-go-actions/)。 ### 支援非標準的調度語法 @yearly, @monthly, @weekly, @daily, @hourly -Github Actions 不支援這些語法,詳見: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule +`schedule` 也接受 `@yearly`、`@monthly`、`@weekly`、`@daily` 和 `@hourly`,[GitHub 則不支援](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)。 ## 不支援的工作流語法 -### `concurrency` - -這是用於一次運行一個Job。 -請參閱[使用併發](https://docs.github.com/zh/actions/using-jobs/using-concurrency)。 - -Gitea Actions目前不支援此功能。 - -### `run-name` - -這是工作流生成的工作流運行的名稱。 -請參閱[GitHub Actions 的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#run-name)。 - -Gitea Actions目前不支援此功能。 - -### `permissions`和`jobs..permissions` - -請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#permissions)。 - -Gitea Actions目前不支援此功能。 - -### `jobs..timeout-minutes` - -請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idtimeout-minutes)。 - -Gitea Actions目前不支援此功能。 - -### `jobs..continue-on-error` - -請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error)。 - -Gitea Actions目前不支援此功能。 - ### `jobs..environment` -請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment)。 - -Gitea Actions 目前不支援此功能。 +[`jobs..environment`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment) 會被忽略。 ### 複雜的`runs-on` -請參閱[GitHub Actions的工作流語法](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。 +[`runs-on`](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on) 支援: -Gitea Actions目前只支援`runs-on: xyz`或`runs-on: [xyz]`。 - -### `hashFiles`表達式 - -請參閱[表達式](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles)。 - -Gitea Actions目前不支援此功能,如果使用它,結果將始終為空字符串。 - -作為解決方法,您可以使用[go-hashfiles](https://gitea.com/actions/go-hashfiles)。 +- 靜態字串:`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)。 + ### 問題匹配器 -問題匹配器是一種掃描Actions輸出以查找指定正則表達式模式並在使用者介面中突出顯示該資訊的方法。 -請參閱[問題匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)。 - -Gitea Actions目前不支援此功能。 +[問題匹配器](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)會被忽略。 ### 為錯誤建立註釋 -請參閱[為錯誤建立註釋](https://docs.github.com/zh/actions/using-workflows/workflow-commands-for-github-actions#example-creating-an-annotation-for-an-error)。 - -Gitea Actions目前不支援此功能。 +[錯誤註釋](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), 當前僅 [`always()`](https://docs.github.com/en/actions/learn-github-actions/expressions#always) 被支援。 +[表達式](https://docs.github.com/en/actions/learn-github-actions/expressions)支援 GitHub 的標準函式與上下文。 ## 缺失的UI功能 ### 預處理和後處理步驟 -預處理和後處理步驟在Job日誌使用者介面中沒有自己的使用者介面。 +預處理和後處理步驟在 Job 日誌中沒有各自獨立的區塊。 ### 服務步驟 -服務步驟在Job日誌使用者介面中沒有自己的使用者介面。 +服務步驟在 Job 日誌中沒有各自獨立的區塊。 ## 不一樣的行為 +### `permissions`和`jobs..permissions` + +`permissions` 和 `jobs..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].DEFAULT_ACTIONS_URL` 保持預設值為 `github` 時,Gitea將會從 https://github.com 下載相對路徑的actions。比如: -如果你使用 `uses: actions/checkout@v4`,Gitea將會從 https://github.com/actions/checkout.git 下載這個 actions 專案。 -如果你想要從另外一個 Git服務下載actions,你只需要使用絕對URL `uses: https://gitea.com/actions/checkout@v4` 來下載。 - -如果你的 Gitea 實例是部署在一個互聯網限制的網路中,也可以使用絕對地址來下載 actions。你也可以將設定項修改為 `[actions].DEFAULT_ACTIONS_URL = self`。這樣所有的相對路徑的actions引用,將不再會從 github.com 去下載,而會從這個 Gitea 實例自己的儲存庫中去下載。例如: `uses: actions/checkout@v4` 將會從 `[server].ROOT_URL`/actions/checkout.git 這個地址去下載 actions。 - -設定`[actions].DEFAULT_ACTIONS_URL`進行設定。請參閱[設定備忘單](../../administration/config-cheat-sheet.md#actions-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)。 ### 上下文可用性 -不檢查上下文可用性,因此您可以在更多地方使用env上下文。 -請參閱[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability)。 +不檢查[上下文可用性](https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability),因此 `env` 等上下文可以在更多地方使用。 diff --git a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/design.md b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/design.md index df62f20e..d119c575 100644 --- a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/design.md +++ b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/design.md @@ -19,7 +19,7 @@ Gitea Runner部分基於[nektos/act](https://github.com/nektos/act)的硬分支 之前,我們提到工作流文件中的 `runs-on: ubuntu-latest` 表示該Job將在具有`ubuntu-latest`標籤的Runner上運行。 但是,Runner如何知道要運行 `ubuntu-latest`?答案在於將標籤映射到環境。 -這就是為什麼在註冊過程中添加自訂標籤時,需要輸入一些複雜內容,比如`my_custom_label:docker://centos:7`。 +這就是為什麼Runner的每個標籤都指定了一個環境,比如`my_custom_label:docker://centos:7`。 這意味著Runner可以接受需要在`my_custom_label`上運行的Job,並通過使用`centos:7`鏡像的Docker容器來運行它。 然而,Docker不是唯一的選擇。 @@ -35,7 +35,6 @@ Runner 也支援直接在主機上運行Job。 - `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`。 -- `my_custom_label:vm:ubuntu-latest`:(僅為範例,未實現)使用帶有`ubuntu-latest` ISO的虛擬機運行帶有`my_custom_label`標籤的Job。 ## 通信協議 @@ -44,7 +43,7 @@ Runner 也支援直接在主機上運行Job。 相反,我們希望重用HTTP端口,這意味著我們需要一個與HTTP相容的協議。 因此,我們選擇使用基於HTTP的gRPC。 -我們使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 進行連接。 +協議定義於[actions-proto-def](https://gitea.com/gitea/actions-proto-def),其Go程式碼位於[actionslib](https://gitea.com/gitea/actionslib)。 有關 gRPC 的更多資訊,請前往[其官方網站](https://grpc.io/)。 ## 網路架構 @@ -72,8 +71,8 @@ Runner 必須能夠連接到Gitea以接收任務併發送執行結果回來。 ### 連接 3,runner到互聯網 當您使用諸如 `actions/checkout@v4` 的一些Actions時,runner 下載的是腳本,而不是Job容器。 -預設情況下,它從[github.com](http://github.com/)下載,因此需要訪問互聯網。如果您設定的是 self, -那麼預設將從您的當前Gitea實例下載,那麼此步驟不需要連接到互聯網。 +預設情況下,它從[github.com](https://github.com/)下載,因此需要訪問互聯網。 +若將`DEFAULT_ACTIONS_URL`設定為`self`,或使用`uses: self:owner/repo@ref`,則改從您的Gitea實例下載。 它還預設從Docker Hub下載一些Docker鏡像,這也需要互聯網訪問。 然而,互聯網訪問並不是絕對必需的。 diff --git a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/faq.md b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/faq.md index 40941c31..5aafe284 100644 --- a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/faq.md +++ b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/faq.md @@ -27,34 +27,19 @@ DEFAULT_REPO_UNITS = ...,repo.actions ## 使用`actions/checkout@v4`等Actions時,Job容器會從何處下載腳本? -GitHub 上有成千上萬個 [Actions 腳本](https://github.com/marketplace?type=actions)。 -當您編寫 `uses: actions/checkout@v4` 時,它預設會從 [github.com/actions/checkout](https://github.com/actions/checkout) 下載腳本。 -那如果您想使用一些託管在其它平台上的腳本呢,比如在 gitea.com 上的? +預設從 `https://github.com` 下載,若 `[actions].DEFAULT_ACTIONS_URL` 為 `self`,則從您自己的實例下載,參見[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。 -好消息是,您可以指定要從任何位置使用Actions的URL前綴。 -這是Gitea Actions中的額外語法。 -例如: +若要使用其他來源的 Action,請指定其主機: -- `uses: https://gitea.com/xxx/xxx@xxx` -- `uses: https://github.com/xxx/xxx@xxx` -- `uses: http://your_gitea_instance.com/xxx@xxx` - -注意,`https://`或`http://`前綴是必需的! - -這是與 GitHub Actions 的一個區別,GitHub Actions 只允許使用託管在 GitHub 上的 actions 腳本。 -但使用者理應擁有權利去靈活決定如何運行 Actions。 - -另外,如果您希望您的 Runner 預設從您自己的 Gitea 實例下載 Actions,可以透過設定 `[actions].DEFAULT_ACTIONS_URL`進行設定。 -參見[設定速查表](../../administration/config-cheat-sheet.md#actions-actions)。 +- `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實例的權限。 -當任何Runner接收到要運行的Job時,它將臨時獲得與Job關聯的儲存庫的有限權限。 -如果您想為Runner提供更多權限,允許它訪問更多私有儲存庫或外部系統,您可以向其傳遞[密鑰](usage/actions/secrets.md)。 - -對於 Actions 的細粒度權限控制是一項複雜的工作。 -在未來,我們將添加更多選項以使Gitea更可設定,例如允許對儲存庫進行更多寫訪問或對同一組織中的所有儲存庫進行讀訪問。 +Runner 只會連接到您的 Gitea 實例。 +對於每個 Job,Runner 會取得一個僅限於該 Job 所屬儲存庫的 `GITEA_TOKEN`,參見 [Actions Job 令牌權限](token-permissions.md)。 +若要讓 Job 存取更多私有儲存庫或外部系統,請向其傳遞[密鑰](usage/actions/secrets.md)。 ## 如何避免被黑客攻擊? @@ -75,19 +60,8 @@ Runner僅具有連接到您的Gitea實例的權限。 ## runner支援哪些操作系統? -它在Linux、macOS和Windows上運行良好。 -雖然理論上支援其他操作系統,但需要進一步測試。 - -需要注意的一點是,如果選擇直接在主機上運行Job而不是在Job容器中運行,操作系統之間的環境差異可能會導致意外的失敗。 - -例如,在大多數情況下,Windows上沒有可用的bash,而act嘗試預設使用bash運行腳本。 -因此,您需要在工作流文件中將預設shell指定為`powershell`,參考[defaults.run](https://docs.github.com/zh/actions/using-workflows/workflow-syntax-for-github-actions#defaultsrun)。 - -```yaml -defaults: - run: - shell: powershell -``` +官方發佈了 Linux、macOS 和 Windows 的二進制檔案。 +理論上,Go 和 Docker 支援的其他系統也能運作。 ## 為什麼選擇GitHub Actions?為什麼不選擇與GitLab CI/CD相容的工具? @@ -99,42 +73,13 @@ defaults: ## 如果它在多個標籤上運行,例如 `runs-on: [label_a, label_b]`,會發生什麼? -這是有效的語法。 -它意味著它應該在具有`label_a` **和** `label_b`標籤的Runner上運行,參考[GitHub Actions的工作流語法](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on)。 -不幸的是,runner 並不支援這種方式。 -如上所述,我們將標籤映射到環境: - -- `ubuntu` → `ubuntu:22.04` -- `centos` → `centos:8` - -但我們需要將標籤組映射到環境,例如: - -- `[ubuntu]` → `ubuntu:22.04` -- `[with-gpu]` → `linux:with-gpu` -- `[ubuntu, with-gpu]` → `ubuntu:22.04_with-gpu` - -我們還需要重新設計任務分配給Runner的方式。 -具有`ubuntu`、`centos`或`with-gpu`的Runner並不一定表示它可以接受`[centos, with-gpu]`的Job。 -因此,Runner應該通知Gitea實例它只能接受具有 `[ubuntu]`、`[centos]`、`[with-gpu]` 和 `[ubuntu, with-gpu]`的Job。 -這不是一個技術問題,只是在早期設計中被忽視了。 -參見[runtime.go#L65](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L65)。 - -目前, runner嘗試匹配標籤中的每一個,並使用找到的第一個匹配項。 +Job 會在具有所有這些標籤的 Runner 上運行,與 [GitHub](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on) 相同。 +Runner 會使用它所具有的第一個標籤對應的環境。 ## 代理標籤和自訂標籤對於Runner有什麼區別? -![labels](/images/usage/actions/labels.png) - -代理標籤是由Runner在註冊過程中向Gitea實例報告的。 -而自訂標籤則是由Gitea的管理員或組織或儲存庫的所有者手動添加的(取決於Runner所屬的級別)。 - -然而,目前這方面的設計還有待改進,因為它目前存在一些不完善之處。 -您可以向已註冊的Runner添加自訂標籤,比如 `centos`,這意味著該Runner將接收具有`runs-on: centos`的Job。 -然而,Runner可能不知道要使用哪個環境來執行該標籤,導致它使用預設鏡像或導致邏輯死衚衕。 -這個預設值可能與使用者的期望不符。 -參見[runtime.go#L71](https://gitea.com/gitea/runner/src/commit/90b8cc6a7a48f45cc28b5ef9660ebf4061fcb336/runtime/runtime.go#L71)。 - -與此同時,如果您想更改Runner的標籤,我們建議您重新註冊Runner。 +Gitea 已不再有自訂標籤。 +Runner 每次啟動時都會宣告其標籤,標籤來自 `runner.labels` 設定或註冊時指定的標籤,因此請在那裡修改並重新啟動 Runner。 ## Gitea Actions runner會有更多的實現嗎? @@ -165,3 +110,11 @@ defaults: > 對於 `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)。 diff --git a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md index 5de5814a..b9ecf952 100644 --- a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md +++ b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/scoped-workflows.md @@ -102,8 +102,8 @@ SCOPED_WORKFLOW_DIRS = .gitea/scoped_workflows 作用域工作流程可以呼叫可重複使用的工作流程: -- **本機**參照(`uses: ./...`)會相對於**來源**儲存庫解析:即呼叫方工作流程內容的來源儲存庫,而非消費方儲存庫。 -- **跨儲存庫**參照(`uses: owner/repo/...@ref`)會以**消費方儲存庫的**讀取權限來解析。如果它指向一個私有儲存庫,請確保每個消費方儲存庫都能讀取它,否則工作流程會在那裡失敗。 +- **本機**參照(`uses: ./...` 或 `uses: $/...`)會相對於**來源**儲存庫解析:即呼叫方工作流程內容的來源儲存庫,而非消費方儲存庫。 +- **跨儲存庫**參照(`uses: owner/repo/...@ref` 或 `uses: self:owner/repo/...@ref`)會以**消費方儲存庫的**讀取權限來解析。如果它指向一個私有儲存庫,請確保每個消費方儲存庫都能讀取它,否則工作流程會在那裡失敗。 可重複使用的工作流程可以放在來源儲存庫的 `SCOPED_WORKFLOW_DIRS`(或 `WORKFLOW_DIRS`)之下。 diff --git a/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md new file mode 100644 index 00000000..05565520 --- /dev/null +++ b/i18n/zh-tw/docusaurus-plugin-content-docs/current/usage/actions/token-permissions.md @@ -0,0 +1,126 @@ +--- +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)。 + + +## 權限的來源 + +Gitea 依以下順序決定 Job 令牌權限: + +1. Job 層級的 `permissions:`(`jobs..permissions`) +2. 工作流層級的 `permissions:`(頂層) +3. 設定中的預設權限(所有者或儲存庫) + +接著,結果會再受到所設定的最大令牌權限**限縮**(見下文)。 + + +## 支援的工作流語法 + +Gitea 支援與 GitHub Actions 相容的 `permissions:` 關鍵字。 + + +### 純量值 + +```yaml +permissions: read-all # or: write-all +``` + + +### 依範圍對應 + +```yaml +permissions: + contents: read + issues: write + pull-requests: none +``` + +每個範圍的有效存取模式值為 `read`、`write` 和 `none`。 + + +### 支援的範圍 + +- `contents`(適用於 `code` 和 `releases`) +- `code` +- `releases` +- `issues` +- `pull-requests` +- `actions` +- `wiki` +- `projects` +- `packages`(若目標功能支援) + +如果同時指定 `contents` 和更細的範圍(例如 `code` 或 `releases`),該單元以更細的範圍為準。 + + +### 相容性說明 + +Gitea 支援 GitHub Actions 權限範圍的一個子集。 +Gitea Actions 目前不支援 `statuses`、`checks`、`deployments`、`id-token`、`security-events` 和 `pages` 等 GitHub 專屬範圍。 + +Gitea 另外提供一些儲存庫單元範圍,它們在 GitHub Actions 中並不是獨立的範圍: + +- `code` +- `releases` +- `wiki` +- `projects` + + +## 預設權限模式 + +如果工作流和 Job 都沒有定義 `permissions:`,Gitea 會使用所設定的預設模式: + +- **Permissive**(寬鬆):對 Job 所屬儲存庫的大多數單元具有讀取和寫入權限(向下相容的預設值)。 +- **受限**(Restricted):對 Job 所屬儲存庫的 `code`、`releases` 和 `packages` 具有唯讀權限,預設無法存取其他單元。 + + +## 最大令牌權限(限縮) + +您可以為每個儲存庫單元設定最大權限。 +Job 的實際權限計算方式如下: + +`effective = min(requested, maximum)` + +也就是說,工作流可以降低 Job 的權限,但不能超過您所設定的最大值。 +如果未設定最大值,所有範圍的最大值預設為 `write`。 + + +## 設定位置 + +您可以在以下位置設定預設值和最大值: + +- **使用者 / 組織**:`Settings` → `Actions` → `General` +- **儲存庫**:`Settings` → `Actions` → `General` + - 對於組織內的儲存庫,儲存庫可以沿用所有者層級的設定,或透過 **Override owner-level configuration** 選擇退出。 + +注意:只有在啟用**儲存庫 Actions** 後,才會顯示儲存庫層級的令牌權限設定。 + + +## 來自 fork 的拉取請求 + +基於安全考量,由來自 fork 的拉取請求觸發的工作流,對儲存庫內容一律只有唯讀權限,不受工作流 `permissions:` 或設定影響。 + + +## 跨儲存庫存取 + +預設情況下,`GITEA_TOKEN` 只能存取: + +- Job 所屬的儲存庫(依計算出的權限) +- 公開儲存庫(唯讀) + +預設會拒絕存取其他私有儲存庫。 +使用者或組織可以在**設定** > **Actions** > **General** > **Cross-Repository Access** 中,允許唯讀存取選定的私有儲存庫。 + +私有儲存庫也可以在**設定** > **Actions** > **General** 中允許選定的協作所有者。 +這樣,這些所有者的私有儲存庫就能為了 Actions 用途讀取目前的私有儲存庫,例如私有 Actions 和可重複使用的工作流。 + +由來自 fork 的拉取請求觸發的工作流,永遠無法取得對私有儲存庫的跨儲存庫存取權,即使這些儲存庫已列入清單也一樣。 diff --git a/runner-docs/monitoring.md b/runner-docs/monitoring.md index 9379e679..530a2c08 100644 --- a/runner-docs/monitoring.md +++ b/runner-docs/monitoring.md @@ -40,6 +40,16 @@ All series are prefixed with `gitea_runner_`, among them: Useful things to alert on: `gitea_runner_poll_fetch_total{result="error"}` rising (the instance is unreachable or the runner was deleted), a `capacity_utilization_ratio` pinned at `1` (the pool is too small), and a growing `report_log_buffer_rows` (log delivery is falling behind). +## OpenTelemetry tracing + +Setting `OTEL_EXPORTER_OTLP_ENDPOINT` in the runner's environment sends a trace of every job, with a span per step, to an OTLP collector over `http/protobuf`: + +```sh +OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 +``` + +Jobs receive `TRACEPARENT`, so instrumented tools in them join the job's trace. See [docs/telemetry.md](https://gitea.com/gitea/runner/src/branch/main/docs/telemetry.md) for headers, sampling and the security notes. + ## Local health checks Health checks let a runner take itself out of rotation when the machine it runs on is not fit for work — most commonly when the disk is full.