尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

act 如何用 --local-repository 把远程 action 引用指向本地目录做调试

act 如何用 --local-repository 把远程 action 引用指向本地目录做调试 act 如何用 --local-repository 把远程 action 引用指向本地目录做调试【免费下载链接】actRun your GitHub Actions locally 项目地址: https://gitcode.com/GitHub_Trending/ac/act工作流里用uses: owner/reporef引用远程 action 时如果想验证本地改过的 action 版本按常规流程得先把改动推到远端再等 act 拉取。act 的--local-repository参数把指定的「仓库 ref」直接替换为本地目录action 内容从本地目录读取工作流其余部分照常本地运行。这个参数在源码中的定义是 Replaces the specified repository and ref with a local folder见 cmd/root.go匹配与替换逻辑实现在 pkg/runner/local_repository_cache.go。映射的写法repositoryref本地目录--local-repository是可重复参数每一项的格式为--local-repository repositoryref本地目录等号左边的 key 是「仓库 ref」的组合flag 帮助文本给出两种写法https://github.com/test/testv0/home/act/test test/testv0/home/act/test完整 URL 写法精确对应这个远程地址。owner/reporef短写法按 flag 描述 the latter matches any hosts or protocols不限定 host 与协议。key 中的 ref 必须与工作流uses里写的 ref 完全一致。工作流写uses: owner/repomain时映射成v0不会命中。一个工作流引用多个 action或同一个 action 的多个 ref时就写多个--local-repository条目。准备条件运行前需要三样东西一个引用了远程 action 的工作流文件。仓库测试用例 push.yml 是最简单的形态name: basic on: push jobs: build: runs-on: ubuntu-latest steps: - uses: nektos/test-overridea - uses: nektos/test-overrideb本地 action 目录目录内要有完整的 action 结构action.yml及其引用的入口文件。仓库测试用例中是两个本地 node actionnode20 与 node16。「远程引用 → 本地目录」的映射关系。仓库测试用例的配置 config.ymllocal-repositories: https://github.com/nektos/test-overridea: testdata/actions/node20 nektos/test-overrideb: testdata/actions/node16注意这里两种 key 写法并存a用完整 URLb用短写法两者在同一个测试中同时生效示例中的目录是相对于工作目录的相对路径。执行并验证把映射写成命令行参数。通用形式如下其中owner/repo、ref、本地action目录替换为你工作流实际引用的仓库、ref 和你本地的 action 目录act push --local-repository owner/reporef本地action目录以仓库测试用例的映射为例实际调试时替换为你自己的引用和本地目录act push \ --local-repository https://github.com/nektos/test-overrideatestdata/actions/node20 \ --local-repository nektos/test-overridebtestdata/actions/node16事件名push与工作流的on: push对应工作流监听其他事件时传对应的事件名不传时 act 默认按push处理。运行过程中 act 会对每次 action 拉取打印匹配日志模板取自 local_repository_cache.go实际值以本次运行为准命中映射时LocalRepositoryCache matched 远程URL with ref ref to 本地目录未命中时LocalRepositoryCache not matched 远程URL with Ref ref未命中分支不会报错代码会继续走上层缓存即正常的远程拉取路径。所以日志是第一判断点看到matched行才能确认这个 ref 的 action 内容来自本地目录。命中后act 会把本地目录含子目录打包成 tar 归档作为 action 内容加载进 job 容器job 成功运行即说明本地修改的版本已生效——不需要把改动推到远端仓库。匹配规则与边界匹配分两级见Fetch实现local_repository_cache.go先按「完整 URL ref」精确匹配未命中时解析 URL取去掉开头/的 path即owner/repo再按「owner/repo ref」匹配——这就是短写法不受 host 和协议限制的原因。两级都不命中则回退到普通远程拉取。由此有两条实践边界映射没写、ref 写错时工作流不会失败只是跑的是远端版本。调试时务必核对日志中的matched/not matched否则会误以为验证了本地改动。替换按「仓库 ref」粒度生效不影响工作流中未被映射的其他 action。act 读取本地目录只是打包进容器不会修改目录内容。把映射固化到 .actrc--local-repository是持久参数同样可以写进 act 的配置文件。act 按顺序从 XDG 配置目录的act/actrc、家目录.actrc、当前目录.actrc读取参数行再与命令行参数合并逻辑见 cmd/root.go。在.actrc中加一行即可固定该映射--local-repository nektos/test-overrideatestdata/actions/node20另外使用--local-repository时 act 会启用新版 action cacheGoGitActionCache缓存目录由--action-cache-path控制并以其为父层包装LocalRepositoryCache见 cmd/root.go。这是内部机制说明单纯做本地调试不需要额外调整缓存相关配置。【免费下载链接】actRun your GitHub Actions locally 项目地址: https://gitcode.com/GitHub_Trending/ac/act创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表