lede
lede copied to clipboard
使用github actions cache缓存工具链, 加速你的云编译项目,让你做更快的男人
壁画不多直接上效果,最短25分钟完成
简单原理就是,
github给actions提供了5gb的高速缓存空间,
使用这个空间缓存工具链的编译进度,
可以节省掉不必要的40多分钟耗时。
食用方法:(参考pr) 在你的openwrt-ci.yml actions/checkout段尾部加入
fetch-depth: 0
(因为工具使用了tools和toolchain的commit id决定是否更新缓存,所以需要全量拉取代码)
随后添加工具调用,即可
- name: cache
uses: klever1988/cachewrtbuild@main
第一次编译不会有变化,因为你的仓库还没有缓存,随后的编译作业就会从你仓库拉去第一次编译生成的缓存,跳过无意义的工具链编译时间。 可用参数和默认值:
- name: cache
uses: klever1988/cachewrtbuild@main
with:
#是否一并缓存.ccache目录,如果你启用了ccache。这是唯一的常用参数,其他三个用于除错,一般不需要调整
ccache: false
#是否缓存工具链目录
toolchain: true
#是否跳过工具链编译
skip: true
#清空缓存
clean: false
建议在make menuconfig或者
echo -e 'CONFIG_DEVEL=y\nCONFIG_CCACHE=y' >> .config; make defconfig
开启ccache获得进一步的加速时间。
使用P3TERX/Actions-OpenWrt编译的筒子们,因为你们yml的checkout段并不是检出openwrt源代码,而是检出你们的编译脚本。所以应该把uses段放在真正的clone openwrt源码代码段之后,并且用prefix参数声明openwrt源码路径,比如
- name: Clone source code
working-directory: /workdir
run: |
df -hT $PWD
git clone $REPO_URL -b $REPO_BRANCH openwrt
ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt
- name: Cache
uses: klever1988/cachewrtbuild@main
with:
ccache: 'true'
prefix: ${{ github.workspace }}/openwrt
Unexpected value 'ccache: 'true'
Unexpected value 'ccache: 'true'
😢 with 加了 | 改好了


跟楼上一样的报错
https://github.com/smallprogram/OpenWrtAction/blob/main/.github/workflows/build-openwrt_X64.yml
@deplives @xcf13363175
参考我这个,经过 @klever1988 调整过的 ,没毛病。
@smallprogram 使用你的这个出现这个错误,如何修复。 Clone source code
Run df -hT $PWD Filesystem Type Size Used Avail Use% Mounted on /dev/root ext4 84G 29G 55G 35% / fatal: destination path '.' already exists and is not an empty directory. Error: Process completed with exit code 128.
尴尬,又是和楼上一样。
也许可以写个触发,这样大版本更新的时候可以重新缓存保险一点?
@jarod360 我在你的repositories里转了一圈也没找着,不行你fork我的,改config文件夹里的x64.config文件,改成你自己的,然后跑Action编译把。你这个报错之前都已经解决了。 @xcf13363175
@smallprogram fork后可以通过。
也许可以写个触发,这样大版本更新的时候可以重新缓存保险一点?
支持。
也许可以写个触发,这样大版本更新的时候可以重新缓存保险一点?
有 fetch-depth: 0就行
也许可以写个触发,这样大版本更新的时候可以重新缓存保险一点?
有 fetch-depth: 0就行
才看懂,谢谢指示
疑问:如果有缓存的话,会不会导致源码更新却没同步到action呢?
使用p3terx大佬编译脚本的要改一下 main改成test分支 uses: klever1988/cachewrtbuild@main with: ccache: 'true' prefix: ${{ github.workspace }}/openwrt
并且应该放置到你clone openwrt源码之后 不是checkout
@klever1988 大佬按您说的改了,出现这个报错。Error: ENOENT: no such file or directory, chdir '/home/runner/work/Redmi_AX6/Redmi_AX6' -> '/openwrt' 详见https://github.com/jarod360/Redmi_AX6/runs/3494622549?check_suite_focus=true
@jarod360
prefix: '/workdir/openwrt'
@klever1988 改了prefix: '/workdir/openwrt' Error: ENOENT: no such file or directory, chdir '/home/runner/work/OpenWrtAction/OpenWrtAction' -> '/workdir/openwrt' 还是报错
疑问:如果有缓存的话,会不会导致源码更新却没同步到action呢?
不会的,只是缓存了工具链的编译目录和二进制文件而已,kernel和package每次都会重新编译 而且工具链的源码如果有更新,也是会再次编译,刷新缓存,因为缓存记录了工具链源码的commit id
使用p3terx大佬编译脚本的要改一下 main改成test分支 uses: klever1988/cachewrtbuild@test with: ccache: 'true' prefix: ${{ github.workspace }}/openwrt
并且应该放置到你clone openwrt源码之后 不是checkout
这个对使用P3TERX/Actions-OpenWrt脚本在线编译的用户是有效的 我开了2个脚本 测试下用脚本前后的差异 看看快了多少
P3TERX/Actions-OpenWrt脚本 进行编译,测试的确快了不少。
@klever1988 大佬你好,我使用的P3TERX/Actions-OpenWrt编译,在clone openwrt源码代码段之后加入了 - name: Cache uses: klever1988/cachewrtbuild@test with: ccache: 'true' prefix: ${{ github.workspace }}/openwrt
请问还需要在actions/checkout段尾部加入fetch-depth: 0吗? 另外Download package代码段里是否还要修改成echo -e 'CONFIG_DEVEL=y\nCONFIG_CCACHE=y' >> .config; make defconfig 谢谢
@klever1988 大佬你好,我使用的P3TERX/Actions-OpenWrt编译,在clone openwrt源码代码段之后加入了
- name: Cache uses: klever1988/cachewrtbuild@test with: ccache: 'true' prefix: ${{ github.workspace }}/openwrt
请问还需要在actions/checkout段尾部加入fetch-depth: 0吗? 另外Download package代码段里是否还要修改成echo -e 'CONFIG_DEVEL=y\nCONFIG_CCACHE=y' >> .config; make defconfig 谢谢
不要用test分支了,可以直接用main,klever1988/cachewrtbuild@main 用P3TERX的脚本编译不需要加fetch-depth CONFIG_CCACHE加不加都可以,加了编译速度更快,不过有时候编译出错可以去掉它,排除出错原因
缓存必须要actions过程全通过了才有效,只能在第1次通过了以后再重新开始就能用缓存了。
解开多线程编译才是最有效的加速。
缓存必须要actions过程全通过了才有效,只能在第1次通过了以后再重新开始就能用缓存了。
解开多线程编译才是最有效的加速。
make -jnproc
难道不是多线程编译了吗
解开多线程编译才是最有效的加速。
actions (linux) 一共就给2个核,还能再多点?
不是特别懂,请教个问题。这个缓存是每个workflow单独缓存的,还是所有workflow共享缓存的?我不同的workflow中编译机型的CPU架构不一样,不能共用toolchain。这种情况会有影响吗?
不是特别懂,请教个问题。这个缓存是每个workflow单独缓存的,还是所有workflow共享缓存的?我不同的workflow中编译机型的CPU架构不一样,不能共用toolchain。这种情况会有影响吗?
GitHub 将删除 7 天内未被访问的任何缓存条目。 可以存储的缓存数没有限制,但存储库中所有缓存的总大小限制为 5 GB。 如果超过此限制,GitHub 将保存缓存,但会开始收回缓存,直到总大小小于 5 GB。 https://docs.github.com/cn/actions/guides/caching-dependencies-to-speed-up-workflows?query=cache#example-of-search-priority
不是特别懂,请教个问题。这个缓存是每个workflow单独缓存的,还是所有workflow共享缓存的?我不同的workflow中编译机型的CPU架构不一样,不能共用toolchain。这种情况会有影响吗?
GitHub 将删除 7 天内未被访问的任何缓存条目。 可以存储的缓存数没有限制,但存储库中所有缓存的总大小限制为 5 GB。 如果超过此限制,GitHub 将保存缓存,但会开始收回缓存,直到总大小小于 5 GB。 https://docs.github.com/cn/actions/guides/caching-dependencies-to-speed-up-workflows?query=cache#example-of-search-priority
我的意思是,我同一个repo中,一个ci编译ath79,另一个ci编译ramips,这两个会共享工具链缓存吗?如果共享缓存的话,是有问题的。
我的意思是,我同一个repo中,一个ci编译ath79,另一个ci编译ramips,这两个会共享工具链缓存吗?如果共享缓存的话,是有问题的。
https://github.com/actions/cache 好像是一个库共用5G缓存,新的缓存会替换掉旧的缓存(超出5G的情况下),但储存的数量不限制,这块不是很了解,还是问1988吧