{"record":{"id":"0fe0696b6d0c37c7","repo":"nektos/act","slug":"s-s-w","errorCode":null,"errorMessage":"%s (%s): %w","messagePattern":"(.+?) \\((.+?)\\): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/runner/action_cache.go","lineNumber":206,"sourceCode":"\t}\n\tif fmode&fs.ModeSymlink == fs.ModeSymlink {\n\t\tcontent, err := f.Contents()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tdestPath := path.Join(path.Dir(f.Name), content)\n\n\t\tsubtree, err := t.Tree(destPath)\n\t\tif err == nil {\n\t\t\treturn subtree.Files().ForEach(func(ft *object.File) error {\n\t\t\t\treturn actionCacheCopyFileOrDir(ctx, cleanIncludePrefix, t, tw, origin+strings.TrimPrefix(ft.Name, f.Name), f)\n\t\t\t})\n\t\t}\n\n\t\tf, err := t.File(destPath)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"%s (%s): %w\", destPath, origin, err)\n\t\t}\n\t\treturn actionCacheCopyFileOrDir(ctx, cleanIncludePrefix, t, tw, origin, f)\n\t}\n\theader, err := tar.FileInfoHeader(&GitFileInfo{\n\t\tname: name,\n\t\tmode: fmode,\n\t\tsize: f.Size,\n\t}, \"\")\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = tw.WriteHeader(header)\n\tif err != nil {\n\t\treturn err\n\t}\n\treader, err := f.Reader()\n\tif err != nil {\n\t\treturn err","sourceCodeStart":188,"sourceCodeEnd":224,"githubUrl":"https://github.com/nektos/act/blob/4f411281417e88660bea1c1a1749aa71ae0bd60f/pkg/runner/action_cache.go#L188-L224","documentation":"Inside the tar-streaming walker (writeZipArchive/applyPrefixes area of pkg/runner/action_cache.go), when an include-prefix entry names a path that is neither a subtree nor a file, it calls t.File(destPath) and wraps the resulting error as \"destPath (origin): err\". This is effectively 'path not found in the action repo tree': the composite/docker action's metadata (e.g. an action repo subpath or entrypoint path) references a file that does not exist at the fetched sha.","triggerScenarios":"includePrefix points into a directory that exists but the joined destPath misses a file: action.yml 'entrypoint:' or pre-entrypoint script path wrong, or the 'uses: owner/repo/subdir@ref' subdir layout changed at that ref so the requested file is absent.","commonSituations":"Upstream action reorganized files between tags (entrypoint moved from Dockerfile-adjacent script to another dir); typo'd subpath in 'uses:'; ref pointing to a commit before a file was added.","solutions":["Inspect the destPath in the error and confirm the file exists in the repo at the pinned ref (browse github.com/{owner}/{repo}/tree/{ref}).","Pin to a tag/commit where the path existed, or update the path in your workflow's 'uses:' / the action's entrypoint.","If you maintain the action, ensure entrypoint/pre-entrypoint paths are relative to action.yml and committed.","Clear cache after path changes upstream: rm -rf ~/.cache/act."],"exampleFix":"# before (workflow)\nuses: org/repo/.github/actions/deploy/subdir@v1  # 'subdir' lacks action files\n\n# after\nuses: org/repo/.github/actions/deploy@v1","handlingStrategy":"validation","validationCode":"curl -fsS \"https://raw.githubusercontent.com/{owner}/{repo}/{ref}/<destPath-from-error>\" >/dev/null && echo 'path exists' || echo 'path missing at ref'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin uses: to a tag where you have verified the subpath files exist.","Keep entrypoint/pre-entrypoint paths relative to action.yml and committed.","Run actionlint to validate action metadata references."],"tags":["git","path","action-tree","act"],"backgroundTag":null,"analyzedSha":"4f411281417e88660bea1c1a1749aa71ae0bd60f","analyzedAt":"2026-08-15T09:19:46.307Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}