Как добавить git-хуки предварительной фиксации, чтобы проверить, что README.Rmd и index.Rmd были связаны?

#r #githooks #r-package #pkgdown #r-usethis

#r #githooks #r-package #pkgdown #r-используйте это

Вопрос:

У меня есть пакет R с сайтом документации pkgdown. Я хочу создать git-хук, чтобы, если я попытаюсь зафиксировать и внести изменения в README.Rmd or или index.Rmd без предварительного связывания их для создания соответствующих .Md файлов, я был предупрежден. Сейчас я просто забыл.

В книге R Packages сказано использовать usethis::use_readme_rmd() для создания README, который также создаст git-хук. Но у меня уже есть файл README.Rmd.

Как я могу создать перехват для существующего файла .Rmd в целом, будь то README.Rmd или index.Rmd с моего сайта pkgdown? Я бы хотел использовать usethis пакет, но если это проще сделать вне этого пакета, я открыт для этого.

Комментарии:

1. Это строка из функции use_readme_rmd: use_git_hook("pre-commit", render_template("readme-rmd-pre-commit.sh")) вы можете увидеть это, просто введя имя функции с помощью no () .

2. Я зашел так далеко, теперь мне неясно, как изменить usethis:::render_template("readme-rmd-pre-commit.sh") , чтобы работать дальше index.Rmd . Это неэкспортируемая функция, и я не могу найти никакой документации. Как другие настраивают их index.Rmd на автоматическое вязание?

3. Почему вы не используете функцию rmarkdown render() ?

4. Могу ли я создать git-хук для index.Rmd with render() ?

Ответ №1:

Другой подход заключается в том, чтобы сделать это с помощью Github Actions, если именно там находится ваш сайт pkgdown.

  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.yml и render-index.yml . Таким образом, если действие завершится неудачно, вы узнаете, в каком файле проблема.

Комментарии:

1. спасибо за этот ответ! Я не могу попробовать какое-то время, но когда я попробую, я удалю этот комментарий и отвечу / приму / проголосую соответственно.