diff --git a/.gitignore b/.gitignore index 8a4b83b..a226d24 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,4 @@ .envrc exec.sh exec.R -PACKAGES* docs/ \ No newline at end of file diff --git a/local/last-processed-by-platform.R b/local/last-processed-by-platform.R index d392c17..7e1f9a2 100644 --- a/local/last-processed-by-platform.R +++ b/local/last-processed-by-platform.R @@ -7,10 +7,3 @@ query_metadata_table() |> arrange(desc(timestamp)) |> select(name, timestamp) |> filter(row_number()==1) - - -### Query index of package in the CRAN DB (which is sorted alphabetically) -pkgs <- tools::CRAN_package_db()$Package -pkgs <- setdiff(pkgs, c("biplotbootGUI", "Rsymphony", "PortfolioAnalytics", "ROI.plugin.symphony", "adea", "RInno", "skedastic", "RPushbullet", "SimNPH", "SimDesign","simCAT", "SIAmodules", "shinytest2", "shinyIRT", "ShinyItemAnalysis", "shiny.benchmark", "scDIFtest", "RSP", "ROracle", "ROI.plugin.qpoases", "ROI.plugin.cplex", "RmecabKo", "rmarchingcubes", "RcppMeCab", "Rcplex", "ravetools", "Rbeast", "Rblpapi", "RcppEnsmallen", "qtkit", "priorCON", "prior3D", "PerFit", "outlierensembles", "nomnoml", "mxfda", "MultBiplotR", "mstDIF", "mdsr", "makepipe", "lordif", "KSgeneral", "kequate", "jstager", "jrt", "irtreliability", "irtQ", "irtpwr", "irtawsi", "GRShiny", "gpuR", "googletraffic", "giacR", "gamstransfer", "flps", "flow", "filters", "faoutlier", "equateIRT", "EnrichIntersect", "EFA.dimensions", "DFIT", "D3mirt", "ctgdist", "CoTiMA", "ConvertPar", "clrng", "bscui", "BifactorIndicesCalculator", "autoFC", "airt")) -which(pkgs == "urca") -pkgs[19121:19122] \ No newline at end of file diff --git a/local/inspect-missing-pkgs.R b/local/packages-without-binaries.R similarity index 52% rename from local/inspect-missing-pkgs.R rename to local/packages-without-binaries.R index 03a9bd3..01640de 100644 --- a/local/inspect-missing-pkgs.R +++ b/local/packages-without-binaries.R @@ -1,16 +1,15 @@ +### +# Scope: List Packages for which the most recent CRAN release is not available +### library(furrr) library(cli) library(dplyr) library(data.table) -# Packages for which the most recent CRAN release is not available last_versions_cran <- available.packages("https://cloud.r-project.org/src/contrib")[, c("Package", "Version")] -# last_versions_devxy <- available.packages("https://cran.devxy.io/arm64/jammy/latest/src/contrib")[, c("Package", "Version")] -last_versions_devxy <- available.packages("https://cran.devxy.io/arm64/rhel8/latest/src/contrib")[, c("Package", "Version")] arch <- c("amd64", "arm64") os_ids <- c("rhel8", "rhel9", "noble", "jammy", "alpine320") -# os_ids <- c("rhel8") grid <- tidyr::expand_grid(arch = arch, os_ids = os_ids) # Define the function to check for missing packages @@ -19,7 +18,7 @@ check_package <- function(pkg_name, available_pkgs, version_cran, arch, os_id) { version_devxy <- available_pkgs %>% filter(Package == pkg_name) %>% pull(Version) - + if (is.na(version_devxy) || version_cran != version_devxy) { # Package is missing or version mismatch return(data.frame(pkg_name = pkg_name, arch = arch, ID = os_id)) @@ -36,17 +35,16 @@ future::plan("multisession", workers = 5) pkgs_missing <- future_map2(grid$arch, grid$os_ids, ~ { - # Prepare the URL and fetch available packages only once per (arch, os_id) repo_url <- sprintf("https://cran.devxy.io/%s/%s/latest/src/contrib", .x, .y) available_pkgs <- as.data.table(available.packages(contriburl = repo_url)[, c("Package", "Version")]) - + # Define the packages to check once cran_pkgs <- as.data.table(last_versions_cran) - + # Accumulate results in a list pkg_entries <- list() - + # Loop through each package name and check if it's missing for (pkg_name in cran_pkgs$Package) { version_cran <- cran_pkgs[Package == pkg_name, Version] @@ -55,7 +53,7 @@ pkgs_missing <- future_map2(grid$arch, grid$os_ids, ~ { pkg_entries[[length(pkg_entries) + 1]] <- result } } - + # Combine results for the current (arch, os_id) if (length(pkg_entries) > 0) { return(rbindlist(pkg_entries)) @@ -66,32 +64,38 @@ pkgs_missing <- future_map2(grid$arch, grid$os_ids, ~ { df_missing_pkgs <- rbindlist(pkgs_missing, fill = TRUE) - -df_missing_pkgs |> - group_by(arch, ID) |> - arrange(arch, ID) |> +# Group and count missing packages by architecture and ID +df_summary <- df_missing_pkgs %>% + group_by(arch, ID) %>% + arrange(arch, ID) %>% count() -pkgs_missing_amd64_rhel8 = df_missing_pkgs |> filter(arch == "amd64", ID == "rhel8") |> pull(pkg_name) -pkgs_missing_amd64_rhel9 = df_missing_pkgs |> filter(arch == "amd64", ID == "rhel9") |> pull(pkg_name) -pkgs_missing_amd64_jammy = df_missing_pkgs |> filter(arch == "amd64", ID == "jammy") |> pull(pkg_name) -pkgs_missing_amd64_noble = df_missing_pkgs |> filter(arch == "amd64", ID == "noble") |> pull(pkg_name) -pkgs_missing_amd64_alpine320 = df_missing_pkgs |> filter(arch == "amd64", ID == "alpine320") |> pull(pkg_name) +# Extract and copy missing package names for each architecture and ID combination +extract_and_copy_pkgs <- function(df, arch, id, clip = FALSE) { + pkgs <- df %>% + filter(arch == arch, ID == id) %>% + pull(pkg_name) -pkgs_missing_arm64_rhel8 = df_missing_pkgs |> filter(arch == "arm64", ID == "rhel8") |> pull(pkg_name) -pkgs_missing_arm64_rhel9 = df_missing_pkgs |> filter(arch == "arm64", ID == "rhel9") |> pull(pkg_name) -pkgs_missing_arm64_jammy = df_missing_pkgs |> filter(arch == "arm64", ID == "jammy") |> pull(pkg_name) -pkgs_missing_arm64_noble = df_missing_pkgs |> filter(arch == "arm64", ID == "noble") |> pull(pkg_name) -pkgs_missing_arm64_alpine320 = df_missing_pkgs |> filter(arch == "arm64", ID == "alpine320") |> pull(pkg_name) + # Print and copy to clipboard if needed + formatted_pkgs <- gsub('"', "'", capture.output(dput(pkgs[1:300]))) + cat(formatted_pkgs, "\n", sep = "") -options(max.print=1000000) -which(names(last_versions_cran[, "Package"]) %in% pkgs_missing_amd64_rhel8) -which(names(last_versions_cran[, "Package"]) %in% pkgs_missing_amd64_rhel9) -which(names(last_versions_cran[, "Package"]) %in% pkgs_missing_amd64_jammy) -which(names(last_versions_cran[, "Package"]) %in% pkgs_missing_amd64_noble) -which(names(last_versions_cran[, "Package"]) %in% pkgs_missing_amd64_alpine320) + if (clip) { + clipr::write_clip(formatted_pkgs) + } + return(pkgs) +} -# for (i in pkgs_missing_filtered) { -# system(sprintf("just build-single jammy arm64 later latest 1")) -# } +# Usage for different architecture and ID combinations +pkgs_missing_amd64_rhel8 <- extract_and_copy_pkgs(df_missing_pkgs, "amd64", "rhel8", clip = TRUE) +pkgs_missing_amd64_rhel9 <- extract_and_copy_pkgs(df_missing_pkgs, "amd64", "rhel9", clip = TRUE) +pkgs_missing_amd64_jammy <- extract_and_copy_pkgs(df_missing_pkgs, "amd64", "jammy", clip = TRUE) +pkgs_missing_amd64_noble <- extract_and_copy_pkgs(df_missing_pkgs, "amd64", "noble", clip = TRUE) +pkgs_missing_amd64_alpine320 <- extract_and_copy_pkgs(df_missing_pkgs, "amd64", "alpine320", clip = TRUE) + +pkgs_missing_arm64_rhel8 <- extract_and_copy_pkgs(df_missing_pkgs, "arm64", "rhel8", clip = TRUE) +pkgs_missing_arm64_rhel9 <- extract_and_copy_pkgs(df_missing_pkgs, "arm64", "rhel9", clip = TRUE) +pkgs_missing_arm64_jammy <- extract_and_copy_pkgs(df_missing_pkgs, "arm64", "jammy", clip = TRUE) +pkgs_missing_arm64_noble <- extract_and_copy_pkgs(df_missing_pkgs, "arm64", "noble", clip = TRUE) +pkgs_missing_arm64_alpine320 <- extract_and_copy_pkgs(df_missing_pkgs, "arm64", "alpine320", clip = TRUE)