Introduction

This report checks if the status of packages on CRAN are due to intermittent failures.

Failures defined as warnings, notes or errors without change on:

  • R version used (if not stable the same svn snapshot)

  • The package version (Note that CRAN might modify a package without changing the version)

  • Their dependencies

Reasons of these failures might be because the packages depend on:

  • Random generation numbers

  • Flacky external resources

  • Other ?

Why is this important?

Because package maintainers of dependencies of that package, R core and CRAN team need to check if the failures are false positives.

This report started because it was suggested as something that the R-repositories working group could help the CRAN team.

Retrieve data

It makes use of tools::CRAN_check_results to retrieve the data.

library("dplyr")
library("tools", include.only = c("package_dependencies", "CRAN_check_results"))
library("flextable", include.only = c("flextable", "autofit"))
# Use a LOCAL environment to check if files can be overwritten on my computer
local_build <- as.logical(Sys.getenv("LOCAL", "FALSE"))
yc <- readRDS("today.RDS")
tc <- CRAN_check_results()
# Added 2023/03/09: sometimes some flavors are reported without status: Omit those
tc <- tc[!is.na(tc$Status),]
if (!interactive() && !local_build) {
  message("Saving today's file.")
  saveRDS(tc, file = "today.RDS")
} 

The checks are from multiple flavors release, devel, old release and patched on multiple machines and configurations.

old_flavors <- readRDS("flavors.RDS")
flavors <- unique(tc$Flavor)
# One flavor now present in all is the r-devel-windows-x86_64: skip
flavors <- setdiff(flavors, "r-devel-windows-x86_64")
proto <- data.frame(r_version = character(),
                    os = character(),
                    architecture = character(),
                    other = character())
flavors_df <- strcapture(
  pattern = "r-([[:alnum:]]+)-([[:alnum:]]+)-([[:alnum:]_\\+]+)-?(.*)", 
  x = flavors,
  proto = proto)

# Extract R version used and svn id
h <- "https://www.r-project.org/nosvn/R.check/%s/ggplot2-00check.html"
links <- sprintf(h, flavors)
extract_revision <- function(x) {
  r <- readLines(x, 12)[12]
  version <- strcapture(pattern = "([[:digit:]]\\.[[:digit:]]\\.[[:digit:]])",  
                        x = r, proto = data.frame(version = character()))
  revision <- strcapture(pattern = "(r[[:digit:]]+)",  x = r,
                         proto = data.frame(revision = character()))
  cbind(version, revision)
}
revision <- data.frame(version = character(),
                       revision = character())
for (i in links) {
  revision <- rbind(revision, extract_revision(i))
}

flavors_df <- cbind(flavors = flavors, flavors_df, revision)
if (!interactive() && !local_build) {
  saveRDS(flavors_df, "flavors.RDS")
}

m <- match(tc$Flavor, flavors_df$flavors)
tc_flavors <- cbind(tc, flavors_df[m, ])
flextable(flavors_df) |> 
  autofit()

flavors

r_version

os

architecture

other

version

revision

r-devel-linux-x86_64-debian-clang

devel

linux

x86_64

debian-clang

r89773

r-devel-linux-x86_64-debian-gcc

devel

linux

x86_64

debian-gcc

r89783

r-devel-linux-x86_64-fedora-clang

devel

linux

x86_64

fedora-clang

r89731

r-devel-linux-x86_64-fedora-gcc

devel

linux

x86_64

fedora-gcc

r89685

r-devel-macos-arm64

devel

macos

arm64

4.6.0

r89725

r-patched-linux-x86_64

patched

linux

x86_64

4.6.0

r89747

r-release-linux-x86_64

release

linux

x86_64

4.5.3

r-release-macos-arm64

release

macos

arm64

4.5.2

r-release-macos-x86_64

release

macos

x86_64

4.5.1

r-release-windows-x86_64

release

windows

x86_64

4.5.3

r-oldrel-macos-arm64

oldrel

macos

arm64

4.4.3

r-oldrel-macos-x86_64

oldrel

macos

x86_64

4.4.1

r-oldrel-windows-x86_64

oldrel

windows

x86_64

4.4.3

r89426

It assumes that the same configuration in one package is used for all. Or in other words that the reports of the configuration (svn revision and version) for the A3 package is the same as for all the other packages.

Warning: This assumption is not always true, but this would require to check each log file on each flavor to verify the R and svn id of each package (which could take too much time and resources).

Overview

Briefly an introduction of how much effort goes into checking

library("ggplot2")
theme_set(theme_minimal())
tc |> 
  filter(!is.na(T_install)) |> 
  ggplot() +
  geom_violin(aes(T_install, Flavor)) +
  scale_x_log10() +
  labs(x = "seconds", title = "Time to install", y = element_blank())
Machines (y axis) vs install time (seconds, x axis), violing plot usually around 10 seconds.

Distribution of install time on each machine.

This means that just to install all the packages on the multiple flavors with a single CPU would take 68 days.

tc |> 
  filter(!is.na(T_check)) |> 
  ggplot() +
  geom_violin(aes(T_check, Flavor), trim = FALSE) +
  scale_x_log10() +
  labs(x = "seconds", title = "Time to check", y = element_blank())
Machines (y axis) vs check time (seconds, x axis), violing plot usually around 100 seconds.

Distribution of checking time on each machine.

This means that to check all the packages on the multiple flavors with a single CPU would take 334 days.

tc |> 
  filter(!is.na(T_total)) |> 
  ggplot() +
  geom_violin(aes(T_total, Flavor)) +
  scale_x_log10() +
  labs(x = "seconds", title = "Time to check and install", y = element_blank())
Machines (y axis) vs total time (seconds, x axis), violing plot usually around 100 seconds.

Distribution of total time on each machine.

This means that to install and check all the packages with a single CPU would take 415 days.

I don’t know the computational cost of 266 days of CPU (every day), but a rough calculation of 2.5 cents per hour means 248.98 dollars daily dedicated to this.

tc |> 
  group_by(Package) |> 
  summarize(Versions = n_distinct(Version)) |> 
  ungroup() |> 
  count(Versions, name = "Packages", sort = TRUE) |> 
  flextable() |> 
  autofit()

Versions

Packages

1

22,881

2

644

3

12

This was surprising, but sometimes checks have multiple versions. Probably when a new version is added and the system don’t catch it for a certain machine.

tc |> 
  group_by(Package) |> 
  summarize(Flavors = n_distinct(Flavor)) |> 
  ungroup() |> 
  count(Flavors, name = "Packages", sort = TRUE) |> 
  flextable() |> 
  autofit()

Flavors

Packages

14

23,247

13

95

11

73

12

34

10

23

5

13

3

12

8

10

6

8

9

8

4

6

2

3

7

3

1

2

Similarly, often packages are only tested on few configurations.

Combining both we can have packages with few configurations that have multiple versions being tested.

tc |> 
  group_by(Package) |> 
  summarize(Versions = as.character(n_distinct(Version)),
            Flavors = n_distinct(Flavor)) |> 
  ungroup() |> 
  count(Flavors, Versions, name = "Packages") |> 
  ggplot() +
  geom_tile(aes(Flavors, Versions, fill = log10(Packages))) +
  scale_x_continuous(expand = expansion())
Flavors of machines and versions of packages

Most packages are just tested one version.

But focusing on those that have just one version of the package being tested, most of the machines have packages either OK or with some notes.

man_colors <- c("OK" = "green", "NOTE" = "darkgreen", 
                "WARNING" = "yellow", "ERROR" = "red", "FAILURE" = "black")
tc |> 
  group_by(Package) |> 
  filter(n_distinct(Version) == 1) |> 
  ungroup() |> 
  group_by(Flavor) |> 
  count(Status, name = "packages") |> 
  mutate(perc = packages/sum(packages),
         Status = forcats::fct_relevel(Status, names(man_colors))) |> 
  ggplot() + 
  geom_col(aes(perc, Flavor, fill = Status)) +
  scale_x_continuous(expand = expansion(), labels = scales::percent_format()) +
  scale_fill_manual(values = man_colors) +
  labs(title = "Packages check status", x = element_blank())
On the vertical axis the machine, on the horitzonal axis the packages colored by the status.

Most frequent status is OK or NOTE on all machines.

If we look at the most frequent status report for packages we can see this table:

ts <- tc |> 
  group_by(Package) |> 
  filter(n_distinct(Version) == 1) |> 
  count(Status, name = "flavors") |> 
  ungroup() |> 
  tidyr::pivot_wider(values_from = flavors, names_from = Status, 
                     values_fill = 0) |> 
  count(OK, NOTE, WARNING, ERROR, FAILURE, name = "packages", sort = TRUE)
download.file("https://cran.r-project.org/web/packages/packages.rds", 
              destfile = "packages.RDS") # From the help page
ap <- readRDS("packages.RDS") |> 
  as.data.frame() |> 
  distinct(Package, .keep_all = TRUE)
ap_bioc <- available.packages(repos = BiocManager::repositories()[1:5])
ap_bioc <- cbind(ap_bioc, Additional_repositories = NA)
ap_colm <- intersect(colnames(ap), colnames(ap_bioc))
ap <- rbind(ap[, ap_colm], ap_bioc[, ap_colm])
head(ts) |> 
  flextable() |> 
  autofit()

OK

NOTE

WARNING

ERROR

FAILURE

packages

14

0

0

0

0

13,215

12

2

0

0

0

4,181

11

3

0

0

0

1,408

0

14

0

0

0

919

9

5

0

0

0

772

10

4

0

0

0

356

We can see that the most common occurrences are some sort of OK and notes on checks. We can also check the official results on CRAN.

We can see that 1.25%, 0.66%, 0.23%, 0.08%, 0.00% of packages pass all checks without notes.

Now let’s see which of the notes or failures are due to intermittent issues.

Compare

First we need to make sure that we compare the right configurations. They must be the same machine, the same R version and the same svn revision between yesterday and today.

# Compare the previous flavor with today's
m_flavor <- which(flavors_df$flavors %in% old_flavors$flavors)
m_version <- which(flavors_df$version %in% old_flavors$version)
m_revision <- which(flavors_df$revision %in% old_flavors$revision)
tm <- table(c(m_flavor, m_version, m_revision))
compare <- flavors_df$flavors[tm == 3] # Only missing the packages version

All changes

Next, compare the status of the packages if the version of the package is the same.

# Find package on the flavors to compare that haven't changed versions
library("dplyr")
tcc <- filter(tc, Flavor %in% compare) |> 
  select(Flavor, Package, Version, Status) |> 
  arrange(Flavor, Package)
ycc <- filter(yc, Flavor %in% compare) |> 
  select(Flavor, Package, Version, Status) |> 
  arrange(Flavor, Package)

all_checks <- merge(tcc, ycc, by = c("Flavor", "Package"), 
                    suffixes = c(".t", ".y"), all = TRUE) 

possible_packages <- all_checks |> 
  filter(Version.t == Version.y & # Same version
           Status.t != Status.y & # Different status
           !is.na(Status.y) & # No new version or removed package
           !is.na(Status.t)) |> 
  rename(Today = Status.t, Yesterday = Status.y)
possible_packages |> 
  select(Package, Flavor, Today, Yesterday, -Version.t, -Version.y) |> 
  arrange(Package, Flavor) |> 
  flextable() |> 
  autofit()

Package

Flavor

Today

Yesterday

ABM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ASV

r-devel-linux-x86_64-fedora-clang

OK

NOTE

AllelicSeries

r-devel-linux-x86_64-fedora-clang

OK

NOTE

AsianOption

r-devel-linux-x86_64-fedora-clang

OK

NOTE

BCClong

r-devel-linux-x86_64-fedora-clang

OK

NOTE

BEKKs

r-devel-linux-x86_64-fedora-clang

OK

NOTE

BGVAR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

BHMSMAfMRI

r-devel-linux-x86_64-fedora-clang

OK

NOTE

BIFIEsurvey

r-devel-linux-x86_64-fedora-clang

OK

NOTE

BSPBSS

r-devel-linux-x86_64-fedora-clang

OK

NOTE

BoostMLR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

CARBayesST

r-devel-linux-x86_64-fedora-clang

OK

NOTE

COAP

r-devel-linux-x86_64-fedora-clang

OK

NOTE

CamelUp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

CircularDDM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ClusterR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

Cyclops

r-devel-linux-x86_64-fedora-clang

OK

NOTE

DDRTree

r-devel-linux-x86_64-fedora-clang

OK

NOTE

DPP

r-devel-linux-x86_64-fedora-clang

OK

NOTE

DRPT

r-devel-linux-x86_64-fedora-clang

OK

NOTE

DoubleML

r-devel-linux-x86_64-fedora-clang

ERROR

OK

DoubleML

r-devel-linux-x86_64-fedora-gcc

OK

ERROR

Ease

r-devel-linux-x86_64-fedora-clang

OK

NOTE

FDX

r-devel-linux-x86_64-fedora-clang

OK

NOTE

FSelectorRcpp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

FisPro

r-devel-linux-x86_64-fedora-clang

OK

NOTE

GENLIB

r-devel-linux-x86_64-fedora-clang

OK

NOTE

GLMcat

r-devel-linux-x86_64-fedora-clang

OK

NOTE

GRAB

r-devel-linux-x86_64-fedora-clang

OK

NOTE

GiRaF

r-devel-linux-x86_64-fedora-clang

OK

NOTE

HiGarrote

r-devel-linux-x86_64-fedora-clang

OK

NOTE

IFC

r-devel-linux-x86_64-fedora-clang

OK

NOTE

JacobiEigen

r-devel-linux-x86_64-fedora-clang

OK

NOTE

KODAMA

r-devel-linux-x86_64-fedora-clang

OK

NOTE

LambertW

r-devel-linux-x86_64-fedora-clang

OK

NOTE

MCPModPack

r-devel-linux-x86_64-fedora-clang

OK

NOTE

MDgof

r-devel-linux-x86_64-fedora-clang

OK

NOTE

MPCR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

MR.RGM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

MSGARCH

r-devel-linux-x86_64-fedora-clang

OK

NOTE

MSTest

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ManifoldOptim

r-devel-linux-x86_64-fedora-clang

OK

NOTE

MultiCOAP

r-devel-linux-x86_64-fedora-clang

OK

NOTE

NAM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

NPCirc

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ODRF

r-devel-linux-x86_64-fedora-clang

OK

NOTE

PCMBaseCpp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

PPforest

r-devel-linux-x86_64-fedora-clang

OK

NOTE

PPtreeExt

r-devel-linux-x86_64-fedora-clang

OK

NOTE

PPtreeViz

r-devel-linux-x86_64-fedora-clang

OK

NOTE

PSPI

r-devel-linux-x86_64-fedora-clang

OK

NOTE

PartialNetwork

r-devel-linux-x86_64-debian-clang

OK

NOTE

ProbitSpatial

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ProjectTemplate

r-devel-linux-x86_64-debian-clang

NOTE

ERROR

PytrendsLongitudinalR

r-devel-linux-x86_64-debian-clang

OK

ERROR

RAINBOWR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

RCTRecruit

r-devel-linux-x86_64-fedora-clang

OK

NOTE

RMFM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

RMM

r-devel-linux-x86_64-debian-clang

OK

NOTE

Rborist

r-devel-linux-x86_64-fedora-clang

OK

NOTE

RcppBDT

r-devel-linux-x86_64-fedora-clang

OK

NOTE

RcppCNPy

r-devel-linux-x86_64-fedora-clang

OK

NOTE

RcppML

r-devel-linux-x86_64-fedora-clang

OK

NOTE

RcppTskit

r-devel-linux-x86_64-debian-clang

OK

ERROR

Rfast2

r-devel-linux-x86_64-fedora-clang

OK

NOTE

Rgof

r-devel-linux-x86_64-fedora-clang

OK

NOTE

Rmpi

r-devel-linux-x86_64-debian-clang

WARNING

OK

RprobitB

r-devel-linux-x86_64-fedora-clang

OK

NOTE

Rquefts

r-devel-linux-x86_64-fedora-clang

OK

NOTE

Rwofost

r-devel-linux-x86_64-fedora-clang

OK

NOTE

Ryacas

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SBMTrees

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SILGGM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SelfControlledCaseSeries

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SimTOST

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SpaCCI

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SpaCOAP

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SuperpixelImageSegmentation

r-devel-linux-x86_64-fedora-clang

OK

NOTE

SurprisalAnalysis

r-devel-linux-x86_64-debian-clang

ERROR

OK

TreeDimensionTest

r-devel-linux-x86_64-fedora-clang

OK

NOTE

V8

r-devel-linux-x86_64-fedora-clang

OK

NOTE

WARDEN

r-devel-linux-x86_64-fedora-clang

OK

NOTE

WeibullR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

aRtsy

r-devel-linux-x86_64-fedora-clang

OK

NOTE

adelie

r-devel-linux-x86_64-fedora-clang

OK

NOTE

agcounts

r-devel-linux-x86_64-fedora-clang

OK

NOTE

aihuman

r-devel-linux-x86_64-fedora-clang

OK

NOTE

algaeClassify

r-devel-linux-x86_64-debian-clang

OK

ERROR

annotaR

r-devel-linux-x86_64-debian-clang

ERROR

OK

armspp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

aroma.core

r-devel-linux-x86_64-debian-clang

OK

NOTE

arulesSequences

r-devel-linux-x86_64-debian-clang

OK

NOTE

asmbPLS

r-devel-linux-x86_64-fedora-clang

OK

NOTE

atakrig

r-devel-linux-x86_64-fedora-clang

OK

NOTE

autodb

r-devel-linux-x86_64-debian-clang

OK

ERROR

bWGR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

babelmixr2

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bama

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bartcs

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bayMDS

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bespatial

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bgms

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bigPCAcpp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bigPLSR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bigPLScox

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bigsnpr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bigsparser

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bigstatsr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bindrcpp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bnclassify

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bootCT

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bpgmm

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bpvars

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bssm

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bsvarSIGNs

r-devel-linux-x86_64-fedora-clang

OK

NOTE

bundle

r-devel-linux-x86_64-debian-clang

OK

ERROR

bvartools

r-devel-linux-x86_64-fedora-clang

OK

NOTE

carat

r-devel-linux-x86_64-fedora-clang

OK

NOTE

causalOT

r-devel-linux-x86_64-fedora-clang

OK

NOTE

cba

r-devel-linux-x86_64-debian-clang

OK

NOTE

cbbinom

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ccaPP

r-devel-linux-x86_64-fedora-clang

OK

NOTE

cccp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

chicane

r-devel-linux-x86_64-debian-clang

OK

NOTE

circhelp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

circhelp

r-devel-linux-x86_64-fedora-gcc

OK

NOTE

clustur

r-devel-linux-x86_64-fedora-clang

OK

NOTE

cmpp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

coat

r-devel-linux-x86_64-debian-clang

OK

NOTE

conText

r-devel-linux-x86_64-debian-clang

ERROR

OK

contentanalysis

r-devel-linux-x86_64-debian-clang

ERROR

OK

copernicusR

r-devel-linux-x86_64-debian-clang

OK

ERROR

curveDepth

r-devel-linux-x86_64-fedora-clang

OK

NOTE

dbnR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ddalpha

r-devel-linux-x86_64-fedora-clang

OK

NOTE

delimtools

r-devel-linux-x86_64-debian-clang

OK

NOTE

densityratio

r-devel-linux-x86_64-fedora-clang

OK

NOTE

depmixS4

r-devel-linux-x86_64-debian-clang

OK

NOTE

deseats

r-devel-linux-x86_64-fedora-clang

OK

NOTE

dina

r-devel-linux-x86_64-fedora-clang

OK

NOTE

distantia

r-devel-linux-x86_64-fedora-clang

OK

NOTE

diversitree

r-devel-linux-x86_64-fedora-clang

OK

NOTE

eFCM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

edlibR

r-devel-linux-x86_64-debian-clang

OK

NOTE

elmNNRcpp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

energymethod

r-devel-linux-x86_64-fedora-clang

OK

NOTE

enrichR

r-devel-linux-x86_64-debian-clang

OK

ERROR

eph

r-devel-linux-x86_64-debian-clang

ERROR

OK

ernm

r-devel-linux-x86_64-fedora-clang

OK

NOTE

exactextractr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

fPortfolio

r-devel-linux-x86_64-debian-clang

OK

NOTE

fable

r-devel-linux-x86_64-fedora-clang

OK

NOTE

fastcpd

r-devel-linux-x86_64-fedora-clang

OK

NOTE

fasterize

r-devel-linux-x86_64-fedora-clang

OK

NOTE

fasttreeid

r-devel-linux-x86_64-fedora-clang

OK

NOTE

fdacluster

r-devel-linux-x86_64-fedora-clang

OK

NOTE

fiberLD

r-devel-linux-x86_64-fedora-clang

OK

NOTE

filearray

r-devel-linux-x86_64-debian-clang

OK

NOTE

fioRa

r-devel-linux-x86_64-debian-clang

OK

ERROR

flan

r-devel-linux-x86_64-fedora-clang

OK

NOTE

flint

r-devel-linux-x86_64-debian-clang

OK

NOTE

fmeffects

r-devel-linux-x86_64-fedora-gcc

OK

ERROR

fmesher

r-devel-linux-x86_64-fedora-clang

OK

NOTE

fst

r-devel-linux-x86_64-fedora-clang

OK

NOTE

funMoDisco

r-devel-linux-x86_64-fedora-clang

OK

NOTE

gRain

r-devel-linux-x86_64-fedora-clang

OK

NOTE

gRim

r-devel-linux-x86_64-fedora-clang

OK

NOTE

gamstransfer

r-devel-linux-x86_64-fedora-clang

OK

NOTE

gdalcubes

r-devel-linux-x86_64-fedora-clang

OK

NOTE

gdalraster

r-devel-linux-x86_64-fedora-clang

OK

NOTE

genepop

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ggrepel

r-devel-linux-x86_64-fedora-clang

OK

NOTE

glmSTARMA

r-devel-linux-x86_64-fedora-clang

OK

NOTE

glmnet

r-devel-linux-x86_64-fedora-clang

OK

NOTE

greenSD

r-devel-linux-x86_64-fedora-gcc

OK

ERROR

gridtext

r-devel-linux-x86_64-fedora-clang

OK

NOTE

harmony

r-devel-linux-x86_64-fedora-clang

OK

NOTE

hesim

r-devel-linux-x86_64-fedora-clang

OK

NOTE

hipread

r-devel-linux-x86_64-fedora-clang

OK

NOTE

hpa

r-devel-linux-x86_64-fedora-clang

OK

NOTE

httpuv

r-devel-linux-x86_64-fedora-clang

OK

NOTE

iClusterVB

r-devel-linux-x86_64-fedora-clang

OK

NOTE

immer

r-devel-linux-x86_64-fedora-clang

OK

NOTE

irt

r-devel-linux-x86_64-fedora-clang

OK

NOTE

iterors

r-devel-linux-x86_64-debian-clang

OK

ERROR

jackalope

r-devel-linux-x86_64-fedora-clang

OK

NOTE

keyATM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

kvh

r-devel-linux-x86_64-fedora-clang

OK

NOTE

kvkapiR

r-devel-linux-x86_64-debian-clang

OK

ERROR

ldt

r-devel-linux-x86_64-fedora-clang

OK

NOTE

lefko3

r-devel-linux-x86_64-fedora-clang

OK

NOTE

lessSEM

r-devel-linux-x86_64-fedora-clang

OK

NOTE

lme4

r-devel-linux-x86_64-fedora-clang

OK

NOTE

lolog

r-devel-linux-x86_64-fedora-clang

OK

NOTE

malariaAtlas

r-devel-linux-x86_64-debian-clang

OK

ERROR

markets

r-devel-linux-x86_64-fedora-clang

OK

NOTE

matrixCorr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mdmb

r-devel-linux-x86_64-fedora-clang

OK

NOTE

medfate

r-devel-linux-x86_64-fedora-clang

OK

NOTE

medfateland

r-devel-linux-x86_64-fedora-clang

OK

NOTE

melt

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mets

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mgwrsar

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mi

r-devel-linux-x86_64-debian-clang

ERROR

OK

mice

r-devel-linux-x86_64-fedora-clang

OK

NOTE

minerva

r-devel-linux-x86_64-fedora-clang

OK

NOTE

minqa

r-devel-linux-x86_64-fedora-clang

OK

NOTE

missDeaths

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mixvlmc

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mmapcharr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mnorm

r-devel-linux-x86_64-fedora-clang

OK

NOTE

modeLLtest

r-devel-linux-x86_64-fedora-clang

OK

NOTE

modeltime

r-devel-linux-x86_64-fedora-clang

NOTE

OK

motif

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mrgsolve

r-devel-linux-x86_64-fedora-clang

OK

NOTE

mulea

r-devel-linux-x86_64-fedora-clang

OK

NOTE

multbxxc

r-devel-linux-x86_64-fedora-clang

OK

NOTE

multiDEGGs

r-devel-linux-x86_64-debian-clang

ERROR

OK

multinet

r-devel-linux-x86_64-fedora-clang

OK

NOTE

nabor

r-devel-linux-x86_64-fedora-clang

OK

NOTE

netClust

r-devel-linux-x86_64-fedora-clang

OK

NOTE

neuralGAM

r-devel-linux-x86_64-debian-clang

OK

ERROR

nlmeVPC

r-devel-linux-x86_64-fedora-clang

OK

NOTE

nlmixr2est

r-devel-linux-x86_64-fedora-clang

OK

NOTE

nonprobsvy

r-devel-linux-x86_64-fedora-clang

OK

NOTE

npRmpi

r-devel-linux-x86_64-debian-clang

WARNING

OK

odbc

r-devel-linux-x86_64-fedora-clang

OK

NOTE

openairmaps

r-devel-linux-x86_64-fedora-clang

WARNING

OK

openxlsx

r-devel-linux-x86_64-fedora-clang

OK

NOTE

openxlsx2

r-devel-linux-x86_64-fedora-clang

OK

NOTE

orthoDr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

osmdata

r-devel-linux-x86_64-fedora-clang

OK

NOTE

pacotest

r-devel-linux-x86_64-fedora-clang

OK

NOTE

pangoling

r-devel-linux-x86_64-debian-clang

OK

ERROR

parallelpam

r-devel-linux-x86_64-fedora-clang

OK

NOTE

parsermd

r-devel-linux-x86_64-fedora-clang

OK

NOTE

partition

r-devel-linux-x86_64-fedora-clang

OK

NOTE

pcadapt

r-devel-linux-x86_64-fedora-clang

OK

NOTE

pdftools

r-devel-linux-x86_64-fedora-clang

OK

NOTE

penalized

r-devel-linux-x86_64-fedora-clang

OK

NOTE

phyr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

polywog

r-devel-linux-x86_64-fedora-clang

OK

NOTE

pomdp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

profoc

r-devel-linux-x86_64-fedora-clang

OK

NOTE

promor

r-devel-linux-x86_64-fedora-gcc

OK

ERROR

protolite

r-devel-linux-x86_64-fedora-clang

OK

NOTE

provDebugR

r-devel-linux-x86_64-debian-clang

OK

NOTE

provSummarizeR

r-devel-linux-x86_64-debian-clang

OK

NOTE

provTraceR

r-devel-linux-x86_64-debian-clang

OK

NOTE

provViz

r-devel-linux-x86_64-debian-clang

OK

NOTE

proxy

r-devel-linux-x86_64-debian-clang

OK

NOTE

prt

r-devel-linux-x86_64-debian-clang

OK

ERROR

psp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

psychonetrics

r-devel-linux-x86_64-fedora-clang

OK

NOTE

purgeR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

purrrlyr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

qpdf

r-devel-linux-x86_64-fedora-clang

OK

NOTE

r2sundials

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rTRNG

r-devel-linux-x86_64-fedora-clang

OK

NOTE

raster

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ravetools

r-devel-linux-x86_64-debian-clang

OK

NOTE

rayrender

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rayvertex

r-devel-linux-x86_64-fedora-clang

OK

NOTE

redist

r-devel-linux-x86_64-fedora-clang

OK

NOTE

relSim

r-devel-linux-x86_64-fedora-clang

OK

NOTE

renv

r-devel-linux-x86_64-debian-clang

OK

NOTE

reservr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rivnet

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rkriging

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rmumps

r-devel-linux-x86_64-fedora-clang

OK

NOTE

robcat

r-devel-linux-x86_64-fedora-clang

OK

NOTE

robustHD

r-devel-linux-x86_64-fedora-clang

OK

NOTE

robustlmm

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rofanova

r-devel-linux-x86_64-fedora-clang

OK

NOTE

roxigraph

r-devel-linux-x86_64-fedora-clang

ERROR

NOTE

rpanel

r-devel-linux-x86_64-debian-clang

ERROR

OK

rrum

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rsides

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rtestim

r-devel-linux-x86_64-fedora-clang

OK

NOTE

rtpcr

r-devel-linux-x86_64-debian-clang

ERROR

OK

rxode2

r-devel-linux-x86_64-fedora-clang

OK

NOTE

s2

r-devel-linux-x86_64-fedora-clang

OK

NOTE

saeMSPE

r-devel-linux-x86_64-fedora-clang

OK

NOTE

scINSIGHT

r-devel-linux-x86_64-fedora-clang

OK

NOTE

scellpam

r-devel-linux-x86_64-fedora-clang

OK

NOTE

scorematchingad

r-devel-linux-x86_64-fedora-clang

OK

NOTE

sdsfun

r-devel-linux-x86_64-fedora-clang

OK

NOTE

shrinkTVP

r-devel-linux-x86_64-fedora-clang

OK

NOTE

simmer

r-devel-linux-x86_64-fedora-clang

OK

NOTE

simmr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

simstudy

r-devel-linux-x86_64-fedora-clang

OK

NOTE

simts

r-devel-linux-x86_64-fedora-clang

OK

NOTE

sirt

r-devel-linux-x86_64-fedora-clang

OK

NOTE

skpr

r-devel-linux-x86_64-fedora-clang

OK

NOTE

smmR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

smoothemplik

r-devel-linux-x86_64-fedora-clang

OK

NOTE

softclassval

r-devel-linux-x86_64-debian-clang

OK

NOTE

sonicscrewdriver

r-devel-linux-x86_64-debian-clang

ERROR

NOTE

sorcering

r-devel-linux-x86_64-fedora-clang

OK

NOTE

spBPS

r-devel-linux-x86_64-fedora-clang

OK

NOTE

spCP

r-devel-linux-x86_64-fedora-clang

OK

NOTE

ssaBSS

r-devel-linux-x86_64-debian-clang

WARNING

NOTE

stosim

r-devel-linux-x86_64-fedora-clang

OK

NOTE

stpphawkes

r-devel-linux-x86_64-fedora-clang

OK

NOTE

stream

r-devel-linux-x86_64-fedora-clang

OK

NOTE

strucchangeRcpp

r-devel-linux-x86_64-fedora-clang

OK

NOTE

surveyvoi

r-devel-linux-x86_64-fedora-clang

OK

NOTE

svars

r-devel-linux-x86_64-fedora-clang

OK

NOTE

swaglm

r-devel-linux-x86_64-fedora-clang

OK

NOTE

switchSelection

r-devel-linux-x86_64-fedora-clang

OK

NOTE

symengine

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tensorBSS

r-devel-linux-x86_64-debian-clang

ERROR

OK

terra

r-devel-linux-x86_64-fedora-clang

OK

NOTE

textTinyR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tfevents

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tidynorm

r-devel-linux-x86_64-debian-clang

OK

ERROR

tidypopgen

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tidyxl

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tiledb

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tm.plugin.mail

r-devel-linux-x86_64-debian-clang

OK

ERROR

tma

r-devel-linux-x86_64-fedora-clang

OK

NOTE

trajeR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

trunmnt

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tsBSS

r-devel-linux-x86_64-debian-clang

WARNING

NOTE

tsdistributions

r-devel-linux-x86_64-fedora-clang

OK

NOTE

tsmarch

r-devel-linux-x86_64-fedora-clang

OK

NOTE

vglmer

r-devel-linux-x86_64-fedora-clang

OK

NOTE

vntrs

r-devel-linux-x86_64-fedora-clang

OK

NOTE

vol2birdR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

watson

r-devel-linux-x86_64-fedora-clang

OK

NOTE

wikiTools

r-devel-linux-x86_64-debian-clang

OK

ERROR

womblR

r-devel-linux-x86_64-fedora-clang

OK

NOTE

wv

r-devel-linux-x86_64-fedora-clang

OK

NOTE

yuima

r-devel-linux-x86_64-fedora-clang

OK

NOTE

zebu

r-devel-linux-x86_64-fedora-clang

OK

NOTE

If the machine and R versions is the same but the check of the package is different there might be some discrepancy between the dependencies.

# Extract dependencies
dependencies <- package_dependencies(unique(possible_packages$Package),
                                     # Should it check all the recursive dependencies or only direct?
                                     db = ap, # Only considering those dependencies on CRAN and Bioconductor but not any Additional_repositories. 
                                     recursive = TRUE, 
                                     which = c("Depends", "Imports", "LinkingTo", "Suggests"))

# Prepare to compare versions (as they are sorted by everything else we can compare directly)
intermittent_failures <- rep(FALSE, length(dependencies))
names(intermittent_failures) <- names(dependencies)
dep_0 <- lengths(dependencies) == 0
intermittent_failures[dep_0] <- TRUE

If they do not have any recursive dependency on Depends, Imports, LinkingTo and Suggests they might be have some intermittent problems on the packages. These is only on dependencies on CRAN and Bioconductor but not in other additional repositories (There are 195 packages with additional repositories).

If they have some dependencies and those dependencies didn’t change as far as we can tell then there might be some problems with random numbers or connectivity.

for (pkg in names(intermittent_failures[!intermittent_failures])) {
  dep <- dependencies[[pkg]]
  fl <- possible_packages$Flavor[possible_packages$Package == pkg]
  intermittent_failures[pkg] <- all_checks |> 
    filter(Package %in% dep,
           Flavor %in% fl,
           Version.t == Version.y,
           Status.t != Status.y) |> 
    nrow() == 0 # If packages outside || any(!dep %in% rownames(ap)) 
}
packages <- names(intermittent_failures)[intermittent_failures]

We finally show the differences on the status of those without any dependency change on version or status1:

keep_files <- filter(possible_packages, Package %in% packages) |> 
  merge(y = flavors_df, by.x = "Flavor", by.y = "flavors", all.x = TRUE, all.y = FALSE) |> 
  select(Package, Flavor, Version = Version.t, R_version = r_version, OS = os, 
         architecture, other, version, revision) |> 
  mutate(Date = Sys.time())

if (nrow(keep_files >= 1)) {
  write.csv(keep_files, 
            paste0("cran-failing-", format(Sys.time(), "%Y%m%dT%H%M"), ".csv"),
            row.names = FALSE,
            quote = FALSE,
  )
}
filter(possible_packages, Package %in% packages) |> 
  select(Package, Flavor, Today, Yesterday, -Version.t, -Version.y) |> 
  flextable() |> 
  autofit()

Package

Flavor

Today

Yesterday

flint

r-devel-linux-x86_64-debian-clang

OK

NOTE

Rmpi

r-devel-linux-x86_64-debian-clang

WARNING

OK

Conclusion

cat("There are no packages detected with differences between yesterday and today attributable to intermittent failures.\n")
knitr::knit_exit()
cat("This suggests that these packages might have some problems with random numbers or connectivity:\n\n") 

This suggests that these packages might have some problems with random numbers or connectivity:

if (any(dep_0)) {
  cat("\n## Packages with dependencies\n\n")
  cat(paste0(" - ", sort(intersect(packages, 
                                   names(dependencies)[dep_0])), "\n"), sep = "")
  cat("\n## Packages without dependencies\n\n")
  cat(paste0(" - ", sort(intersect(packages,
                                   names(dependencies)[!dep_0])), "\n"), sep = "")
  
} else {
  cat(paste0(" - ", sort(packages), "\n"), sep = "")
}
  • flint
  • Rmpi

  1. I think a new version might not propagate to check other packages until 24 hours later as checks might have already started for that day.↩︎