CRAN Check Results API
Base URL: https://cranchecks.info/
API Docs: https://docs.cranchecks.info/
Check out cchecks for an R package interface to this API
tech:
- language: Ruby
- rest framework: Sinatra
- scraping http requests: faraday
- databases: mongodb, mariadb
- container: all wrapped up in docker (docker-compose)
- uses Gábor's https://crandb.r-pkg.org API to get names of CRAN packages
- for the history routes, we keep the last 30 days of checks for each package; each day we purge any checks data older than 30 days
- A cron job:
- scrapes pkg specific data every 3rd hour
- scrapes maintainer level data every 4th hour
- poplulates the history routes once a day
JSON API routes
/docs
/heartbeat
/pkgs
/pkgs/:pkg_name:
/pkgs/:pkg_name:/history
/history/:date:
/maintainers
/maintainers/:email:
/badges/:type/:package:
/badges/flavor/:flavor/:package:
JSON API examples
To replicate the examples below as is, you'll need curl (which you likely have), and jq (https://stedolan.github.io/jq/) which you may not have. You can also just copy/paste the URLs into your browser
All pkgs from a maintainer that have any checks not passing
curl https://cranchecks.info/maintainers/csardi.gabor_at_gmail.com | jq '.data.table[] | select(.any) | .package'
Similar but across all packages
curl https://cranchecks.info/pkgs?limit=10 | jq '.data[] | select(.summary.any) | .package'
Packages that have error status checks
curl https://cranchecks.info/pkgs?limit=1000 | jq '.data[] | select(.summary.error > 0) | .package'
workflow for checking your own packages
Check if you have any packages have one or more of a current status across operating systems and R versions, e.g., errors
curl https://cranchecks.info/maintainers/csardi.gabor_at_gmail.com | jq '.data.table[] | select(.error > 0)'
{
"package": "rcmdcheck",
"any": true,
"ok": 9,
"note": 0,
"warn": 0,
"error": 3
}
{
"package": "secret",
"any": true,
"ok": 11,
"note": 0,
"warn": 0,
"error": 1
}
Then grab the check details for a specific package
curl https://cranchecks.info/pkgs/secret | jq .data.check_details
{
"version": "1.0.0",
"check": "examples",
"result": "ERROR",
"output": "Running examples in 'secret-Ex.R' ... cutoff",
"flavors": [
"r-devel-windows-ix86+x86_64"
],
"additional_issues": []
}
Optionally see the check details for previous CRAN checks in the /history
route (up to 30 days prior to the current date)
curl https://cranchecks.info/pkgs/secret/history | jq '.data.history[].check_details'
{
"version": "1.0.0",
"check": "examples",
"result": "ERROR",
"output": "Running examples in 'secret-Ex.R' ... cutoff",
"flavors": [
"r-devel-windows-ix86+x86_64"
],
"additional_issues": []
}
{
"version": "1.0.0",
"check": "examples",
"result": "ERROR",
"output": "Running examples in 'secret-Ex.R' ... cutoff",
"flavors": [
"r-devel-windows-ix86+x86_64"
],
"additional_issues": []
}
... cutoff
Badges
also check out badges from R-hub for CRAN versions, CRAN release dates, and CRAN downloads https://docs.r-hub.io/#badges
markdown egs to use in your README
linking to cran checks page (likely want to use cran.r-project.org
url since cran check will complain about a different mirror's base url)
-> [![cran checks](https://cranchecks.info/badges/summary/reshape)](https://cran.r-project.org/web/checks/check_results_reshape.html)
Or maybe link to JSON response for this API
-> [![cran checks](https://cranchecks.info/badges/summary/reshape)](https://cranchecks.info/pkgs/reshape)
pkgs using the badges:
package status summaries
/badges/summary/:package
all okay?, no notes, warnings, or errors- if any notes, warnings, or errors =
Not OK
(color:red) - if NO notes, warnings, or errors =
OK
(color:green)
- if any notes, warnings, or errors =
/badges/worst/:package
worst result:- if any errors =
ERROR
(color:red) - if any warnings, and no errors =
WARN
(color:yellow) - if any notes, and no errors or warnings =
NOTE
(color:blue) - if no errors, warnings, or notes =
OK
(color:green)
- if any errors =
NOT SUPPORTED YET
/badges/noerrors/:package
no errors? but could have warnings or notes/badges/nowarns/:package
no warns? no errors, no warnings, but could have notes/badges/nonotes/:package
no notes? no errors, no warnings, and no notes
per flavor
-
/badges/flavor/:flavor/:package
flavor + package, where flavors are any one of:operating systems
- linux - windows - osx - solaris
R versions
- devel - oldrel - patched - release
With meanings:
- if any notes, warnings, or errors =
Not OK
(color:red) - if NO notes, warnings, or errors =
OK
(color:green)
Query parameters
ignore
: iftrue
, ignore anyNOTE
's and get a greenOK
badge. supported by/badges/summary
and/badges/flavor
examples
both badges routes
package summary route
flavor route