[mirror] Opinionated R package quickstart
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Started package

VisruthSK ad347340 f99f98b5

+1088
+7
.Rbuildignore
··· 1 + ^\.github$ 2 + ^_pkgdown\.yml$ 3 + ^docs$ 4 + ^pkgdown$ 5 + ^[.]?air[.]toml$ 6 + ^\.vscode$ 7 + ^LICENSE\.md$
+1
.github/.gitignore
··· 1 + *.html
+6
.github/dependabot.yml
··· 1 + version: 2 2 + updates: 3 + - package-ecosystem: "github-actions" 4 + directory: "/" 5 + schedule: 6 + interval: "weekly"
+51
.github/workflows/R-CMD-check.yaml
··· 1 + # Workflow derived from https://github.com/r-lib/actions/tree/v2/examples 2 + # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help 3 + on: 4 + push: 5 + branches: [main, master] 6 + pull_request: 7 + 8 + name: R-CMD-check.yaml 9 + 10 + permissions: read-all 11 + 12 + jobs: 13 + R-CMD-check: 14 + runs-on: ${{ matrix.config.os }} 15 + 16 + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) 17 + 18 + strategy: 19 + fail-fast: false 20 + matrix: 21 + config: 22 + - {os: macos-latest, r: 'release'} 23 + - {os: windows-latest, r: 'release'} 24 + - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'} 25 + - {os: ubuntu-latest, r: 'release'} 26 + - {os: ubuntu-latest, r: 'oldrel-1'} 27 + 28 + env: 29 + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 30 + R_KEEP_PKG_SOURCE: yes 31 + 32 + steps: 33 + - uses: actions/checkout@v6 34 + 35 + - uses: r-lib/actions/setup-pandoc@v2 36 + 37 + - uses: r-lib/actions/setup-r@v2 38 + with: 39 + r-version: ${{ matrix.config.r }} 40 + http-user-agent: ${{ matrix.config.http-user-agent }} 41 + use-public-rspm: true 42 + 43 + - uses: r-lib/actions/setup-r-dependencies@v2 44 + with: 45 + extra-packages: any::rcmdcheck 46 + needs: check 47 + 48 + - uses: r-lib/actions/check-r-package@v2 49 + with: 50 + upload-snapshots: true 51 + build_args: 'c("--no-manual","--compact-vignettes=gs+qpdf")'
+51
.github/workflows/format-suggest.yaml
··· 1 + # Workflow derived from https://github.com/posit-dev/setup-air/tree/main/examples 2 + 3 + on: 4 + # Using `pull_request_target` over `pull_request` for elevated `GITHUB_TOKEN` 5 + # privileges, otherwise we can't set `pull-requests: write` when the pull 6 + # request comes from a fork, which is our main use case (external contributors). 7 + # 8 + # `pull_request_target` runs in the context of the target branch (`main`, usually), 9 + # rather than in the context of the pull request like `pull_request` does. Due 10 + # to this, we must explicitly checkout `ref: ${{ github.event.pull_request.head.sha }}`. 11 + # This is typically frowned upon by GitHub, as it exposes you to potentially running 12 + # untrusted code in a context where you have elevated privileges, but they explicitly 13 + # call out the use case of reformatting and committing back / commenting on the PR 14 + # as a situation that should be safe (because we aren't actually running the untrusted 15 + # code, we are just treating it as passive data). 16 + # https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/ 17 + pull_request_target: 18 + 19 + name: format-suggest.yaml 20 + 21 + jobs: 22 + format-suggest: 23 + name: format-suggest 24 + runs-on: ubuntu-latest 25 + 26 + permissions: 27 + # Required to push suggestion comments to the PR 28 + pull-requests: write 29 + 30 + steps: 31 + - uses: actions/checkout@v6 32 + with: 33 + ref: ${{ github.event.pull_request.head.sha }} 34 + 35 + - name: Install 36 + uses: posit-dev/setup-air@v1 37 + 38 + - name: Jarl format 39 + uses: etiennebacher/setup-jarl@v0.1.0 40 + with: 41 + args: "check --fix" 42 + 43 + - name: Format 44 + run: air format . 45 + 46 + - name: Suggest 47 + uses: reviewdog/action-suggester@v1 48 + with: 49 + level: error 50 + fail_level: error 51 + tool_name: air+jarl
+49
.github/workflows/pkgdown.yaml
··· 1 + # Workflow derived from https://github.com/r-lib/actions/tree/v2/examples 2 + # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help 3 + on: 4 + push: 5 + branches: [main, master] 6 + pull_request: 7 + release: 8 + types: [published] 9 + workflow_dispatch: 10 + 11 + name: pkgdown.yaml 12 + 13 + permissions: read-all 14 + 15 + jobs: 16 + pkgdown: 17 + runs-on: ubuntu-latest 18 + # Only restrict concurrency for non-PR jobs 19 + concurrency: 20 + group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} 21 + env: 22 + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 23 + permissions: 24 + contents: write 25 + steps: 26 + - uses: actions/checkout@v6 27 + 28 + - uses: r-lib/actions/setup-pandoc@v2 29 + 30 + - uses: r-lib/actions/setup-r@v2 31 + with: 32 + use-public-rspm: true 33 + 34 + - uses: r-lib/actions/setup-r-dependencies@v2 35 + with: 36 + extra-packages: any::pkgdown, local::. 37 + needs: website 38 + 39 + - name: Build site 40 + run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) 41 + shell: Rscript {0} 42 + 43 + - name: Deploy to GitHub pages 🚀 44 + if: github.event_name != 'pull_request' 45 + uses: JamesIves/github-pages-deploy-action@v4 46 + with: 47 + clean: false 48 + branch: gh-pages 49 + folder: docs
+62
.github/workflows/test-coverage.yaml
··· 1 + # Workflow derived from https://github.com/r-lib/actions/tree/v2/examples 2 + # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help 3 + on: 4 + push: 5 + branches: [main, master] 6 + pull_request: 7 + 8 + name: test-coverage.yaml 9 + 10 + permissions: read-all 11 + 12 + jobs: 13 + test-coverage: 14 + runs-on: ubuntu-latest 15 + env: 16 + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 17 + 18 + steps: 19 + - uses: actions/checkout@v6 20 + 21 + - uses: r-lib/actions/setup-r@v2 22 + with: 23 + use-public-rspm: true 24 + 25 + - uses: r-lib/actions/setup-r-dependencies@v2 26 + with: 27 + extra-packages: any::covr, any::xml2 28 + needs: coverage 29 + 30 + - name: Test coverage 31 + run: | 32 + cov <- covr::package_coverage( 33 + quiet = FALSE, 34 + clean = FALSE, 35 + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") 36 + ) 37 + print(cov) 38 + covr::to_cobertura(cov) 39 + shell: Rscript {0} 40 + 41 + - uses: codecov/codecov-action@v5 42 + with: 43 + # Fail if error if not on PR, or if on PR and token is given 44 + fail_ci_if_error: ${{ github.event_name != 'pull_request' || secrets.CODECOV_TOKEN }} 45 + files: ./cobertura.xml 46 + plugins: noop 47 + disable_search: true 48 + token: ${{ secrets.CODECOV_TOKEN }} 49 + 50 + - name: Show testthat output 51 + if: always() 52 + run: | 53 + ## -------------------------------------------------------------------- 54 + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true 55 + shell: bash 56 + 57 + - name: Upload test results 58 + if: failure() 59 + uses: actions/upload-artifact@v4 60 + with: 61 + name: coverage-test-failures 62 + path: ${{ runner.temp }}/package
+2
.gitignore
··· 1 + .Rproj.user 2 + docs
+6
.vscode/extensions.json
··· 1 + { 2 + "recommendations": [ 3 + "Posit.air-vscode", 4 + "etiennebacher.jarl-vscode" 5 + ] 6 + }
+10
.vscode/settings.json
··· 1 + { 2 + "[r]": { 3 + "editor.formatOnSave": true, 4 + "editor.defaultFormatter": "Posit.air-vscode" 5 + }, 6 + "[quarto]": { 7 + "editor.formatOnSave": true, 8 + "editor.defaultFormatter": "quarto.quarto" 9 + } 10 + }
+21
DESCRIPTION
··· 1 + Package: bootstrapper 2 + Title: Opinionated R Package Quickstart 3 + Version: 0.0.0.9000 4 + Authors@R: 5 + person("Visruth", "Srimath Kandali", , "public@visruth.com", role = c("aut", "cre", "cph"), 6 + comment = c(ORCID = "0009-0005-9097-0688")) 7 + Description: Quickly start new R packages, adding some opinionated default 8 + GHA, suggested extensions, etc. 9 + License: GPL (>= 3) 10 + URL: https://visruthsk.github.io/bootstrapper/ 11 + Imports: 12 + fs, 13 + usethis 14 + Suggests: 15 + spelling, 16 + testthat (>= 3.0.0) 17 + Config/testthat/edition: 3 18 + Encoding: UTF-8 19 + Language: en-US 20 + Roxygen: list(markdown = TRUE) 21 + RoxygenNote: 7.3.3
+595
LICENSE.md
··· 1 + GNU General Public License 2 + ========================== 3 + 4 + _Version 3, 29 June 2007_ 5 + _Copyright © 2007 Free Software Foundation, Inc. &lt;<http://fsf.org/>&gt;_ 6 + 7 + Everyone is permitted to copy and distribute verbatim copies of this license 8 + document, but changing it is not allowed. 9 + 10 + ## Preamble 11 + 12 + The GNU General Public License is a free, copyleft license for software and other 13 + kinds of works. 14 + 15 + The licenses for most software and other practical works are designed to take away 16 + your freedom to share and change the works. By contrast, the GNU General Public 17 + License is intended to guarantee your freedom to share and change all versions of a 18 + program--to make sure it remains free software for all its users. We, the Free 19 + Software Foundation, use the GNU General Public License for most of our software; it 20 + applies also to any other work released this way by its authors. You can apply it to 21 + your programs, too. 22 + 23 + When we speak of free software, we are referring to freedom, not price. Our General 24 + Public Licenses are designed to make sure that you have the freedom to distribute 25 + copies of free software (and charge for them if you wish), that you receive source 26 + code or can get it if you want it, that you can change the software or use pieces of 27 + it in new free programs, and that you know you can do these things. 28 + 29 + To protect your rights, we need to prevent others from denying you these rights or 30 + asking you to surrender the rights. Therefore, you have certain responsibilities if 31 + you distribute copies of the software, or if you modify it: responsibilities to 32 + respect the freedom of others. 33 + 34 + For example, if you distribute copies of such a program, whether gratis or for a fee, 35 + you must pass on to the recipients the same freedoms that you received. You must make 36 + sure that they, too, receive or can get the source code. And you must show them these 37 + terms so they know their rights. 38 + 39 + Developers that use the GNU GPL protect your rights with two steps: **(1)** assert 40 + copyright on the software, and **(2)** offer you this License giving you legal permission 41 + to copy, distribute and/or modify it. 42 + 43 + For the developers' and authors' protection, the GPL clearly explains that there is 44 + no warranty for this free software. For both users' and authors' sake, the GPL 45 + requires that modified versions be marked as changed, so that their problems will not 46 + be attributed erroneously to authors of previous versions. 47 + 48 + Some devices are designed to deny users access to install or run modified versions of 49 + the software inside them, although the manufacturer can do so. This is fundamentally 50 + incompatible with the aim of protecting users' freedom to change the software. The 51 + systematic pattern of such abuse occurs in the area of products for individuals to 52 + use, which is precisely where it is most unacceptable. Therefore, we have designed 53 + this version of the GPL to prohibit the practice for those products. If such problems 54 + arise substantially in other domains, we stand ready to extend this provision to 55 + those domains in future versions of the GPL, as needed to protect the freedom of 56 + users. 57 + 58 + Finally, every program is threatened constantly by software patents. States should 59 + not allow patents to restrict development and use of software on general-purpose 60 + computers, but in those that do, we wish to avoid the special danger that patents 61 + applied to a free program could make it effectively proprietary. To prevent this, the 62 + GPL assures that patents cannot be used to render the program non-free. 63 + 64 + The precise terms and conditions for copying, distribution and modification follow. 65 + 66 + ## TERMS AND CONDITIONS 67 + 68 + ### 0. Definitions 69 + 70 + “This License” refers to version 3 of the GNU General Public License. 71 + 72 + “Copyright” also means copyright-like laws that apply to other kinds of 73 + works, such as semiconductor masks. 74 + 75 + “The Program” refers to any copyrightable work licensed under this 76 + License. Each licensee is addressed as “you”. “Licensees” and 77 + “recipients” may be individuals or organizations. 78 + 79 + To “modify” a work means to copy from or adapt all or part of the work in 80 + a fashion requiring copyright permission, other than the making of an exact copy. The 81 + resulting work is called a “modified version” of the earlier work or a 82 + work “based on” the earlier work. 83 + 84 + A “covered work” means either the unmodified Program or a work based on 85 + the Program. 86 + 87 + To “propagate” a work means to do anything with it that, without 88 + permission, would make you directly or secondarily liable for infringement under 89 + applicable copyright law, except executing it on a computer or modifying a private 90 + copy. Propagation includes copying, distribution (with or without modification), 91 + making available to the public, and in some countries other activities as well. 92 + 93 + To “convey” a work means any kind of propagation that enables other 94 + parties to make or receive copies. Mere interaction with a user through a computer 95 + network, with no transfer of a copy, is not conveying. 96 + 97 + An interactive user interface displays “Appropriate Legal Notices” to the 98 + extent that it includes a convenient and prominently visible feature that **(1)** 99 + displays an appropriate copyright notice, and **(2)** tells the user that there is no 100 + warranty for the work (except to the extent that warranties are provided), that 101 + licensees may convey the work under this License, and how to view a copy of this 102 + License. If the interface presents a list of user commands or options, such as a 103 + menu, a prominent item in the list meets this criterion. 104 + 105 + ### 1. Source Code 106 + 107 + The “source code” for a work means the preferred form of the work for 108 + making modifications to it. “Object code” means any non-source form of a 109 + work. 110 + 111 + A “Standard Interface” means an interface that either is an official 112 + standard defined by a recognized standards body, or, in the case of interfaces 113 + specified for a particular programming language, one that is widely used among 114 + developers working in that language. 115 + 116 + The “System Libraries” of an executable work include anything, other than 117 + the work as a whole, that **(a)** is included in the normal form of packaging a Major 118 + Component, but which is not part of that Major Component, and **(b)** serves only to 119 + enable use of the work with that Major Component, or to implement a Standard 120 + Interface for which an implementation is available to the public in source code form. 121 + A “Major Component”, in this context, means a major essential component 122 + (kernel, window system, and so on) of the specific operating system (if any) on which 123 + the executable work runs, or a compiler used to produce the work, or an object code 124 + interpreter used to run it. 125 + 126 + The “Corresponding Source” for a work in object code form means all the 127 + source code needed to generate, install, and (for an executable work) run the object 128 + code and to modify the work, including scripts to control those activities. However, 129 + it does not include the work's System Libraries, or general-purpose tools or 130 + generally available free programs which are used unmodified in performing those 131 + activities but which are not part of the work. For example, Corresponding Source 132 + includes interface definition files associated with source files for the work, and 133 + the source code for shared libraries and dynamically linked subprograms that the work 134 + is specifically designed to require, such as by intimate data communication or 135 + control flow between those subprograms and other parts of the work. 136 + 137 + The Corresponding Source need not include anything that users can regenerate 138 + automatically from other parts of the Corresponding Source. 139 + 140 + The Corresponding Source for a work in source code form is that same work. 141 + 142 + ### 2. Basic Permissions 143 + 144 + All rights granted under this License are granted for the term of copyright on the 145 + Program, and are irrevocable provided the stated conditions are met. This License 146 + explicitly affirms your unlimited permission to run the unmodified Program. The 147 + output from running a covered work is covered by this License only if the output, 148 + given its content, constitutes a covered work. This License acknowledges your rights 149 + of fair use or other equivalent, as provided by copyright law. 150 + 151 + You may make, run and propagate covered works that you do not convey, without 152 + conditions so long as your license otherwise remains in force. You may convey covered 153 + works to others for the sole purpose of having them make modifications exclusively 154 + for you, or provide you with facilities for running those works, provided that you 155 + comply with the terms of this License in conveying all material for which you do not 156 + control copyright. Those thus making or running the covered works for you must do so 157 + exclusively on your behalf, under your direction and control, on terms that prohibit 158 + them from making any copies of your copyrighted material outside their relationship 159 + with you. 160 + 161 + Conveying under any other circumstances is permitted solely under the conditions 162 + stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 163 + 164 + ### 3. Protecting Users' Legal Rights From Anti-Circumvention Law 165 + 166 + No covered work shall be deemed part of an effective technological measure under any 167 + applicable law fulfilling obligations under article 11 of the WIPO copyright treaty 168 + adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention 169 + of such measures. 170 + 171 + When you convey a covered work, you waive any legal power to forbid circumvention of 172 + technological measures to the extent such circumvention is effected by exercising 173 + rights under this License with respect to the covered work, and you disclaim any 174 + intention to limit operation or modification of the work as a means of enforcing, 175 + against the work's users, your or third parties' legal rights to forbid circumvention 176 + of technological measures. 177 + 178 + ### 4. Conveying Verbatim Copies 179 + 180 + You may convey verbatim copies of the Program's source code as you receive it, in any 181 + medium, provided that you conspicuously and appropriately publish on each copy an 182 + appropriate copyright notice; keep intact all notices stating that this License and 183 + any non-permissive terms added in accord with section 7 apply to the code; keep 184 + intact all notices of the absence of any warranty; and give all recipients a copy of 185 + this License along with the Program. 186 + 187 + You may charge any price or no price for each copy that you convey, and you may offer 188 + support or warranty protection for a fee. 189 + 190 + ### 5. Conveying Modified Source Versions 191 + 192 + You may convey a work based on the Program, or the modifications to produce it from 193 + the Program, in the form of source code under the terms of section 4, provided that 194 + you also meet all of these conditions: 195 + 196 + * **a)** The work must carry prominent notices stating that you modified it, and giving a 197 + relevant date. 198 + * **b)** The work must carry prominent notices stating that it is released under this 199 + License and any conditions added under section 7. This requirement modifies the 200 + requirement in section 4 to “keep intact all notices”. 201 + * **c)** You must license the entire work, as a whole, under this License to anyone who 202 + comes into possession of a copy. This License will therefore apply, along with any 203 + applicable section 7 additional terms, to the whole of the work, and all its parts, 204 + regardless of how they are packaged. This License gives no permission to license the 205 + work in any other way, but it does not invalidate such permission if you have 206 + separately received it. 207 + * **d)** If the work has interactive user interfaces, each must display Appropriate Legal 208 + Notices; however, if the Program has interactive interfaces that do not display 209 + Appropriate Legal Notices, your work need not make them do so. 210 + 211 + A compilation of a covered work with other separate and independent works, which are 212 + not by their nature extensions of the covered work, and which are not combined with 213 + it such as to form a larger program, in or on a volume of a storage or distribution 214 + medium, is called an “aggregate” if the compilation and its resulting 215 + copyright are not used to limit the access or legal rights of the compilation's users 216 + beyond what the individual works permit. Inclusion of a covered work in an aggregate 217 + does not cause this License to apply to the other parts of the aggregate. 218 + 219 + ### 6. Conveying Non-Source Forms 220 + 221 + You may convey a covered work in object code form under the terms of sections 4 and 222 + 5, provided that you also convey the machine-readable Corresponding Source under the 223 + terms of this License, in one of these ways: 224 + 225 + * **a)** Convey the object code in, or embodied in, a physical product (including a 226 + physical distribution medium), accompanied by the Corresponding Source fixed on a 227 + durable physical medium customarily used for software interchange. 228 + * **b)** Convey the object code in, or embodied in, a physical product (including a 229 + physical distribution medium), accompanied by a written offer, valid for at least 230 + three years and valid for as long as you offer spare parts or customer support for 231 + that product model, to give anyone who possesses the object code either **(1)** a copy of 232 + the Corresponding Source for all the software in the product that is covered by this 233 + License, on a durable physical medium customarily used for software interchange, for 234 + a price no more than your reasonable cost of physically performing this conveying of 235 + source, or **(2)** access to copy the Corresponding Source from a network server at no 236 + charge. 237 + * **c)** Convey individual copies of the object code with a copy of the written offer to 238 + provide the Corresponding Source. This alternative is allowed only occasionally and 239 + noncommercially, and only if you received the object code with such an offer, in 240 + accord with subsection 6b. 241 + * **d)** Convey the object code by offering access from a designated place (gratis or for 242 + a charge), and offer equivalent access to the Corresponding Source in the same way 243 + through the same place at no further charge. You need not require recipients to copy 244 + the Corresponding Source along with the object code. If the place to copy the object 245 + code is a network server, the Corresponding Source may be on a different server 246 + (operated by you or a third party) that supports equivalent copying facilities, 247 + provided you maintain clear directions next to the object code saying where to find 248 + the Corresponding Source. Regardless of what server hosts the Corresponding Source, 249 + you remain obligated to ensure that it is available for as long as needed to satisfy 250 + these requirements. 251 + * **e)** Convey the object code using peer-to-peer transmission, provided you inform 252 + other peers where the object code and Corresponding Source of the work are being 253 + offered to the general public at no charge under subsection 6d. 254 + 255 + A separable portion of the object code, whose source code is excluded from the 256 + Corresponding Source as a System Library, need not be included in conveying the 257 + object code work. 258 + 259 + A “User Product” is either **(1)** a “consumer product”, which 260 + means any tangible personal property which is normally used for personal, family, or 261 + household purposes, or **(2)** anything designed or sold for incorporation into a 262 + dwelling. In determining whether a product is a consumer product, doubtful cases 263 + shall be resolved in favor of coverage. For a particular product received by a 264 + particular user, “normally used” refers to a typical or common use of 265 + that class of product, regardless of the status of the particular user or of the way 266 + in which the particular user actually uses, or expects or is expected to use, the 267 + product. A product is a consumer product regardless of whether the product has 268 + substantial commercial, industrial or non-consumer uses, unless such uses represent 269 + the only significant mode of use of the product. 270 + 271 + “Installation Information” for a User Product means any methods, 272 + procedures, authorization keys, or other information required to install and execute 273 + modified versions of a covered work in that User Product from a modified version of 274 + its Corresponding Source. The information must suffice to ensure that the continued 275 + functioning of the modified object code is in no case prevented or interfered with 276 + solely because modification has been made. 277 + 278 + If you convey an object code work under this section in, or with, or specifically for 279 + use in, a User Product, and the conveying occurs as part of a transaction in which 280 + the right of possession and use of the User Product is transferred to the recipient 281 + in perpetuity or for a fixed term (regardless of how the transaction is 282 + characterized), the Corresponding Source conveyed under this section must be 283 + accompanied by the Installation Information. But this requirement does not apply if 284 + neither you nor any third party retains the ability to install modified object code 285 + on the User Product (for example, the work has been installed in ROM). 286 + 287 + The requirement to provide Installation Information does not include a requirement to 288 + continue to provide support service, warranty, or updates for a work that has been 289 + modified or installed by the recipient, or for the User Product in which it has been 290 + modified or installed. Access to a network may be denied when the modification itself 291 + materially and adversely affects the operation of the network or violates the rules 292 + and protocols for communication across the network. 293 + 294 + Corresponding Source conveyed, and Installation Information provided, in accord with 295 + this section must be in a format that is publicly documented (and with an 296 + implementation available to the public in source code form), and must require no 297 + special password or key for unpacking, reading or copying. 298 + 299 + ### 7. Additional Terms 300 + 301 + “Additional permissions” are terms that supplement the terms of this 302 + License by making exceptions from one or more of its conditions. Additional 303 + permissions that are applicable to the entire Program shall be treated as though they 304 + were included in this License, to the extent that they are valid under applicable 305 + law. If additional permissions apply only to part of the Program, that part may be 306 + used separately under those permissions, but the entire Program remains governed by 307 + this License without regard to the additional permissions. 308 + 309 + When you convey a copy of a covered work, you may at your option remove any 310 + additional permissions from that copy, or from any part of it. (Additional 311 + permissions may be written to require their own removal in certain cases when you 312 + modify the work.) You may place additional permissions on material, added by you to a 313 + covered work, for which you have or can give appropriate copyright permission. 314 + 315 + Notwithstanding any other provision of this License, for material you add to a 316 + covered work, you may (if authorized by the copyright holders of that material) 317 + supplement the terms of this License with terms: 318 + 319 + * **a)** Disclaiming warranty or limiting liability differently from the terms of 320 + sections 15 and 16 of this License; or 321 + * **b)** Requiring preservation of specified reasonable legal notices or author 322 + attributions in that material or in the Appropriate Legal Notices displayed by works 323 + containing it; or 324 + * **c)** Prohibiting misrepresentation of the origin of that material, or requiring that 325 + modified versions of such material be marked in reasonable ways as different from the 326 + original version; or 327 + * **d)** Limiting the use for publicity purposes of names of licensors or authors of the 328 + material; or 329 + * **e)** Declining to grant rights under trademark law for use of some trade names, 330 + trademarks, or service marks; or 331 + * **f)** Requiring indemnification of licensors and authors of that material by anyone 332 + who conveys the material (or modified versions of it) with contractual assumptions of 333 + liability to the recipient, for any liability that these contractual assumptions 334 + directly impose on those licensors and authors. 335 + 336 + All other non-permissive additional terms are considered “further 337 + restrictions” within the meaning of section 10. If the Program as you received 338 + it, or any part of it, contains a notice stating that it is governed by this License 339 + along with a term that is a further restriction, you may remove that term. If a 340 + license document contains a further restriction but permits relicensing or conveying 341 + under this License, you may add to a covered work material governed by the terms of 342 + that license document, provided that the further restriction does not survive such 343 + relicensing or conveying. 344 + 345 + If you add terms to a covered work in accord with this section, you must place, in 346 + the relevant source files, a statement of the additional terms that apply to those 347 + files, or a notice indicating where to find the applicable terms. 348 + 349 + Additional terms, permissive or non-permissive, may be stated in the form of a 350 + separately written license, or stated as exceptions; the above requirements apply 351 + either way. 352 + 353 + ### 8. Termination 354 + 355 + You may not propagate or modify a covered work except as expressly provided under 356 + this License. Any attempt otherwise to propagate or modify it is void, and will 357 + automatically terminate your rights under this License (including any patent licenses 358 + granted under the third paragraph of section 11). 359 + 360 + However, if you cease all violation of this License, then your license from a 361 + particular copyright holder is reinstated **(a)** provisionally, unless and until the 362 + copyright holder explicitly and finally terminates your license, and **(b)** permanently, 363 + if the copyright holder fails to notify you of the violation by some reasonable means 364 + prior to 60 days after the cessation. 365 + 366 + Moreover, your license from a particular copyright holder is reinstated permanently 367 + if the copyright holder notifies you of the violation by some reasonable means, this 368 + is the first time you have received notice of violation of this License (for any 369 + work) from that copyright holder, and you cure the violation prior to 30 days after 370 + your receipt of the notice. 371 + 372 + Termination of your rights under this section does not terminate the licenses of 373 + parties who have received copies or rights from you under this License. If your 374 + rights have been terminated and not permanently reinstated, you do not qualify to 375 + receive new licenses for the same material under section 10. 376 + 377 + ### 9. Acceptance Not Required for Having Copies 378 + 379 + You are not required to accept this License in order to receive or run a copy of the 380 + Program. Ancillary propagation of a covered work occurring solely as a consequence of 381 + using peer-to-peer transmission to receive a copy likewise does not require 382 + acceptance. However, nothing other than this License grants you permission to 383 + propagate or modify any covered work. These actions infringe copyright if you do not 384 + accept this License. Therefore, by modifying or propagating a covered work, you 385 + indicate your acceptance of this License to do so. 386 + 387 + ### 10. Automatic Licensing of Downstream Recipients 388 + 389 + Each time you convey a covered work, the recipient automatically receives a license 390 + from the original licensors, to run, modify and propagate that work, subject to this 391 + License. You are not responsible for enforcing compliance by third parties with this 392 + License. 393 + 394 + An “entity transaction” is a transaction transferring control of an 395 + organization, or substantially all assets of one, or subdividing an organization, or 396 + merging organizations. If propagation of a covered work results from an entity 397 + transaction, each party to that transaction who receives a copy of the work also 398 + receives whatever licenses to the work the party's predecessor in interest had or 399 + could give under the previous paragraph, plus a right to possession of the 400 + Corresponding Source of the work from the predecessor in interest, if the predecessor 401 + has it or can get it with reasonable efforts. 402 + 403 + You may not impose any further restrictions on the exercise of the rights granted or 404 + affirmed under this License. For example, you may not impose a license fee, royalty, 405 + or other charge for exercise of rights granted under this License, and you may not 406 + initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging 407 + that any patent claim is infringed by making, using, selling, offering for sale, or 408 + importing the Program or any portion of it. 409 + 410 + ### 11. Patents 411 + 412 + A “contributor” is a copyright holder who authorizes use under this 413 + License of the Program or a work on which the Program is based. The work thus 414 + licensed is called the contributor's “contributor version”. 415 + 416 + A contributor's “essential patent claims” are all patent claims owned or 417 + controlled by the contributor, whether already acquired or hereafter acquired, that 418 + would be infringed by some manner, permitted by this License, of making, using, or 419 + selling its contributor version, but do not include claims that would be infringed 420 + only as a consequence of further modification of the contributor version. For 421 + purposes of this definition, “control” includes the right to grant patent 422 + sublicenses in a manner consistent with the requirements of this License. 423 + 424 + Each contributor grants you a non-exclusive, worldwide, royalty-free patent license 425 + under the contributor's essential patent claims, to make, use, sell, offer for sale, 426 + import and otherwise run, modify and propagate the contents of its contributor 427 + version. 428 + 429 + In the following three paragraphs, a “patent license” is any express 430 + agreement or commitment, however denominated, not to enforce a patent (such as an 431 + express permission to practice a patent or covenant not to sue for patent 432 + infringement). To “grant” such a patent license to a party means to make 433 + such an agreement or commitment not to enforce a patent against the party. 434 + 435 + If you convey a covered work, knowingly relying on a patent license, and the 436 + Corresponding Source of the work is not available for anyone to copy, free of charge 437 + and under the terms of this License, through a publicly available network server or 438 + other readily accessible means, then you must either **(1)** cause the Corresponding 439 + Source to be so available, or **(2)** arrange to deprive yourself of the benefit of the 440 + patent license for this particular work, or **(3)** arrange, in a manner consistent with 441 + the requirements of this License, to extend the patent license to downstream 442 + recipients. “Knowingly relying” means you have actual knowledge that, but 443 + for the patent license, your conveying the covered work in a country, or your 444 + recipient's use of the covered work in a country, would infringe one or more 445 + identifiable patents in that country that you have reason to believe are valid. 446 + 447 + If, pursuant to or in connection with a single transaction or arrangement, you 448 + convey, or propagate by procuring conveyance of, a covered work, and grant a patent 449 + license to some of the parties receiving the covered work authorizing them to use, 450 + propagate, modify or convey a specific copy of the covered work, then the patent 451 + license you grant is automatically extended to all recipients of the covered work and 452 + works based on it. 453 + 454 + A patent license is “discriminatory” if it does not include within the 455 + scope of its coverage, prohibits the exercise of, or is conditioned on the 456 + non-exercise of one or more of the rights that are specifically granted under this 457 + License. You may not convey a covered work if you are a party to an arrangement with 458 + a third party that is in the business of distributing software, under which you make 459 + payment to the third party based on the extent of your activity of conveying the 460 + work, and under which the third party grants, to any of the parties who would receive 461 + the covered work from you, a discriminatory patent license **(a)** in connection with 462 + copies of the covered work conveyed by you (or copies made from those copies), or **(b)** 463 + primarily for and in connection with specific products or compilations that contain 464 + the covered work, unless you entered into that arrangement, or that patent license 465 + was granted, prior to 28 March 2007. 466 + 467 + Nothing in this License shall be construed as excluding or limiting any implied 468 + license or other defenses to infringement that may otherwise be available to you 469 + under applicable patent law. 470 + 471 + ### 12. No Surrender of Others' Freedom 472 + 473 + If conditions are imposed on you (whether by court order, agreement or otherwise) 474 + that contradict the conditions of this License, they do not excuse you from the 475 + conditions of this License. If you cannot convey a covered work so as to satisfy 476 + simultaneously your obligations under this License and any other pertinent 477 + obligations, then as a consequence you may not convey it at all. For example, if you 478 + agree to terms that obligate you to collect a royalty for further conveying from 479 + those to whom you convey the Program, the only way you could satisfy both those terms 480 + and this License would be to refrain entirely from conveying the Program. 481 + 482 + ### 13. Use with the GNU Affero General Public License 483 + 484 + Notwithstanding any other provision of this License, you have permission to link or 485 + combine any covered work with a work licensed under version 3 of the GNU Affero 486 + General Public License into a single combined work, and to convey the resulting work. 487 + The terms of this License will continue to apply to the part which is the covered 488 + work, but the special requirements of the GNU Affero General Public License, section 489 + 13, concerning interaction through a network will apply to the combination as such. 490 + 491 + ### 14. Revised Versions of this License 492 + 493 + The Free Software Foundation may publish revised and/or new versions of the GNU 494 + General Public License from time to time. Such new versions will be similar in spirit 495 + to the present version, but may differ in detail to address new problems or concerns. 496 + 497 + Each version is given a distinguishing version number. If the Program specifies that 498 + a certain numbered version of the GNU General Public License “or any later 499 + version” applies to it, you have the option of following the terms and 500 + conditions either of that numbered version or of any later version published by the 501 + Free Software Foundation. If the Program does not specify a version number of the GNU 502 + General Public License, you may choose any version ever published by the Free 503 + Software Foundation. 504 + 505 + If the Program specifies that a proxy can decide which future versions of the GNU 506 + General Public License can be used, that proxy's public statement of acceptance of a 507 + version permanently authorizes you to choose that version for the Program. 508 + 509 + Later license versions may give you additional or different permissions. However, no 510 + additional obligations are imposed on any author or copyright holder as a result of 511 + your choosing to follow a later version. 512 + 513 + ### 15. Disclaimer of Warranty 514 + 515 + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 516 + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 517 + PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER 518 + EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 519 + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 520 + QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE 521 + DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 522 + 523 + ### 16. Limitation of Liability 524 + 525 + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY 526 + COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS 527 + PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 528 + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 529 + PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE 530 + OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE 531 + WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 532 + POSSIBILITY OF SUCH DAMAGES. 533 + 534 + ### 17. Interpretation of Sections 15 and 16 535 + 536 + If the disclaimer of warranty and limitation of liability provided above cannot be 537 + given local legal effect according to their terms, reviewing courts shall apply local 538 + law that most closely approximates an absolute waiver of all civil liability in 539 + connection with the Program, unless a warranty or assumption of liability accompanies 540 + a copy of the Program in return for a fee. 541 + 542 + _END OF TERMS AND CONDITIONS_ 543 + 544 + ## How to Apply These Terms to Your New Programs 545 + 546 + If you develop a new program, and you want it to be of the greatest possible use to 547 + the public, the best way to achieve this is to make it free software which everyone 548 + can redistribute and change under these terms. 549 + 550 + To do so, attach the following notices to the program. It is safest to attach them 551 + to the start of each source file to most effectively state the exclusion of warranty; 552 + and each file should have at least the “copyright” line and a pointer to 553 + where the full notice is found. 554 + 555 + <one line to give the program's name and a brief idea of what it does.> 556 + Copyright (C) <year> <name of author> 557 + 558 + This program is free software: you can redistribute it and/or modify 559 + it under the terms of the GNU General Public License as published by 560 + the Free Software Foundation, either version 3 of the License, or 561 + (at your option) any later version. 562 + 563 + This program is distributed in the hope that it will be useful, 564 + but WITHOUT ANY WARRANTY; without even the implied warranty of 565 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 566 + GNU General Public License for more details. 567 + 568 + You should have received a copy of the GNU General Public License 569 + along with this program. If not, see <http://www.gnu.org/licenses/>. 570 + 571 + Also add information on how to contact you by electronic and paper mail. 572 + 573 + If the program does terminal interaction, make it output a short notice like this 574 + when it starts in an interactive mode: 575 + 576 + <program> Copyright (C) <year> <name of author> 577 + This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 578 + This is free software, and you are welcome to redistribute it 579 + under certain conditions; type 'show c' for details. 580 + 581 + The hypothetical commands `show w` and `show c` should show the appropriate parts of 582 + the General Public License. Of course, your program's commands might be different; 583 + for a GUI interface, you would use an “about box”. 584 + 585 + You should also get your employer (if you work as a programmer) or school, if any, to 586 + sign a “copyright disclaimer” for the program, if necessary. For more 587 + information on this, and how to apply and follow the GNU GPL, see 588 + &lt;<http://www.gnu.org/licenses/>&gt;. 589 + 590 + The GNU General Public License does not permit incorporating your program into 591 + proprietary programs. If your program is a subroutine library, you may consider it 592 + more useful to permit linking proprietary applications with the library. If this is 593 + what you want to do, use the GNU Lesser General Public License instead of this 594 + License. But first, please read 595 + &lt;<http://www.gnu.org/philosophy/why-not-lgpl.html>&gt;.
+2
NAMESPACE
··· 1 + # Generated by roxygen2: do not edit by hand 2 +
+3
NEWS.md
··· 1 + # bootstrapper (development version) 2 + 3 + * Initial CRAN submission.
+103
R/bootstrapper.R
··· 1 + bootrapper <- function( 2 + path = ".", 3 + author = person( 4 + "Visruth", 5 + "Srimath Kandali", 6 + , 7 + "public@visruth.com", 8 + role = c("aut", "cre", "cph"), 9 + comment = c(ORCID = "0009-0005-9097-0688") 10 + ), 11 + private = TRUE 12 + ) { 13 + create_package(path, author, private) 14 + pkg_setup() 15 + invisible(NULL) 16 + } 17 + 18 + pkg_setup <- function() { 19 + # TODO: check if this is R package 20 + usethis::use_readme_md(open = FALSE) 21 + usethis::use_testthat() 22 + usethis::use_news_md(open = FALSE) 23 + 24 + # GitHub Actions setup 25 + usethis::use_github_action("check-standard", badge = TRUE) 26 + usethis::use_github_action("test-coverage", badge = TRUE) 27 + usethis::use_github_action( 28 + url = "https://github.com/visruthsk/bootstrapper/blob/main/.github/workflows/format-suggest.yaml" 29 + ) 30 + usethis::use_pkgdown_github_pages() 31 + usethis::use_spell_check(error = TRUE) 32 + 33 + # Dependabot 34 + c( 35 + "version: 2", 36 + "updates:", 37 + " - package-ecosystem: \"github-actions\"", 38 + " directory: \"/\"", 39 + " schedule:", 40 + " interval: \"weekly\"" 41 + ) |> # TODO: move file to inst? 42 + write_to_path(fs::path(".github", "dependabot.yml")) 43 + 44 + # Air and Jarl configs 45 + usethis::use_air() 46 + c( 47 + "{", 48 + ' "recommendations": [', 49 + ' "Posit.air-vscode",', 50 + ' "etiennebacher.jarl-vscode"', 51 + " ]", 52 + "}" 53 + ) |> 54 + write_to_path(fs::path(".vscode", "extensions.json")) 55 + c( 56 + "[lint]", 57 + "extend-select = [\"TESTTHAT\"]" 58 + ) |> 59 + write_to_path(fs::path("tests", "jarl.toml")) # TODO: need to make GHA jarl runs respect this 60 + 61 + # Cleanup 62 + find_replace_in_gha("actions/checkout@v4", "actions/checkout@v6") 63 + find_replace_in_gha( 64 + "JamesIves/github-pages-deploy-action@v4.5.0", 65 + "JamesIves/github-pages-deploy-action@v4" 66 + ) 67 + usethis::use_tidy_description() 68 + invisible(NULL) 69 + } 70 + 71 + create_package <- function( 72 + path = ".", 73 + author = person( 74 + "Visruth", 75 + "Srimath Kandali", 76 + , 77 + "public@visruth.com", 78 + role = c("aut", "cre", "cph"), 79 + comment = c(ORCID = "0009-0005-9097-0688") 80 + ), 81 + private = TRUE 82 + ) { 83 + usethis::create_package(path = path, fields = list("Authors@R" = author)) 84 + unlink("*.Rproj") 85 + find_replace_in_file( 86 + "^\\^.*\\\\\\.Rproj\\$$", 87 + "", 88 + ".Rbuildignore", 89 + fixed = FALSE 90 + ) 91 + find_replace_in_file( 92 + "^\\^\\\\\\.Rproj\\\\\\.user\\$$", 93 + "", 94 + ".Rbuildignore", 95 + fixed = FALSE 96 + ) 97 + readLines(".Rbuildignore", warn = FALSE) |> 98 + Filter(nzchar, x = _) |> 99 + writeLines(".Rbuildignore") 100 + # TODO: CLI message select a license; make sure you declare import using usethis useimportfrom 101 + usethis::use_github(private = private) 102 + invisible(NULL) 103 + }
+34
R/utils.R
··· 1 + write_to_path <- function(text, filepath) { 2 + fs::dir_create(fs::path_dir(filepath), recurse = TRUE) 3 + writeLines(text, filepath) 4 + } 5 + 6 + find_replace_in_file <- function(from, to, file, fixed = TRUE) { 7 + x <- readLines(file, warn = FALSE) 8 + if (any(grepl(from, x, fixed = fixed))) { 9 + writeLines(gsub(from, to, x, fixed = fixed), file) 10 + TRUE 11 + } else { 12 + FALSE 13 + } 14 + } 15 + 16 + find_replace_in_dir <- function(from, to, path, pattern) { 17 + for (f in list.files( 18 + path, 19 + recursive = TRUE, 20 + full.names = TRUE, 21 + pattern = pattern 22 + )) { 23 + find_replace_in_file(from, to, f) 24 + } 25 + } 26 + 27 + find_replace_in_gha <- function(from, to) { 28 + find_replace_in_dir( 29 + from = from, 30 + to = to, 31 + path = ".github/workflows", 32 + pattern = "\\.ya?ml$" 33 + ) 34 + }
+62
README.md
··· 1 + # bootstrapper 2 + 3 + <!-- badges: start --> 4 + [![R-CMD-check](https://github.com/VisruthSK/bootstrapper/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/VisruthSK/bootstrapper/actions/workflows/R-CMD-check.yaml) 5 + [![Codecov test coverage](https://codecov.io/gh/VisruthSK/bootstrapper/graph/badge.svg)](https://app.codecov.io/gh/VisruthSK/bootstrapper) 6 + [![test-coverage](https://github.com/VisruthSK/bootstrapper/actions/workflows/test-coverage.yaml/badge.svg)](https://github.com/VisruthSK/bootstrapper/actions/workflows/test-coverage.yaml) 7 + <!-- badges: end --> 8 + 9 + The goal of bootstrapper is to ... 10 + 11 + ## Installation 12 + 13 + You can install the development version of bootstrapper like so: 14 + 15 + ``` r 16 + # FILL THIS IN! HOW CAN PEOPLE INSTALL YOUR DEV PACKAGE? 17 + ``` 18 + 19 + ## Example 20 + 21 + This is a basic example which shows you how to solve a common problem: 22 + 23 + ``` r 24 + library(bootstrapper) 25 + ## basic example code 26 + ``` 27 + 28 + ## IMPLEMENT THIS WORKFLOW: 29 + 30 + ```r 31 + usethis::create_package(".") 32 + # publish repo to GitHub 33 + usethis::use_readme_md() 34 + unlink("*.Rproj") 35 + usethis::use_testthat() 36 + 37 + # GitHub Actions Setup 38 + usethis::use_github_action("check-standard", badge = TRUE) 39 + usethis::use_github_action("test-coverage", badge = TRUE) 40 + usethis::use_github_action( 41 + url = "https://github.com/visruthsk/bootstrapper/blob/main/.github/workflows/format-suggest.yaml" 42 + ) 43 + usethis::use_pkgdown_github_pages() 44 + c( 45 + "version: 2", 46 + "updates:", 47 + " - package-ecosystem: \"github-actions\"", 48 + " directory: \"/\"", 49 + " schedule:", 50 + " interval: \"weekly\"" 51 + ) |> 52 + write_to_path(fs::path(".github", "dependabot.yml")) 53 + 54 + find_replace_in_dir("actions/checkout@v4", "actions/checkout@v6") 55 + find_replace_in_dir( 56 + "JamesIves/github-pages-deploy-action@v4.5.0", 57 + "JamesIves/github-pages-deploy-action@v4" 58 + ) 59 + 60 + usethis::use_tidy_description() 61 + # pick a license 62 + ```
+4
_pkgdown.yml
··· 1 + url: https://visruthsk.github.io/bootstrapper/ 2 + template: 3 + bootstrap: 5 4 +
air.toml

This is a binary file and will not be displayed.

+2
inst/WORDLIST
··· 1 + CMD 2 + Codecov
+2
tests/jarl.toml
··· 1 + [lint] 2 + extend-select = ["TESTTHAT"]
+3
tests/spelling.R
··· 1 + if(requireNamespace('spelling', quietly = TRUE)) 2 + spelling::spell_check_test(vignettes = TRUE, error = TRUE, 3 + skip_on_cran = TRUE)
+12
tests/testthat.R
··· 1 + # This file is part of the standard setup for testthat. 2 + # It is recommended that you do not modify it. 3 + # 4 + # Where should you do additional test configuration? 5 + # Learn more about the roles of various files in: 6 + # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview 7 + # * https://testthat.r-lib.org/articles/special-files.html 8 + 9 + library(testthat) 10 + library(bootstrapper) 11 + 12 + test_check("bootstrapper")