cchecksapi icon indicating copy to clipboard operation
cchecksapi copied to clipboard

CRAN checks API (DEFUNCT)

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 -> [![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 -> [![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)
  • /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)

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: if true, ignore any NOTE's and get a green OK badge. supported by /badges/summary and /badges/flavor

examples

both badges routes

package summary route

flavor route