From 533b8a645e9768347e869fb5ace9b689bbcf9c30 Mon Sep 17 00:00:00 2001 From: Dom Dwyer Date: Thu, 25 Aug 2022 00:00:09 +0200 Subject: [PATCH] feat(R): check README.Rmd changes are rendered Adds the githook generated by usethis::use_readme_rmd() to pre-commits, ensuring any changes made to README.Rmd are properly synchronised to the rendered README.md file. --- .pre-commit-hooks.yaml | 9 +++++++++ README.md | 3 +++ run-r-readme.sh | 17 +++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100755 run-r-readme.sh diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index b63779f..e7683c0 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml @@ -129,6 +129,15 @@ minimum_pre_commit_version: 0.15.0 description: 'Run lintr against R code' +- id: r-readme + name: 'Generated README.Rmd' + entry: run-r-readme.sh + language: 'script' + files: README\.Rmd$ + pass_filenames: false + minimum_pre_commit_version: 0.15.0 + description: 'Check README.md in-sync with README.Rmd' + - id: buf-lint name: 'Lint protobuf files' entry: buf-lint.sh diff --git a/README.md b/README.md index 521f4b0..7e68181 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Hooks: * `rust-doc`: runs `cargo doc` against the workspace - great for linting [intra-doc links] * `r-stylr`: runs [`stylr`] to format R code * `r-lintr`: static analysis of R code with [`lintr`] +* `r-readme`: ensure README.Rmd changes are rendered to README.md * `buf-lint`: runs [`buf`] lints against protobuf files * `buf-breaking`: protobuf breaking change detection using [`buf`] @@ -87,6 +88,8 @@ repos: - id: r-lintr stages: [commit, push] + + - id: r-readme stages: [commit, push] - id: buf-lint diff --git a/run-r-readme.sh b/run-r-readme.sh new file mode 100755 index 0000000..f9d3ff0 --- /dev/null +++ b/run-r-readme.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -euo pipefail + +README=($(git diff --cached --name-only | grep -Ei '^README\.[R]?md$')) + +if [[ ${#README[@]} == 0 ]]; then + exit 0 +fi + +if [[ README.Rmd -nt README.md ]]; then + echo -e "README.md is out of date; please re-knit README.Rmd" + exit 1 +elif [[ ${#README[@]} -lt 2 ]]; then + echo -e "README.Rmd and README.md should be both staged" + exit 1 +fi \ No newline at end of file