mirror of
https://code.forgejo.org/actions/checkout.git
synced 2026-08-27 20:44:58 -04:00
Materialize LFS objects with an explicit git lfs checkout
Problem On persistent/self-hosted runners that reuse a working directory across jobs, LFS-tracked files can be left as pointer files instead of real content when a lfs: false checkout precedes a lfs: true checkout of the same repo. Sequence that triggers it: 1. A lfs: false run sets GIT_LFS_SKIP_SMUDGE=1, so git checkout writes LFS files to the working tree as pointers. 2. A later lfs: true run on the same worktree fetches the objects into .git/lfs, but git checkout sees the tree already at the target commit and does not re-smudge the already-present pointer files. Result: the objects are in the local cache, but the working tree still contains pointers. The action relies on the smudge filter firing during git checkout to materialize content — which holds on a clean tree (GitHub-hosted runners) but not on a reused one. Related: actions/checkout#270
This commit is contained in:
parent
f548e57e54
commit
579920382a
7 changed files with 36 additions and 0 deletions
8
dist/index.js
vendored
8
dist/index.js
vendored
|
|
@ -35816,6 +35816,9 @@ class GitCommandManager {
|
|||
const output = await this.execGit(['rev-parse', '--symbolic-full-name', '--verify', '--quiet', 'HEAD'], true);
|
||||
return !output.stdout.trim().startsWith('refs/heads/');
|
||||
}
|
||||
async lfsCheckout() {
|
||||
await this.execGit(['lfs', 'checkout']);
|
||||
}
|
||||
async lfsFetch(ref) {
|
||||
const args = ['lfs', 'fetch', 'origin', ref];
|
||||
const that = this;
|
||||
|
|
@ -41879,6 +41882,11 @@ async function getSource(settings) {
|
|||
startGroup('Checking out the ref');
|
||||
await git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
|
||||
endGroup();
|
||||
if (settings.lfs && !settings.sparseCheckout) {
|
||||
startGroup('Checking out LFS objects');
|
||||
await git.lfsCheckout();
|
||||
endGroup();
|
||||
}
|
||||
// Submodules
|
||||
if (settings.submodules) {
|
||||
// Temporarily override global config
|
||||
|
|
|
|||
Loading…
Reference in a new issue