【问题标题】:How to add pre-commit git hooks to check that README.Rmd and index.Rmd have been knitted?如何添加预提交 git 挂钩以检查 README.Rmd 和 index.Rmd 是否已编织?
【发布时间】:2021-03-29 03:53:49
【问题描述】:

我有一个带有 pkg​​down 文档站点的 R 包。我想创建一个 git 钩子,以便如果我尝试提交更改并将更改推送到 README.Rmdindex.Rmd 而不先编织它们以创建相应的 .Md 文件,我会收到警告。现在我只是忘记了。

R Packages 这本书说要使用usethis::use_readme_rmd() 创建自述文件,这也将创建 git 钩子。但我已经有一个 README.Rmd 文件。

我如何为现有的 .Rmd 文件创建一个挂钩,无论它是来自我的 pkgdown 站点的 README.Rmd 还是 index.Rmd?我想使用usethis 包,但如果在该包之外更简单,我愿意接受。

【问题讨论】:

  • 这是 use_readme_rmd 函数中的一行:use_git_hook("pre-commit", render_template("readme-rmd-pre-commit.sh")) 只需键入不带 () 的函数名称即可。
  • 我已经做到了,现在我不清楚如何修改 usethis:::render_template("readme-rmd-pre-commit.sh") 以在 index.Rmd 上工作。这是一个未导出的函数,我找不到任何文档。其他人如何将他们的index.Rmd 设置为自动编织?
  • 为什么不用rmarkdown的render()函数?
  • 我可以用render()index.Rmd创建git钩子吗?

标签: r githooks r-package pkgdown r-usethis


【解决方案1】:

如果您的 pkgdown 站点所在的位置是 Github Actions,则另一种方法是使用 Github Actions。

  1. 在您的存储库中创建文件夹 .github
  2. 在其中创建文件夹workflows
  3. 在其中创建文件render-readme.yml
  4. 将此代码粘贴到该文件中
on:
  push:
    paths:
      - README.Rmd
      - Index.Rmd

name: Render README and Index

jobs:
  render:
    name: Render README and Index
    runs-on: macOS-latest
    steps:
      - uses: actions/checkout@v2
      - uses: r-lib/actions/setup-r@v1
      - uses: r-lib/actions/setup-pandoc@v1
      - name: Install packages
        run: Rscript -e 'install.packages(c("rmarkdown", "knitr"))'
      - name: Render README
        run: Rscript -e 'rmarkdown::render("README.Rmd", output_format = "md_document")'
      - name: Render Index
        run: Rscript -e 'rmarkdown::render("Index.Rmd", output_format = "md_document")'
      - name: Commit results
        run: |
          git commit README.md -m 'Re-build README.Rmd' || echo "No changes to commit"
          git commit Index.md -m 'Re-build Index.Rmd' || echo "No changes to commit"
          git push origin || echo "No changes to commit"
  1. 将此推送到 GitHub,它应该会立即开始工作。请注意,处理需要一些时间。单击 GitHub 存储库中的“操作”选项卡以查看进度。

有关示例,请参阅https://github.com/r-lib/actions。上面的代码就是根据这个改编的。

请注意,您可能希望将操作分成 2 个文件。 render-readme.ymlrender-index.yml。这样,如果 Action 失败,您就会知道哪个文件有问题。

【讨论】:

  • 感谢您的回答!我暂时无法试一试,但当我尝试时,我会删除此评论并相应地回复/接受/投票。
猜你喜欢
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多