feat: add script to list missing pkgs
This commit is contained in:
parent
2dde90399d
commit
c0e69e5abc
1 changed files with 97 additions and 0 deletions
97
local/inspect-missing-pkgs.R
Normal file
97
local/inspect-missing-pkgs.R
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
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
|
||||
check_package <- function(pkg_name, available_pkgs, version_cran, arch, os_id) {
|
||||
if (pkg_name %in% available_pkgs$Package) {
|
||||
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))
|
||||
}
|
||||
} else {
|
||||
# Package completely missing in devxy
|
||||
return(data.frame(pkg_name = pkg_name, arch = arch, ID = os_id))
|
||||
}
|
||||
return(NULL) # No mismatch, no entry added
|
||||
}
|
||||
|
||||
# Run the mapping with parallel processing for each (arch, os_id) combination
|
||||
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]
|
||||
result <- check_package(pkg_name, available_pkgs, version_cran, .x, .y)
|
||||
if (!is.null(result)) {
|
||||
pkg_entries[[length(pkg_entries) + 1]] <- result
|
||||
}
|
||||
}
|
||||
|
||||
# Combine results for the current (arch, os_id)
|
||||
if (length(pkg_entries) > 0) {
|
||||
return(rbindlist(pkg_entries))
|
||||
} else {
|
||||
return(data.table(pkg_name = character(), arch = character(), ID = character()))
|
||||
}
|
||||
})
|
||||
|
||||
df_missing_pkgs <- rbindlist(pkgs_missing, fill = TRUE)
|
||||
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
# for (i in pkgs_missing_filtered) {
|
||||
# system(sprintf("just build-single jammy arm64 later latest 1"))
|
||||
# }
|
||||
Loading…
Reference in a new issue