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

r88809

r-devel-linux-x86_64-debian-gcc

devel

linux

x86_64

debian-gcc

r88822

r-devel-linux-x86_64-fedora-clang

devel

linux

x86_64

fedora-clang

r88810

r-devel-linux-x86_64-fedora-gcc

devel

linux

x86_64

fedora-gcc

r88810

r-patched-linux-x86_64

patched

linux

x86_64

4.5.1

r88798

r-release-linux-x86_64

release

linux

x86_64

4.5.1

r-release-macos-arm64

release

macos

arm64

4.5.0

r-release-macos-x86_64

release

macos

x86_64

4.5.1

r-release-windows-x86_64

release

windows

x86_64

4.5.1

r-oldrel-macos-arm64

oldrel

macos

arm64

4.4.1

r-oldrel-macos-x86_64

oldrel

macos

x86_64

4.4.1

r-oldrel-windows-x86_64

oldrel

windows

x86_64

4.4.3

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 38 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 200 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 413 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 247.95 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,447

2

252

3

2

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

13

22,594

10

39

12

31

11

14

3

12

9

7

8

3

7

1

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

13

0

0

0

0

11,860

11

2

0

0

0

4,544

0

13

0

0

0

1,748

10

3

0

0

0

1,398

8

5

0

0

0

833

3

10

0

0

0

452

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 0.43%, 0.41%, 0.06%, 0.05%, 0.01% 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

ANN2

r-oldrel-windows-x86_64

ERROR

NOTE

ANN2

r-release-linux-x86_64

ERROR

NOTE

AnalysisLin

r-oldrel-windows-x86_64

ERROR

OK

AnalysisLin

r-release-linux-x86_64

ERROR

OK

BEAMR

r-release-linux-x86_64

ERROR

OK

BayesMultiMode

r-oldrel-windows-x86_64

WARNING

NOTE

BayesMultiMode

r-release-linux-x86_64

WARNING

OK

BiVariAn

r-oldrel-windows-x86_64

ERROR

OK

BiVariAn

r-release-linux-x86_64

ERROR

OK

BrazilDataAPI

r-oldrel-windows-x86_64

ERROR

OK

CFtime

r-devel-linux-x86_64-fedora-gcc

ERROR

OK

CGPfunctions

r-release-linux-x86_64

ERROR

OK

CausalImpact

r-oldrel-windows-x86_64

ERROR

OK

CausalImpact

r-release-linux-x86_64

ERROR

OK

DAISIEprep

r-oldrel-windows-x86_64

ERROR

OK

DAISIEprep

r-release-linux-x86_64

ERROR

OK

Deducer

r-oldrel-windows-x86_64

WARNING

OK

Deducer

r-release-linux-x86_64

WARNING

OK

DiSCos

r-oldrel-windows-x86_64

ERROR

OK

DiSCos

r-release-linux-x86_64

ERROR

OK

EGM

r-oldrel-windows-x86_64

ERROR

OK

EGM

r-release-linux-x86_64

ERROR

NOTE

ElevDistr

r-oldrel-windows-x86_64

ERROR

OK

ElevDistr

r-release-linux-x86_64

ERROR

OK

ForIT

r-release-linux-x86_64

WARNING

OK

IRon

r-oldrel-windows-x86_64

ERROR

OK

IRon

r-release-linux-x86_64

ERROR

OK

ImHD

r-oldrel-windows-x86_64

WARNING

OK

ImHD

r-release-linux-x86_64

WARNING

OK

KOFM

r-oldrel-windows-x86_64

ERROR

OK

LMD

r-oldrel-windows-x86_64

ERROR

OK

LMD

r-release-linux-x86_64

ERROR

OK

MiMIR

r-oldrel-windows-x86_64

ERROR

OK

MiMIR

r-release-linux-x86_64

ERROR

OK

MiscMetabar

r-oldrel-windows-x86_64

ERROR

OK

MiscMetabar

r-release-linux-x86_64

ERROR

OK

Momocs

r-oldrel-windows-x86_64

ERROR

OK

Momocs

r-release-linux-x86_64

ERROR

NOTE

MultiTraits

r-oldrel-windows-x86_64

ERROR

OK

MultiTraits

r-release-linux-x86_64

ERROR

OK

NHSRplotthedots

r-oldrel-windows-x86_64

ERROR

OK

NHSRplotthedots

r-release-linux-x86_64

ERROR

OK

OmicFlow

r-oldrel-windows-x86_64

ERROR

OK

OpenMx

r-release-linux-x86_64

NOTE

OK

PopPsiSeqR

r-oldrel-windows-x86_64

ERROR

OK

PopPsiSeqR

r-release-linux-x86_64

ERROR

OK

PredPsych

r-oldrel-windows-x86_64

WARNING

OK

PredPsych

r-release-linux-x86_64

WARNING

OK

RPANDA

r-release-linux-x86_64

WARNING

OK

RSDA

r-oldrel-windows-x86_64

WARNING

NOTE

RSDA

r-release-linux-x86_64

WARNING

OK

RTIGER

r-oldrel-windows-x86_64

WARNING

OK

RTIGER

r-release-linux-x86_64

WARNING

OK

RVA

r-oldrel-windows-x86_64

ERROR

OK

RVA

r-release-linux-x86_64

ERROR

OK

RamanMP

r-oldrel-windows-x86_64

ERROR

OK

RamanMP

r-release-linux-x86_64

ERROR

OK

Rwtss

r-oldrel-windows-x86_64

ERROR

NOTE

Rwtss

r-release-linux-x86_64

ERROR

NOTE

SimSurvey

r-release-linux-x86_64

WARNING

OK

StreamCatTools

r-release-linux-x86_64

ERROR

OK

TaxaNorm

r-oldrel-windows-x86_64

ERROR

OK

TestGardener

r-oldrel-windows-x86_64

ERROR

OK

TestGardener

r-release-linux-x86_64

ERROR

OK

TransProR

r-oldrel-windows-x86_64

ERROR

OK

UnalR

r-oldrel-windows-x86_64

ERROR

NOTE

UnalR

r-release-linux-x86_64

ERROR

OK

VarSelLCM

r-oldrel-windows-x86_64

ERROR

OK

VarSelLCM

r-release-linux-x86_64

ERROR

OK

WVPlots

r-oldrel-windows-x86_64

ERROR

OK

WeightIt

r-release-linux-x86_64

ERROR

OK

WhatsR

r-release-linux-x86_64

NOTE

OK

XDNUTS

r-oldrel-windows-x86_64

ERROR

OK

ZetaSuite

r-oldrel-windows-x86_64

WARNING

OK

ZetaSuite

r-release-linux-x86_64

WARNING

OK

adklakedata

r-oldrel-windows-x86_64

ERROR

NOTE

adklakedata

r-release-linux-x86_64

ERROR

NOTE

adw

r-oldrel-windows-x86_64

ERROR

OK

adw

r-release-linux-x86_64

ERROR

OK

alookr

r-oldrel-windows-x86_64

ERROR

OK

alookr

r-release-linux-x86_64

ERROR

OK

andurinha

r-oldrel-windows-x86_64

ERROR

OK

andurinha

r-release-linux-x86_64

ERROR

OK

antitrust

r-oldrel-windows-x86_64

ERROR

OK

antitrust

r-release-linux-x86_64

ERROR

OK

applicable

r-oldrel-windows-x86_64

ERROR

OK

applicable

r-release-linux-x86_64

ERROR

OK

arena2r

r-oldrel-windows-x86_64

ERROR

OK

arena2r

r-release-linux-x86_64

ERROR

OK

askpass

r-oldrel-windows-x86_64

ERROR

OK

assignPOP

r-oldrel-windows-x86_64

ERROR

OK

autoplotly

r-oldrel-windows-x86_64

ERROR

OK

autoplotly

r-release-linux-x86_64

ERROR

OK

bartMan

r-oldrel-windows-x86_64

ERROR

OK

bartMan

r-release-linux-x86_64

ERROR

OK

bayesAB

r-oldrel-windows-x86_64

ERROR

NOTE

bayesAB

r-release-linux-x86_64

ERROR

NOTE

bayesassurance

r-oldrel-windows-x86_64

ERROR

OK

bayesassurance

r-release-linux-x86_64

ERROR

NOTE

bdsm

r-oldrel-windows-x86_64

ERROR

OK

bdsm

r-release-linux-x86_64

ERROR

OK

benchr

r-oldrel-windows-x86_64

ERROR

NOTE

benchr

r-release-linux-x86_64

ERROR

NOTE

bregr

r-oldrel-windows-x86_64

ERROR

OK

bregr

r-release-linux-x86_64

ERROR

OK

bullseye

r-oldrel-windows-x86_64

ERROR

OK

bullseye

r-release-linux-x86_64

ERROR

OK

cartographr

r-oldrel-windows-x86_64

ERROR

OK

chcd

r-oldrel-windows-x86_64

ERROR

OK

cheem

r-oldrel-windows-x86_64

ERROR

OK

cheem

r-release-linux-x86_64

ERROR

OK

clifro

r-oldrel-windows-x86_64

ERROR

NOTE

clifro

r-release-linux-x86_64

ERROR

NOTE

clockSim

r-oldrel-windows-x86_64

WARNING

OK

clockSim

r-release-linux-x86_64

WARNING

OK

clockplot

r-oldrel-windows-x86_64

ERROR

OK

cmcR

r-oldrel-windows-x86_64

ERROR

OK

cmcR

r-release-linux-x86_64

ERROR

OK

cnmap

r-oldrel-windows-x86_64

ERROR

OK

cobalt

r-release-linux-x86_64

NOTE

OK

cocktailApp

r-oldrel-windows-x86_64

ERROR

OK

cocktailApp

r-release-linux-x86_64

ERROR

OK

coda.plot

r-oldrel-windows-x86_64

ERROR

OK

coda.plot

r-release-linux-x86_64

ERROR

OK

coursekata

r-oldrel-windows-x86_64

ERROR

OK

coursekata

r-release-linux-x86_64

ERROR

OK

cowsay

r-release-linux-x86_64

OK

ERROR

ctrdata

r-oldrel-windows-x86_64

ERROR

OK

cylcop

r-oldrel-windows-x86_64

ERROR

NOTE

cylcop

r-release-linux-x86_64

ERROR

NOTE

dabestr

r-oldrel-windows-x86_64

ERROR

OK

dabestr

r-release-linux-x86_64

ERROR

OK

dams

r-oldrel-windows-x86_64

ERROR

OK

dams

r-release-linux-x86_64

ERROR

OK

dbacf

r-oldrel-windows-x86_64

OK

FAILURE

delimtools

r-oldrel-windows-x86_64

ERROR

NOTE

delimtools

r-release-linux-x86_64

ERROR

OK

devRate

r-oldrel-windows-x86_64

OK

ERROR

dipm

r-release-linux-x86_64

NOTE

OK

distributions3

r-oldrel-windows-x86_64

ERROR

OK

diveR

r-release-linux-x86_64

ERROR

OK

dsb

r-oldrel-windows-x86_64

ERROR

OK

dsb

r-release-linux-x86_64

ERROR

OK

duckspatial

r-oldrel-windows-x86_64

ERROR

OK

duke

r-oldrel-windows-x86_64

ERROR

OK

duke

r-release-linux-x86_64

ERROR

NOTE

dynConfiR

r-oldrel-windows-x86_64

ERROR

OK

dynConfiR

r-release-linux-x86_64

ERROR

OK

eaf

r-release-linux-x86_64

NOTE

OK

easybio

r-oldrel-windows-x86_64

ERROR

OK

easybio

r-release-linux-x86_64

ERROR

OK

easysurv

r-devel-linux-x86_64-fedora-gcc

OK

ERROR

easysurv

r-oldrel-windows-x86_64

ERROR

OK

easysurv

r-release-linux-x86_64

ERROR

OK

econullnetr

r-release-linux-x86_64

ERROR

OK

educationdata

r-oldrel-windows-x86_64

OK

ERROR

ez

r-oldrel-windows-x86_64

ERROR

NOTE

ez

r-release-linux-x86_64

ERROR

NOTE

fairmodels

r-oldrel-windows-x86_64

ERROR

NOTE

fairmodels

r-release-linux-x86_64

ERROR

NOTE

fairness

r-oldrel-windows-x86_64

WARNING

OK

fairness

r-release-linux-x86_64

WARNING

OK

fastR2

r-oldrel-windows-x86_64

ERROR

OK

fastR2

r-release-linux-x86_64

ERROR

OK

faux

r-oldrel-windows-x86_64

ERROR

OK

faux

r-release-linux-x86_64

ERROR

OK

ffaframework

r-oldrel-windows-x86_64

ERROR

NOTE

flowcluster

r-oldrel-windows-x86_64

OK

ERROR

fmf

r-oldrel-windows-x86_64

WARNING

NOTE

fmf

r-release-linux-x86_64

WARNING

NOTE

forestPSD

r-oldrel-windows-x86_64

ERROR

OK

forestPSD

r-release-linux-x86_64

ERROR

OK

gapfill

r-oldrel-windows-x86_64

ERROR

NOTE

gapfill

r-release-linux-x86_64

ERROR

NOTE

gchartsmap

r-release-linux-x86_64

ERROR

OK

geneSLOPE

r-oldrel-windows-x86_64

WARNING

OK

geneSLOPE

r-release-linux-x86_64

WARNING

OK

geno2proteo

r-oldrel-windows-x86_64

ERROR

OK

gfoRmulaICE

r-oldrel-windows-x86_64

ERROR

OK

gfoRmulaICE

r-release-linux-x86_64

ERROR

OK

gg1d

r-oldrel-windows-x86_64

ERROR

OK

gg1d

r-release-linux-x86_64

ERROR

OK

ggDoubleHeat

r-oldrel-windows-x86_64

ERROR

OK

ggEDA

r-oldrel-windows-x86_64

ERROR

OK

ggRtsy

r-oldrel-windows-x86_64

ERROR

OK

ggRtsy

r-release-linux-x86_64

ERROR

OK

ggblend

r-oldrel-windows-x86_64

ERROR

OK

ggblend

r-release-linux-x86_64

ERROR

NOTE

ggbump

r-oldrel-windows-x86_64

ERROR

NOTE

ggbump

r-release-linux-x86_64

ERROR

OK

ggdark

r-oldrel-windows-x86_64

ERROR

NOTE

ggdark

r-release-linux-x86_64

ERROR

OK

ggfixest

r-release-linux-x86_64

ERROR

OK

ggformula

r-oldrel-windows-x86_64

ERROR

OK

ggformula

r-release-linux-x86_64

ERROR

OK

gggenomes

r-oldrel-windows-x86_64

ERROR

OK

gggenomes

r-release-linux-x86_64

ERROR

NOTE

gghalves

r-oldrel-windows-x86_64

ERROR

OK

gghalves

r-release-linux-x86_64

ERROR

OK

ggiraph

r-oldrel-windows-x86_64

ERROR

OK

ggiraph

r-release-linux-x86_64

ERROR

OK

ggiraphExtra

r-oldrel-windows-x86_64

ERROR

OK

ggiraphExtra

r-release-linux-x86_64

ERROR

OK

ggmcmc

r-oldrel-windows-x86_64

ERROR

OK

ggmcmc

r-release-linux-x86_64

ERROR

OK

ggmosaic

r-oldrel-windows-x86_64

ERROR

NOTE

ggmosaic

r-release-linux-x86_64

ERROR

NOTE

ggmulti

r-oldrel-windows-x86_64

ERROR

OK

ggmulti

r-release-linux-x86_64

ERROR

NOTE

ggparallel

r-oldrel-windows-x86_64

ERROR

OK

ggparallel

r-release-linux-x86_64

ERROR

OK

ggpath

r-oldrel-windows-x86_64

ERROR

OK

ggpath

r-release-linux-x86_64

ERROR

OK

ggpointdensity

r-oldrel-windows-x86_64

ERROR

OK

ggpointdensity

r-release-linux-x86_64

ERROR

OK

ggpol

r-oldrel-windows-x86_64

ERROR

NOTE

ggpol

r-release-linux-x86_64

ERROR

OK

ggredist

r-oldrel-windows-x86_64

ERROR

OK

ggredist

r-release-linux-x86_64

ERROR

OK

ggseqplot

r-release-linux-x86_64

ERROR

OK

ggside

r-oldrel-windows-x86_64

ERROR

OK

ggside

r-release-linux-x86_64

ERROR

OK

ggstream

r-oldrel-windows-x86_64

ERROR

OK

ggstream

r-release-linux-x86_64

ERROR

OK

ggsurvfit

r-oldrel-windows-x86_64

ERROR

OK

ggsurvfit

r-release-linux-x86_64

ERROR

OK

ggtern

r-oldrel-windows-x86_64

ERROR

OK

ggtern

r-release-linux-x86_64

ERROR

NOTE

ggtikz

r-oldrel-windows-x86_64

ERROR

OK

gpmap

r-release-linux-x86_64

NOTE

OK

gppm

r-oldrel-windows-x86_64

ERROR

NOTE

gppm

r-release-linux-x86_64

ERROR

NOTE

graphPAF

r-oldrel-windows-x86_64

ERROR

OK

graphPAF

r-release-linux-x86_64

ERROR

OK

grwat

r-oldrel-windows-x86_64

ERROR

OK

grwat

r-release-linux-x86_64

ERROR

OK

gsaot

r-oldrel-windows-x86_64

ERROR

OK

gsaot

r-release-linux-x86_64

ERROR

OK

gtExtras

r-oldrel-windows-x86_64

ERROR

OK

gtExtras

r-release-linux-x86_64

ERROR

OK

gwavr

r-oldrel-windows-x86_64

OK

ERROR

harmony

r-oldrel-windows-x86_64

ERROR

NOTE

harmony

r-release-linux-x86_64

ERROR

OK

hesim

r-oldrel-windows-x86_64

ERROR

NOTE

hesim

r-release-linux-x86_64

ERROR

OK

hmde

r-oldrel-windows-x86_64

ERROR

NOTE

hmde

r-release-linux-x86_64

ERROR

OK

horseshoe

r-oldrel-windows-x86_64

ERROR

OK

horseshoe

r-release-linux-x86_64

ERROR

OK

hyperoverlap

r-oldrel-windows-x86_64

WARNING

NOTE

hyperoverlap

r-release-linux-x86_64

WARNING

OK

hypsoLoop

r-oldrel-windows-x86_64

WARNING

OK

hypsoLoop

r-release-linux-x86_64

WARNING

NOTE

important

r-oldrel-windows-x86_64

ERROR

OK

important

r-release-linux-x86_64

ERROR

OK

inTextSummaryTable

r-release-linux-x86_64

ERROR

OK

insight

r-oldrel-windows-x86_64

OK

ERROR

isoorbi

r-oldrel-windows-x86_64

ERROR

NOTE

isoorbi

r-release-linux-x86_64

ERROR

OK

jointVIP

r-release-linux-x86_64

ERROR

OK

klassR

r-release-linux-x86_64

OK

ERROR

kvkapiR

r-release-linux-x86_64

OK

ERROR

legendry

r-oldrel-windows-x86_64

WARNING

OK

legendry

r-release-linux-x86_64

WARNING

OK

lgpr

r-oldrel-windows-x86_64

ERROR

NOTE

lgpr

r-release-linux-x86_64

ERROR

NOTE

listdown

r-oldrel-windows-x86_64

ERROR

NOTE

listdown

r-release-linux-x86_64

ERROR

NOTE

loon.ggplot

r-oldrel-windows-x86_64

ERROR

OK

loon.ggplot

r-release-linux-x86_64

ERROR

NOTE

loon.shiny

r-release-linux-x86_64

ERROR

NOTE

loon.tourr

r-release-linux-x86_64

ERROR

NOTE

lulab.utils

r-release-linux-x86_64

ERROR

OK

miRetrieve

r-oldrel-windows-x86_64

ERROR

OK

miRetrieve

r-release-linux-x86_64

ERROR

OK

minimaxALT

r-release-linux-x86_64

OK

ERROR

mixKernel

r-oldrel-windows-x86_64

ERROR

OK

model4you

r-release-linux-x86_64

NOTE

OK

mooplot

r-release-linux-x86_64

NOTE

OK

mosaic

r-oldrel-windows-x86_64

ERROR

OK

mosaic

r-release-linux-x86_64

ERROR

OK

mpactr

r-oldrel-windows-x86_64

ERROR

NOTE

mshap

r-oldrel-windows-x86_64

ERROR

OK

mshap

r-release-linux-x86_64

ERROR

OK

mycolorsTB

r-oldrel-windows-x86_64

ERROR

OK

normfluodbf

r-oldrel-windows-x86_64

ERROR

OK

normfluodbf

r-release-linux-x86_64

ERROR

OK

nzelect

r-oldrel-windows-x86_64

ERROR

OK

nzelect

r-release-linux-x86_64

ERROR

OK

o2plsda

r-oldrel-windows-x86_64

ERROR

OK

o2plsda

r-release-linux-x86_64

ERROR

OK

ofpetrial

r-oldrel-windows-x86_64

ERROR

OK

ofpetrial

r-release-linux-x86_64

ERROR

NOTE

onewaytests

r-oldrel-windows-x86_64

OK

FAILURE

otargen

r-oldrel-windows-x86_64

OK

ERROR

pcr

r-oldrel-windows-x86_64

ERROR

OK

pcr

r-release-linux-x86_64

ERROR

OK

phylepic

r-oldrel-windows-x86_64

WARNING

OK

planningML

r-devel-linux-x86_64-fedora-gcc

ERROR

OK

plantTracker

r-oldrel-windows-x86_64

ERROR

OK

plantTracker

r-release-linux-x86_64

ERROR

OK

plotDK

r-oldrel-windows-x86_64

ERROR

OK

plotDK

r-release-linux-x86_64

ERROR

OK

pollster

r-oldrel-windows-x86_64

ERROR

OK

pollster

r-release-linux-x86_64

ERROR

OK

precintcon

r-oldrel-windows-x86_64

ERROR

OK

precintcon

r-release-linux-x86_64

ERROR

OK

predict3d

r-oldrel-windows-x86_64

ERROR

OK

predict3d

r-release-linux-x86_64

ERROR

OK

preventr

r-release-linux-x86_64

ERROR

NOTE

profiplots

r-oldrel-windows-x86_64

ERROR

OK

profiplots

r-release-linux-x86_64

ERROR

OK

pubh

r-oldrel-windows-x86_64

ERROR

OK

pubh

r-release-linux-x86_64

ERROR

OK

qad

r-oldrel-windows-x86_64

ERROR

OK

qad

r-release-linux-x86_64

ERROR

OK

qdap

r-oldrel-windows-x86_64

ERROR

NOTE

qdap

r-release-linux-x86_64

ERROR

NOTE

quickReg

r-oldrel-windows-x86_64

ERROR

NOTE

quickReg

r-release-linux-x86_64

ERROR

NOTE

quollr

r-oldrel-windows-x86_64

ERROR

OK

quollr

r-release-linux-x86_64

ERROR

OK

r3dmol

r-oldrel-windows-x86_64

NOTE

ERROR

rFIA

r-oldrel-windows-x86_64

ERROR

NOTE

rFIA

r-release-linux-x86_64

ERROR

OK

rPDBapi

r-oldrel-windows-x86_64

OK

ERROR

rcdf

r-oldrel-windows-x86_64

ERROR

OK

rcdf

r-release-linux-x86_64

ERROR

OK

readyomics

r-oldrel-windows-x86_64

ERROR

OK

readyomics

r-release-linux-x86_64

ERROR

OK

rerddapXtracto

r-release-linux-x86_64

ERROR

OK

reslr

r-oldrel-windows-x86_64

ERROR

OK

restfulr

r-oldrel-windows-x86_64

ERROR

OK

saros

r-oldrel-windows-x86_64

ERROR

OK

saros

r-release-linux-x86_64

ERROR

OK

scPOEM

r-oldrel-windows-x86_64

OK

ERROR

scUtils

r-oldrel-windows-x86_64

ERROR

NOTE

scUtils

r-release-linux-x86_64

ERROR

OK

schtools

r-release-linux-x86_64

ERROR

OK

seAMLess

r-oldrel-windows-x86_64

ERROR

NOTE

seAMLess

r-release-linux-x86_64

ERROR

OK

see

r-oldrel-windows-x86_64

ERROR

OK

see

r-release-linux-x86_64

ERROR

OK

seedreg

r-oldrel-windows-x86_64

ERROR

OK

seedreg

r-release-linux-x86_64

ERROR

OK

sjSDM

r-release-linux-x86_64

ERROR

OK

spacejamr

r-oldrel-windows-x86_64

ERROR

OK

spacejamr

r-release-linux-x86_64

ERROR

OK

spectralR

r-oldrel-windows-x86_64

ERROR

OK

spectralR

r-release-linux-x86_64

ERROR

OK

spinifex

r-oldrel-windows-x86_64

ERROR

OK

spinifex

r-release-linux-x86_64

ERROR

OK

ssd4mosaic

r-oldrel-windows-x86_64

ERROR

OK

sssc

r-oldrel-windows-x86_64

WARNING

OK

sssc

r-release-linux-x86_64

WARNING

OK

stacomiR

r-oldrel-windows-x86_64

ERROR

OK

stacomiR

r-release-linux-x86_64

ERROR

OK

summclust

r-release-linux-x86_64

ERROR

OK

symbolicDA

r-release-linux-x86_64

NOTE

OK

tangles

r-release-linux-x86_64

ERROR

OK

teal.modules.general

r-release-linux-x86_64

ERROR

OK

tidyEdSurvey

r-oldrel-windows-x86_64

ERROR

OK

tidyEdSurvey

r-release-linux-x86_64

ERROR

OK

tidypaleo

r-oldrel-windows-x86_64

WARNING

OK

tidypaleo

r-release-linux-x86_64

WARNING

OK

tidypopgen

r-oldrel-windows-x86_64

ERROR

NOTE

tidypopgen

r-release-linux-x86_64

ERROR

OK

tinythemes

r-release-linux-x86_64

NOTE

OK

tradeoffaucdim

r-oldrel-windows-x86_64

ERROR

OK

tradeoffaucdim

r-release-linux-x86_64

ERROR

OK

tricolore

r-oldrel-windows-x86_64

ERROR

OK

tricolore

r-release-linux-x86_64

ERROR

OK

triplot

r-oldrel-windows-x86_64

ERROR

NOTE

triplot

r-release-linux-x86_64

ERROR

OK

vDiveR

r-oldrel-windows-x86_64

ERROR

OK

vDiveR

r-release-linux-x86_64

ERROR

OK

vaccineff

r-oldrel-windows-x86_64

ERROR

OK

vaccineff

r-release-linux-x86_64

ERROR

OK

vanquish

r-oldrel-windows-x86_64

WARNING

OK

vanquish

r-release-linux-x86_64

WARNING

OK

vip

r-oldrel-windows-x86_64

ERROR

OK

vip

r-release-linux-x86_64

ERROR

OK

visualpred

r-oldrel-windows-x86_64

WARNING

OK

visualpred

r-release-linux-x86_64

WARNING

OK

vvshiny

r-oldrel-windows-x86_64

ERROR

OK

vvshiny

r-release-linux-x86_64

ERROR

OK

washi

r-oldrel-windows-x86_64

ERROR

OK

washi

r-release-linux-x86_64

ERROR

NOTE

windfarmGA

r-oldrel-windows-x86_64

ERROR

OK

windfarmGA

r-release-linux-x86_64

ERROR

OK

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 168 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()

Conclusion

cat("There are no packages detected with differences between yesterday and today attributable to intermittent failures.\n")

There are no packages detected with differences between yesterday and today attributable to intermittent failures.

knitr::knit_exit()

  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.↩︎