mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-10-30 20:08:41 +08:00
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 <me@silverwind.io> Co-authored-by: silverwind <2021+silverwind@noreply.gitea.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-on: https://gitea.com/gitea/runner/pulls/1277 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: silverwind <2021+silverwind@noreply.gitea.com> Co-authored-by: bircni <bircni@icloud.com>
62 lines
2.1 KiB
YAML
62 lines
2.1 KiB
YAML
name: checkout
|
|
on: push
|
|
jobs:
|
|
checkout:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- id: checkout
|
|
uses: builtin:checkout
|
|
- uses: builtin:checkout
|
|
with:
|
|
ref: ${{ github.ref_name }}
|
|
path: short
|
|
- run: test "$(git -C short rev-parse HEAD)" = "$GITHUB_SHA"
|
|
- if: github.ref_type == 'branch'
|
|
run: |
|
|
test "$(git symbolic-ref HEAD)" = "$GITHUB_REF"
|
|
test "${{ steps.checkout.outputs.ref }}" = "$GITHUB_REF"
|
|
test "${{ steps.checkout.outputs.commit }}" = "$GITHUB_SHA"
|
|
git -c user.name=e2e -c user.email=e2e@example.com commit --allow-empty -m pushed
|
|
git push
|
|
git tag moved
|
|
git push --force origin moved
|
|
git switch --orphan child
|
|
echo child > child.txt
|
|
git add child.txt
|
|
git -c user.name=e2e -c user.email=e2e@example.com commit -m child
|
|
git push origin child
|
|
git switch -c content main
|
|
git submodule add -b child "../${{ github.event.repository.name }}.git" sub
|
|
git lfs install --local
|
|
git lfs track '*.bin'
|
|
mkdir keep drop
|
|
echo big > keep/big.bin
|
|
echo big > drop/big.bin
|
|
git add .gitattributes keep drop
|
|
git -c user.name=e2e -c user.email=e2e@example.com commit -m content
|
|
git push origin content
|
|
- if: github.ref_type == 'branch'
|
|
uses: builtin:checkout
|
|
with:
|
|
ref: content
|
|
path: full
|
|
submodules: true
|
|
lfs: true
|
|
- if: github.ref_type == 'branch'
|
|
uses: builtin:checkout
|
|
with:
|
|
ref: content
|
|
path: sparse
|
|
sparse-checkout: keep
|
|
lfs: true
|
|
- if: github.ref_type == 'branch'
|
|
run: |
|
|
test "$(cat full/sub/child.txt)" = child
|
|
test "$(cat full/keep/big.bin)" = big
|
|
test "$(cat sparse/keep/big.bin)" = big
|
|
test ! -e sparse/drop
|
|
- if: github.ref_type == 'tag'
|
|
run: test "$(git describe --tags)" = "$GITHUB_REF_NAME"
|