Github Action仅定时触发不触发push,README渲染后commit推送异常
错误原因
你遇到的提交失败核心是Git命令参数冲突:git commit的-a(自动暂存所有已跟踪文件修改)参数和手动指定提交文件路径README.md不可同时使用,直接触发了日志中的报错。
除此之外你还缺少Git身份配置、Action仓库写入权限配置两个必要环节,同时当前配置仅支持macOS运行,不符合你多系统校验的需求。
具体修复方案
1. 修正Commit步骤的Git命令
移除冲突参数,补充Git身份配置,添加动态日期提交信息:
- name: Commit results run: | git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" git add README.md man/figures/README-* 2>/dev/null || true git commit -m "Re-build README.md $(date +'%Y-%m-%d')" || echo "No changes to commit" git push origin main || echo "No changes to commit" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2. 配置Action写入权限
在工作流根级别添加权限配置,允许Action修改仓库内容:
permissions: contents: write
3. 配置多系统运行矩阵
将runs-on: macOS-latest替换为系统矩阵,同时适配不同系统的依赖安装逻辑:
jobs: render: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macOS-latest] steps: # 原有步骤保留,给不同系统的依赖安装增加对应if判断即可 - name: "[Custom block] [Ubuntu] Install spatial libraries" if: runner.os == 'Linux' run: sudo apt-get install -y libgdal-dev libproj-dev libgeos-dev libgit2-dev - name: "[Custom block] [macOS] Install spatial libraries" if: runner.os == 'macOS' run: | rm '/usr/local/bin/gfortran' brew install pkg-config gdal proj geos libgit2
4. (可选)调整定时触发周期
如果要改为8小时执行一次,将cron配置修改为0 */8 * * *即可。
完整修正后的工作流参考
name: render readme permissions: contents: write on: push: paths: - README.Rmd schedule: - cron: 0 */4 * * * jobs: render: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macOS-latest] steps: - uses: actions/checkout@v4 - uses: r-lib/actions/setup-r@v2 - uses: r-lib/actions/setup-pandoc@v2 - name: "[Custom block] [Ubuntu] Install spatial libraries" if: runner.os == 'Linux' run: sudo apt-get install -y libgdal-dev libproj-dev libgeos-dev libgit2-dev - name: "[Custom block] [macOS] Install spatial libraries" if: runner.os == 'macOS' run: | rm '/usr/local/bin/gfortran' brew install pkg-config gdal proj geos libgit2 - name: Install packages run: Rscript -e 'install.packages(c("rmarkdown", "pacman", "rgeos"))' - name: install rgdal if: runner.os != 'Windows' run: Rscript -e 'install.packages("rgdal", configure.args = c("--with-proj-lib=/usr/local/lib/", "--with-proj-include=/usr/local/include/"))' - name: install rgdal (Windows) if: runner.os == 'Windows' run: Rscript -e 'install.packages("rgdal")' - name: Render README run: Rscript -e 'rmarkdown::render("README.Rmd", output_format = "md_document")' - name: Commit results run: | git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" git add README.md man/figures/README-* 2>/dev/null || true git commit -m "Re-build README.md $(date +'%Y-%m-%d')" || echo "No changes to commit" git push origin main || echo "No changes to commit" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
内容的提问来源于stack exchange,提问作者Derek Corcoran
相关产品推荐
相关产品推荐

