Files
runner/docs/builtin-actions.md
T
27e9b4de87 fix!: use the git CLI for action clones and make builtin:checkout match actions/checkout (#1277)
The runner now uses the `git` command line instead of go-git to download actions and reusable workflows. go-git had recurring bugs and does not support SHA-256 repositories, and full clones of actions are several times faster.

`builtin:checkout` now runs `git` where the job runs and behaves like `actions/checkout`:

1. A branch is checked out as a local branch tracking `origin`, tag and pull request runs keep their ref, and a triggering tag that moved fails the step.
1. Later steps can fetch and push with the persisted token or SSH key.
1. It supports the `ssh-*`, `lfs`, `submodules`, `sparse-checkout`, `filter`, `fetch-tags`, `clean`, `persist-credentials`, `show-progress` and `set-safe-directory` inputs and the `ref` and `commit` outputs.
1. SHA-256 repositories work for actions, reusable workflows and `builtin:checkout`.

Git keeps the token off its command line, ignores `GIT_DIR` and similar variables inherited by the runner, and keeps action files LF regardless of `core.autocrlf`. A cancelled job lets git remove its lock files.

This is a breaking change: the runner needs Git 2.34.1 or newer on its `PATH`, and so do job images that use `builtin:checkout`. The official runner images include it.

Fixes: https://gitea.com/gitea/runner/issues/1077
Fixes: https://gitea.com/gitea/runner/issues/1267
Fixes: https://gitea.com/gitea/runner/issues/1279
Fixes: https://gitea.com/gitea/runner/issues/1284
Fixes: https://gitea.com/gitea/runner/issues/1285
Co-authored-by: silverwind <[email protected]>
Co-authored-by: silverwind <[email protected]>
Co-authored-by: Lunny Xiao <[email protected]>
Reviewed-on: https://gitea.com/gitea/runner/pulls/1277
Reviewed-by: Lunny Xiao <[email protected]>
Reviewed-by: silverwind <[email protected]>
Co-authored-by: bircni <[email protected]>
2026-10-08 17:08:29 +00:00

2.3 KiB

Built-in actions

Built-in actions ship with the runner, so a job needs no action download and no Node in its image.

- uses: builtin:checkout

checkout

Works like actions/checkout with these inputs. Any other input fails the step. It runs git where the job runs, see the prerequisites.

Input Default
repository github.repository
ref the triggering ref and commit, or the default branch of another repository
token github.token
ssh-key empty, a private key fetches over SSH instead
ssh-known-hosts empty, host keys trusted besides ~/.ssh/known_hosts
ssh-strict true, rejects unknown host keys
ssh-user the user of the repository's SSH URL, else git
persist-credentials true, later steps of the job can fetch and push with token or ssh-key
path workspace root
clean true, removes untracked files, also in submodules
filter empty, a partial clone filter such as blob:none
sparse-checkout empty, the paths to check out, one per line
sparse-checkout-cone-mode true, false reads sparse-checkout as patterns
fetch-depth 1, 0 for the full history of every branch and tag
fetch-tags false, true fetches every tag
show-progress true, shows the fetch progress
lfs false, true downloads Git LFS files
submodules false, true checks out submodules, recursive also theirs
set-safe-directory true, lets checkout's git work in a directory another user owns

A branch is checked out as a local branch tracking origin, a tag or commit as a detached HEAD. A triggering tag that moved since the event fails the step. The step outputs ref and commit like actions/checkout.

Persisted credentials end with the job. token is only sent to github.server_url, while ssh-key is offered to any SSH host, as with actions/checkout. Without ssh-key, submodule URLs of the form git@<server host>: are fetched from github.server_url with token. With ssh-key, the repository is fetched from the SSH URL in the event's repository.ssh_url, or from the server's host on port 22.

With gitea-runner exec, checking out the workflow's own repository copies your local working directory, unless --no-skip-checkout or ssh-key is set.