From 704e51483b34261242ca13cd90a87a25f8fcf101 Mon Sep 17 00:00:00 2001 From: Jackson Hoffart Date: Thu, 12 Dec 2024 10:40:14 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20`generate=5Fbadge=5Ftables`=20type?= =?UTF-8?q?=20functions=20now=20generate=20badges=20statically=20(#117)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/nightly-readme-build.yml | 44 ----- DESCRIPTION | 2 +- R/format_badges.R | 79 ++++++++ R/generate_badge_tables.R | 107 +++++++++++ R/generate_package_table.R | 188 ------------------- R/generate_workflow_table.R | 54 ------ R/prod_checks.R | 30 +++ README.Rmd | 121 +++++++++--- README.md | 53 +++--- man/generate_package_table.Rd | 40 ++-- man/generate_workflow_table.Rd | 44 +++-- tests/testthat/test-generate_package_table.R | 24 ++- 12 files changed, 413 insertions(+), 373 deletions(-) delete mode 100644 .github/workflows/nightly-readme-build.yml create mode 100644 R/format_badges.R create mode 100644 R/generate_badge_tables.R delete mode 100644 R/generate_package_table.R delete mode 100644 R/generate_workflow_table.R diff --git a/.github/workflows/nightly-readme-build.yml b/.github/workflows/nightly-readme-build.yml deleted file mode 100644 index c7b7d54..0000000 --- a/.github/workflows/nightly-readme-build.yml +++ /dev/null @@ -1,44 +0,0 @@ -on: - schedule: - - cron: '0 0 * * *' - workflow_dispatch: - -name: Nightly Knit README.Rmd - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - uses: r-lib/actions/setup-pandoc@v2 - - - uses: r-lib/actions/setup-r@v2 - - - uses: r-lib/actions/setup-r-dependencies@v2 - - - name: Install README.Rmd dependencies - run: | - Rscript -e 'install.packages(c("pak", "rmarkdown", "knitr"))' - - - name: Install the local package - run: | - Rscript -e 'pak::local_install(".")' - - - name: Render README.Rmd file - run: | - Rscript -e 'rmarkdown::render("README.Rmd", output_format = rmarkdown::github_document(html_preview = FALSE))' - - name: Create pull request - uses: peter-evans/create-pull-request@v4 - with: - commit-message: GH - Render README - title: GH - Render README - body: GH action to re-knit the README.Rmd - base: main - labels: ci/cd - branch: nightly_readme_build - delete-branch: true diff --git a/DESCRIPTION b/DESCRIPTION index d728bc7..ddcc5ce 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: pacta.sit.rep Title: What the Package Does (One Line, Title Case) -Version: 0.0.0.9008 +Version: 0.0.0.9009 Authors@R: person("Jackson", "Hoffart", , "jackson.hoffart@gmail.com", role = c("aut", "cre"), comment = c(ORCID = "0000-0002-8600-5042")) diff --git a/R/format_badges.R b/R/format_badges.R new file mode 100644 index 0000000..017b230 --- /dev/null +++ b/R/format_badges.R @@ -0,0 +1,79 @@ +build_markdown_link <- function(display, path) { + glue::glue("[{display}]({path})") +} + +format_name_badge <- function(repo_path) { + repo_org <- strsplit(repo_path, "/", fixed = TRUE)[[1L]][[1L]] + repo_name <- strsplit(repo_path, "/", fixed = TRUE)[[1L]][[2L]] + + build_markdown_link( + display = repo_name, + path = glue::glue("https://{tolower(repo_org)}.github.io/{repo_name}/") + ) +} + +format_lifecycle_badge <- function(lifecycle) { + stopifnot( + lifecycle %in% c("experimental", "stable", "deprecated", "superseded") + ) + + lifecycle_badge_url <- switch( + lifecycle, + experimental = "https://lifecycle.r-lib.org/reference/figures/lifecycle-experimental.svg", # nolint: line_length_linter + stable = "https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg", # nolint: line_length_linter + deprecated = "https://lifecycle.r-lib.org/reference/figures/lifecycle-deprecated.svg", # nolint: line_length_linter + superseded = "https://lifecycle.r-lib.org/reference/figures/lifecycle-superseded.svg" # nolint: line_length_linter + ) + + build_markdown_link( + display = glue::glue( + "![]({lifecycle_badge_url})" + ), + path = glue::glue( + "https://lifecycle.r-lib.org/articles/stages.html#{lifecycle}" + ) + ) +} + +format_status_badge <- function(repo_path, ci_check) { + build_markdown_link( + display = glue::glue( + "![](https://github.com/{repo_path}/actions/workflows/{ci_check}/badge.svg?branch=main)" # nolint: line_length_linter + ), + path = glue::glue( + "https://github.com/{repo_path}/actions/workflows/{ci_check}?query=branch%3Amain" # nolint: line_length_linter + ) + ) +} + +format_coverage_badge <- function(repo_path) { + build_markdown_link( + display = glue::glue( + "![](https://img.shields.io/codecov/c/github/{tolower(repo_path)}/main)" + ), + path = glue::glue("https://app.codecov.io/gh/{repo_path}?branch=main") + ) +} + +format_version_badge <- function(repo_path) { + build_markdown_link( + display = glue::glue( + "![](https://img.shields.io/github/r-package/v/{tolower(repo_path)}/main?label=version&labelColor=%23444d56&color=%2334d058)" # nolint: line_length_linter + ), + path = glue::glue("https://github.com/{repo_path}/blob/main/DESCRIPTION") + ) +} + +format_maintainer_badge <- function(repo_path) { + repo_org <- strsplit(repo_path, "/", fixed = TRUE)[[1L]][[1L]] + repo_name <- strsplit(repo_path, "/", fixed = TRUE)[[1L]][[2L]] + + build_markdown_link( + display = glue::glue( + "![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2F{tolower(repo_org)}%2F{tolower(repo_name)}%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)" # nolint: line_length_linter + ), + path = glue::glue( + "https://github.com/{repo_path}/blob/main/.github/CODEOWNERS" + ) + ) +} diff --git a/R/generate_badge_tables.R b/R/generate_badge_tables.R new file mode 100644 index 0000000..f982dd6 --- /dev/null +++ b/R/generate_badge_tables.R @@ -0,0 +1,107 @@ +#' Generate a table with R package information +#' +#' @param repo_vectors A list of named character vectors. Each character vector +#' should contain: +#' * path - the shortpath to the GitHub repository, including organization +#' (e.g. "RMI-PACTA/r2dii.data") +#' * lifecycle - the lifecycle badge status (e.g. "stable", "experimental") +#' * ci_check - the name of the CI check file (e.g. "R-CMD-check.yaml") +# +#' @return A formatted sitrep tibble. +#' +#' @export +#' +#' @examples +#' +#' repos <- list( +#' c( +#' path = "RMI-PACTA/r2dii.data", +#' lifecycle = "stable", +#' ci_check = "R-CMD-check.yaml" +#' ), +#' c( +#' path = "RMI-PACTA/r2dii.plot", +#' lifecycle = "stable", +#' ci_check = "R.yml" +#' ) +#' ) +#' +#' generate_package_table(repos) +generate_package_table <- function(repo_vectors) { + out <- parse_inputs(repo_vectors) + + out <- dplyr::rowwise(out) + out <- dplyr::transmute( + out, + name = format_name_badge(.data[["path"]]), + lifecycle = format_lifecycle_badge(.data[["lifecycle"]]), + status = format_status_badge(.data[["path"]], .data[["ci_check"]]), + coverage = format_coverage_badge(.data[["path"]]), + version = format_version_badge(.data[["path"]]), + maintainer = format_maintainer_badge(.data[["path"]]) + ) + dplyr::ungroup(out) +} + +#' Generate a table with workflow information +#' +#' @param repo_vectors A list of named character vectors. Each character vector +#' should contain: +#' * path - the shortpath to the GitHub repository, including organization +#' (e.g. "RMI-PACTA/workflow.transition.monitor") +#' * lifecycle - the lifecycle badge status (e.g. "stable", "experimental") +#' * ci_check - the name of the CI check file +#' (e.g. "build-Docker-image-triggers.yml") +#' +#' @return A formatted sitrep tibble. +#' +#' @export +#' +#' @examples +#' +#' repos <- list( +#' c( +#' path = "RMI-PACTA/workflow.transition.monitor", +#' lifecycle = "stable", +#' ci_check = "build-Docker-image-triggers.yml" +#' ), +#' c( +#' path = "RMI-PACTA/workflow.data.preparation", +#' lifecycle = "stable", +#' ci_check = "docker.yml" +#' ) +#' ) +#' +#' generate_workflow_table(repos) +generate_workflow_table <- function(repo_vectors) { + out <- parse_inputs(repo_vectors) + + out <- dplyr::rowwise(out) + out <- dplyr::transmute( + out, + name = format_name_badge(.data[["path"]]), + lifecycle = format_lifecycle_badge(.data[["lifecycle"]]), + status = format_status_badge(.data[["path"]], .data[["ci_check"]]), + maintainer = format_maintainer_badge(.data[["path"]]) + ) + dplyr::ungroup(out) +} + +check_inputs <- function(repo_vectors) { + stopifnot( + is.list(repo_vectors), + all(purrr::map_lgl(repo_vectors, is.character)), + all(purrr::map_lgl(repo_vectors, ~ length(.x) == 3L)), + all( + purrr::map_lgl( + repo_vectors, + ~ all(names(.x) %in% c("path", "lifecycle", "ci_check")) + ) + ) + ) +} + +parse_inputs <- function(repo_vectors) { + check_inputs(repo_vectors) + purrr::map_dfr(repo_vectors, ~ tibble::as_tibble(as.list(.))) +} diff --git a/R/generate_package_table.R b/R/generate_package_table.R deleted file mode 100644 index 5cf1969..0000000 --- a/R/generate_package_table.R +++ /dev/null @@ -1,188 +0,0 @@ -#' Generate a table with R package information -#' -#' @param repo_paths A character vector with GH paths to the R package -#' repositories -#' -#' @return A tibble with the following columns: -#' * Repo -#' * Lifecycle -#' * Status -#' * Test_Coverage -#' * Latest_SHA -#' * Maintainer -#' -#' @export -#' -#' @examples -#' generate_package_table(c("RMI-PACTA/r2dii.data", "RMI-PACTA/r2dii.match")) -generate_package_table <- function(repo_paths) { - out <- tibble::tibble( - repo = repo_paths, - lifecycle = purrr::map_chr(repo_paths, table_lifecycle), - status = purrr::map_chr(repo_paths, table_status), - coverage = purrr::map_chr(repo_paths, table_coverage), - sha = purrr::map_chr(repo_paths, table_latest_sha), - maintainer = purrr::map_chr(repo_paths, table_maintainer) - ) - - dplyr::transmute( - out, - Repo = format_repo_v(.data[["repo"]]), - Lifecycle = format_lifecycle_v(.data[["lifecycle"]]), - Status = format_status_v(.data[["repo"]], .data[["status"]]), - Test_Coverage = format_coverage_v(.data[["repo"]], .data[["coverage"]]), - Latest_SHA = format_latest_sha_v(.data[["repo"]], .data[["sha"]]), - Maintainer = format_maintainer_v(.data[["maintainer"]]) - ) -} - -format_repo <- function(repo) { - repo_base <- gsub(".*/", "", repo) - glue::glue("[{repo_base}](https://github.com/{repo})") -} - -format_repo_v <- Vectorize(format_repo) - -format_lifecycle <- function(lifecycle_badge) { - if (is.na(lifecycle_badge)) { - return("No lifecycle badge found.") - } - - desc <- "![Lifecycle]" - link <- "https://lifecycle.r-lib.org/articles/stages.html" - - glue::glue("[{desc}({lifecycle_badge})]({link})") -} - -format_lifecycle_v <- Vectorize(format_lifecycle) - -format_status <- function(repo, r_cmd_check_status) { - if (is.na(r_cmd_check_status)) { - return("No R CMD check found.") - } - - r_cmd_check_status -} - -format_status_v <- Vectorize(format_status) - -format_coverage <- function(repo, test_coverage) { - if (is.na(test_coverage)) { - return("No test coverage found.") - } - - test_coverage -} - -format_coverage_v <- Vectorize(format_coverage) - -format_latest_sha <- function(repo, sha) { - if (is.na(sha)) { - return("`main` branch not found.") - } - - short_sha <- substr(sha, 1, 7) - - glue::glue( - "[`{short_sha}`](https://github.com/{repo}/commits/main)" - ) -} - -format_latest_sha_v <- Vectorize(format_latest_sha) - -format_maintainer <- function(maintainer) { - if (is.na(maintainer)) { - return("No maintainer found.") - } - - glue::glue( - "[@{maintainer}](https://github.com/{maintainer}/)" - ) -} - -format_maintainer_v <- Vectorize(format_maintainer) - -table_lifecycle <- function(repo_path) { - readme <- get_gh_text_file(repo_path, file_path = "README.md") - - if (is.null(readme)) { - return(NA_character_) - } - - pattern <- "https://img.shields.io/badge/lifecycle-\\S+.svg" - - lifecycle_badge <- readme[grepl(pattern, readme)][1] - lifecycle_badge <- gsub(".*(https[^)]*\\.svg).*", "\\1", lifecycle_badge) - - if (length(lifecycle_badge) == 0) { - return(NA_character_) - } - - return(lifecycle_badge) -} - -table_status <- function(repo_path) { - readme <- get_gh_text_file(repo_path, file_path = "README.md") - - r_cmd_check_status <- readme[grepl("R.yml|R-CMD-check.yaml", readme)] - - if (is.null(r_cmd_check_status) | length(r_cmd_check_status) == 0) { - return(NA_character_) - } - - return(r_cmd_check_status) -} - -table_coverage <- function(repo_path) { - badge_link <- glue::glue("(https://codecov.io/gh/{repo_path}/branch/main/graph/badge.svg)") - cov_link <- glue::glue("(https://app.codecov.io/gh/{repo_path}?branch=main)") - - test_coverage <- glue::glue("[![Codecov test coverage]{badge_link}]{cov_link}") - - return(test_coverage) -} - -table_latest_sha <- function(repo_path) { - latest_sha <- fetch_main_sha(repo_path) - - if (is.null(latest_sha)) { - return(NA_character_) - } - - return(latest_sha) -} - -table_maintainer <- function(repo_path) { - codeowners <- get_gh_text_file(repo_path, file_path = ".github/CODEOWNERS") - if (is.null(codeowners)) { - return(NA_character_) - } - - maintainer <- codeowners[!grepl("^#", codeowners)] - maintainer <- maintainer[grepl("^*", maintainer)] - maintainer <- maintainer[grepl("^.*@.*$", maintainer)] - maintainer <- gsub("^.*@(.*)$", "\\1", maintainer) - - if (length(maintainer) == 0) { - return(NA_character_) - } - - return(maintainer) -} - -fetch_main_sha <- function(repo_path) { - response <- tryCatch( - gh::gh( - "/repos/{repo}/branches/main", - repo = repo_path - ), - error = function(cond) { - return(NULL) - } - ) - - if (!is.null(response)) { - return(response$commit$sha) - } - return(NULL) -} diff --git a/R/generate_workflow_table.R b/R/generate_workflow_table.R deleted file mode 100644 index b83152b..0000000 --- a/R/generate_workflow_table.R +++ /dev/null @@ -1,54 +0,0 @@ -#' Generate a table with worfklow information -#' -#' @param repo_paths A character vector with GH paths to the workflow -#' repositories -#' -#' @return A tibble with the following columns: -#' * Repo -#' * Lifecycle -#' * Docker Status -#' * Latest_SHA -#' * Maintainer -#' -#' @export -#' -#' @examples -#' generate_workflow_table("RMI-PACTA/workflow.transition.monitor") -generate_workflow_table <- function(repo_paths) { - out <- tibble::tibble( - repo = repo_paths, - lifecycle = purrr::map_chr(repo_paths, table_lifecycle), - docker = purrr::map_chr(repo_paths, table_docker), - sha = purrr::map_chr(repo_paths, table_latest_sha), - maintainer = purrr::map_chr(repo_paths, table_maintainer) - ) - - dplyr::transmute( - out, - Repo = format_repo_v(.data[["repo"]]), - Lifecycle = format_lifecycle_v(.data[["lifecycle"]]), - Docker_Status = format_docker_v(.data[["docker"]]), - Latest_SHA = format_latest_sha_v(.data[["repo"]], .data[["sha"]]), - Maintainer = format_maintainer_v(.data[["maintainer"]]) - ) -} - -format_docker <- function(docker_status) { - if (is.na(docker_status)) { - return("No Docker check found.") - } - - docker_status -} - -format_docker_v <- Vectorize(format_docker) - -table_docker <- function(repo_path) { - readme <- get_gh_text_file(repo_path, file_path = "README.md") - - docker_action_names <- "docker.yml|build-Docker-image-triggers.yml" - - docker_status <- readme[grepl(docker_action_names, readme)] - - return(docker_status) -} diff --git a/R/prod_checks.R b/R/prod_checks.R index b130309..c7ffdc6 100644 --- a/R/prod_checks.R +++ b/R/prod_checks.R @@ -51,3 +51,33 @@ prod_checks <- function(repo_json) { if (requireNamespace("memoise")) { prod_checks <- memoise::memoise(prod_checks) } + +format_lifecycle <- function(lifecycle_badge) { + if (is.na(lifecycle_badge)) { + return("No lifecycle badge found.") + } + + desc <- "![Lifecycle]" + link <- "https://lifecycle.r-lib.org/articles/stages.html" + + glue::glue("[{desc}({lifecycle_badge})]({link})") +} + +table_lifecycle <- function(repo_path) { + readme <- get_gh_text_file(repo_path, file_path = "README.md") + + if (is.null(readme)) { + return(NA_character_) + } + + pattern <- "https://img.shields.io/badge/lifecycle-\\S+.svg" + + lifecycle_badge <- readme[grepl(pattern, readme)][[1L]] # nolint: regex_subset_linter + lifecycle_badge <- gsub(".*(https[^)]*\\.svg).*", "\\1", lifecycle_badge) + + if (length(lifecycle_badge) == 0L) { + return(NA_character_) + } + + return(lifecycle_badge) +} diff --git a/README.Rmd b/README.Rmd index 9655d4a..d229b31 100644 --- a/README.Rmd +++ b/README.Rmd @@ -28,11 +28,27 @@ Code health is reported at the level of the R package, and at the level of the T ### PACTA for Banks ``` {r echo = FALSE, results = "asis"} -banks_repos <- c( - "RMI-PACTA/r2dii.data", - "RMI-PACTA/r2dii.match", - "RMI-PACTA/r2dii.analysis", - "RMI-PACTA/r2dii.plot" +banks_repos <- list( + c( + path = "RMI-PACTA/r2dii.data", + lifecycle = "stable", + ci_check = "R.yml" + ), + c( + path = "RMI-PACTA/r2dii.match", + lifecycle = "stable", + ci_check = "R.yml" + ), + c( + path = "RMI-PACTA/r2dii.analysis", + lifecycle = "stable", + ci_check = "R.yml" + ), + c( + path = "RMI-PACTA/r2dii.plot", + lifecycle = "experimental", + ci_check = "R.yml" + ) ) banks_table <- pacta.sit.rep::generate_package_table(banks_repos) @@ -42,17 +58,57 @@ knitr::kable(banks_table) ### Transition Monitor ``` {r echo = FALSE, results = "asis"} -transition_monitor_repos <- c( - "RMI-PACTA/pacta.data.validation", - "RMI-PACTA/pacta.scenario.data.preparation", - "RMI-PACTA/pacta.data.scraping", - "RMI-PACTA/pacta.data.preparation", - "RMI-PACTA/pacta.portfolio.import", - "RMI-PACTA/pacta.portfolio.audit", - "RMI-PACTA/pacta.portfolio.allocate", - "RMI-PACTA/pacta.portfolio.report", - "RMI-PACTA/pacta.executive.summary", - "RMI-PACTA/pacta.portfolio.utils" +transition_monitor_repos <- list( + c( + path = "RMI-PACTA/pacta.scenario.data.preparation", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.scenario.data.preparation", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.data.scraping", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.data.preparation", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.portfolio.import", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.portfolio.audit", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.portfolio.allocate", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.portfolio.report", + lifecycle = "experimental", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.executive.summary", + lifecycle = "experimental", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/pacta.portfolio.utils", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ) ) tm_table <- pacta.sit.rep::generate_package_table(transition_monitor_repos) @@ -62,8 +118,12 @@ knitr::kable(tm_table) ### PACTA for Supervisors ``` {r echo = FALSE, results = "asis"} -supervisor_repos <- c( - "RMI-PACTA/pacta.multi.loanbook" +supervisor_repos <- list( + c( + path = "RMI-PACTA/pacta.multi.loanbook", + lifecycle = "experimental", + ci_check = "R-CMD-check.yaml" + ) ) tm_table <- pacta.sit.rep::generate_package_table(supervisor_repos) @@ -75,10 +135,27 @@ knitr::kable(tm_table) ### Transition Monitor ``` {r echo = FALSE, results = "asis"} -transition_monitor_workflows <- c( - "RMI-PACTA/workflow.scenario.preparation", - "RMI-PACTA/workflow.data.preparation", - "RMI-PACTA/workflow.transition.monitor" +transition_monitor_workflows <- list( + c( + path = "RMI-PACTA/workflow.scenario.preparation", + lifecycle = "stable", + ci_check = "docker.yml" + ), + c( + path = "RMI-PACTA/workflow.benchmark.preparation", + lifecycle = "experimental", + ci_check = "docker.yml" + ), + c( + path = "RMI-PACTA/workflow.data.preparation", + lifecycle = "stable", + ci_check = "docker.yml" + ), + c( + path = "RMI-PACTA/workflow.transition.monitor", + lifecycle = "stable", + ci_check = "build-Docker-image-triggers.yml" + ) ) workflow_table <- pacta.sit.rep::generate_workflow_table(transition_monitor_workflows) diff --git a/README.md b/README.md index 52a4bb4..111dfb7 100644 --- a/README.md +++ b/README.md @@ -19,40 +19,41 @@ of the Transition Monitor Docker image. ### PACTA for Banks -| Repo | Lifecycle | Status | Test_Coverage | Latest_SHA | Maintainer | -|:--------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------|:------------------------------------------| -| [r2dii.data](https://github.com/RMI-PACTA/r2dii.data) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/r2dii.data/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/r2dii.data/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/r2dii.data/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/r2dii.data?branch=main) | [`63871e7`](https://github.com/RMI-PACTA/r2dii.data/commits/main) | [@jacobvjk](https://github.com/jacobvjk/) | -| [r2dii.match](https://github.com/RMI-PACTA/r2dii.match) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/r2dii.match/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/r2dii.match/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/r2dii.match/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/r2dii.match?branch=main) | [`72e74d8`](https://github.com/RMI-PACTA/r2dii.match/commits/main) | [@jacobvjk](https://github.com/jacobvjk/) | -| [r2dii.analysis](https://github.com/RMI-PACTA/r2dii.analysis) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/r2dii.analysis/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/r2dii.analysis/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/r2dii.analysis/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/r2dii.analysis?branch=main) | [`2f606b0`](https://github.com/RMI-PACTA/r2dii.analysis/commits/main) | [@jacobvjk](https://github.com/jacobvjk/) | -| [r2dii.plot](https://github.com/RMI-PACTA/r2dii.plot) | [![Lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/r2dii.plot/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/r2dii.plot/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/r2dii.plot/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/r2dii.plot?branch=main) | [`4f3f4e5`](https://github.com/RMI-PACTA/r2dii.plot/commits/main) | [@MonikaFu](https://github.com/MonikaFu/) | +| name | lifecycle | status | coverage | version | maintainer | +|:---|:---|:---|:---|:---|:---| +| [r2dii.data](https://rmi-pacta.github.io/r2dii.data/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/r2dii.data/actions/workflows/R.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/r2dii.data/actions/workflows/R.yml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/r2dii.data/main)](https://app.codecov.io/gh/RMI-PACTA/r2dii.data?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/r2dii.data/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/r2dii.data/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fr2dii.data%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/r2dii.data/blob/main/.github/CODEOWNERS) | +| [r2dii.match](https://rmi-pacta.github.io/r2dii.match/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/r2dii.match/actions/workflows/R.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/r2dii.match/actions/workflows/R.yml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/r2dii.match/main)](https://app.codecov.io/gh/RMI-PACTA/r2dii.match?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/r2dii.match/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/r2dii.match/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fr2dii.match%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/r2dii.match/blob/main/.github/CODEOWNERS) | +| [r2dii.analysis](https://rmi-pacta.github.io/r2dii.analysis/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/r2dii.analysis/actions/workflows/R.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/r2dii.analysis/actions/workflows/R.yml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/r2dii.analysis/main)](https://app.codecov.io/gh/RMI-PACTA/r2dii.analysis?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/r2dii.analysis/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/r2dii.analysis/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fr2dii.analysis%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/r2dii.analysis/blob/main/.github/CODEOWNERS) | +| [r2dii.plot](https://rmi-pacta.github.io/r2dii.plot/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-experimental.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) | [![](https://github.com/RMI-PACTA/r2dii.plot/actions/workflows/R.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/r2dii.plot/actions/workflows/R.yml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/r2dii.plot/main)](https://app.codecov.io/gh/RMI-PACTA/r2dii.plot?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/r2dii.plot/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/r2dii.plot/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fr2dii.plot%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/r2dii.plot/blob/main/.github/CODEOWNERS) | ### Transition Monitor -| Repo | Lifecycle | Status | Test_Coverage | Latest_SHA | Maintainer | -|:------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------|:------------------------------------------| -| [pacta.data.validation](https://github.com/RMI-PACTA/pacta.data.validation) | [![Lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.data.validation/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.data.validation/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.data.validation/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.data.validation?branch=main) | [`22dc7fa`](https://github.com/RMI-PACTA/pacta.data.validation/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [pacta.scenario.data.preparation](https://github.com/RMI-PACTA/pacta.scenario.data.preparation) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.scenario.data.preparation/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.scenario.data.preparation?branch=main) | [`8e887df`](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [pacta.data.scraping](https://github.com/RMI-PACTA/pacta.data.scraping) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.data.scraping/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.data.scraping/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.data.scraping/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.data.scraping?branch=main) | [`f82845e`](https://github.com/RMI-PACTA/pacta.data.scraping/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [pacta.data.preparation](https://github.com/RMI-PACTA/pacta.data.preparation) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.data.preparation/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.data.preparation/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.data.preparation/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.data.preparation?branch=main) | [`ea74f17`](https://github.com/RMI-PACTA/pacta.data.preparation/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [pacta.portfolio.import](https://github.com/RMI-PACTA/pacta.portfolio.import) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.portfolio.import/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.portfolio.import/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.portfolio.import/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.import?branch=main) | [`b643c4e`](https://github.com/RMI-PACTA/pacta.portfolio.import/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [pacta.portfolio.audit](https://github.com/RMI-PACTA/pacta.portfolio.audit) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.portfolio.audit/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.portfolio.audit/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.portfolio.audit/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.audit?branch=main) | [`61f1472`](https://github.com/RMI-PACTA/pacta.portfolio.audit/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [pacta.portfolio.allocate](https://github.com/RMI-PACTA/pacta.portfolio.allocate) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.portfolio.allocate/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.portfolio.allocate/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.portfolio.allocate/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.allocate?branch=main) | [`ba60176`](https://github.com/RMI-PACTA/pacta.portfolio.allocate/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [pacta.portfolio.report](https://github.com/RMI-PACTA/pacta.portfolio.report) | [![Lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.portfolio.report/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.portfolio.report/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.portfolio.report/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.report?branch=main) | [`24221e7`](https://github.com/RMI-PACTA/pacta.portfolio.report/commits/main) | [@MonikaFu](https://github.com/MonikaFu/) | -| [pacta.executive.summary](https://github.com/RMI-PACTA/pacta.executive.summary) | [![Lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.executive.summary/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.executive.summary/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.executive.summary/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.executive.summary?branch=main) | [`d3be98c`](https://github.com/RMI-PACTA/pacta.executive.summary/commits/main) | [@MonikaFu](https://github.com/MonikaFu/) | -| [pacta.portfolio.utils](https://github.com/RMI-PACTA/pacta.portfolio.utils) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.portfolio.utils/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.portfolio.utils/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.portfolio.utils/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.utils?branch=main) | [`4fd21e5`](https://github.com/RMI-PACTA/pacta.portfolio.utils/commits/main) | [@cjyetman](https://github.com/cjyetman/) | +| name | lifecycle | status | coverage | version | maintainer | +|:---|:---|:---|:---|:---|:---| +| [pacta.scenario.data.preparation](https://rmi-pacta.github.io/pacta.scenario.data.preparation/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.scenario.data.preparation/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.scenario.data.preparation?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.scenario.data.preparation/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.scenario.data.preparation%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/blob/main/.github/CODEOWNERS) | +| [pacta.scenario.data.preparation](https://rmi-pacta.github.io/pacta.scenario.data.preparation/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.scenario.data.preparation/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.scenario.data.preparation?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.scenario.data.preparation/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.scenario.data.preparation%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.scenario.data.preparation/blob/main/.github/CODEOWNERS) | +| [pacta.data.scraping](https://rmi-pacta.github.io/pacta.data.scraping/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.data.scraping/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.data.scraping/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.data.scraping/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.data.scraping?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.data.scraping/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.data.scraping/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.data.scraping%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.data.scraping/blob/main/.github/CODEOWNERS) | +| [pacta.data.preparation](https://rmi-pacta.github.io/pacta.data.preparation/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.data.preparation/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.data.preparation/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.data.preparation/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.data.preparation?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.data.preparation/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.data.preparation/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.data.preparation%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.data.preparation/blob/main/.github/CODEOWNERS) | +| [pacta.portfolio.import](https://rmi-pacta.github.io/pacta.portfolio.import/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.portfolio.import/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.portfolio.import/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.portfolio.import/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.import?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.portfolio.import/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.portfolio.import/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.portfolio.import%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.portfolio.import/blob/main/.github/CODEOWNERS) | +| [pacta.portfolio.audit](https://rmi-pacta.github.io/pacta.portfolio.audit/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.portfolio.audit/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.portfolio.audit/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.portfolio.audit/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.audit?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.portfolio.audit/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.portfolio.audit/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.portfolio.audit%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.portfolio.audit/blob/main/.github/CODEOWNERS) | +| [pacta.portfolio.allocate](https://rmi-pacta.github.io/pacta.portfolio.allocate/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.portfolio.allocate/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.portfolio.allocate/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.portfolio.allocate/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.allocate?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.portfolio.allocate/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.portfolio.allocate/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.portfolio.allocate%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.portfolio.allocate/blob/main/.github/CODEOWNERS) | +| [pacta.portfolio.report](https://rmi-pacta.github.io/pacta.portfolio.report/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-experimental.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) | [![](https://github.com/RMI-PACTA/pacta.portfolio.report/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.portfolio.report/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.portfolio.report/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.report?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.portfolio.report/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.portfolio.report/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.portfolio.report%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.portfolio.report/blob/main/.github/CODEOWNERS) | +| [pacta.executive.summary](https://rmi-pacta.github.io/pacta.executive.summary/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-experimental.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) | [![](https://github.com/RMI-PACTA/pacta.executive.summary/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.executive.summary/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.executive.summary/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.executive.summary?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.executive.summary/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.executive.summary/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.executive.summary%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.executive.summary/blob/main/.github/CODEOWNERS) | +| [pacta.portfolio.utils](https://rmi-pacta.github.io/pacta.portfolio.utils/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/pacta.portfolio.utils/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.portfolio.utils/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.portfolio.utils/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.portfolio.utils?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.portfolio.utils/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.portfolio.utils/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.portfolio.utils%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.portfolio.utils/blob/main/.github/CODEOWNERS) | ### PACTA for Supervisors -| Repo | Lifecycle | Status | Test_Coverage | Latest_SHA | Maintainer | -|:--------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------|:------------------------------------------| -| [pacta.multi.loanbook](https://github.com/RMI-PACTA/pacta.multi.loanbook) | [![Lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![R-CMD-check](https://github.com/RMI-PACTA/pacta.multi.loanbook/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/RMI-PACTA/pacta.multi.loanbook/actions/workflows/R-CMD-check.yaml) | [![Codecov test coverage](https://codecov.io/gh/RMI-PACTA/pacta.multi.loanbook/branch/main/graph/badge.svg)](https://app.codecov.io/gh/RMI-PACTA/pacta.multi.loanbook?branch=main) | [`619b9d9`](https://github.com/RMI-PACTA/pacta.multi.loanbook/commits/main) | [@jacobvjk](https://github.com/jacobvjk/) | +| name | lifecycle | status | coverage | version | maintainer | +|:---|:---|:---|:---|:---|:---| +| [pacta.multi.loanbook](https://rmi-pacta.github.io/pacta.multi.loanbook/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-experimental.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) | [![](https://github.com/RMI-PACTA/pacta.multi.loanbook/actions/workflows/R-CMD-check.yaml/badge.svg?branch=main)](https://github.com/RMI-PACTA/pacta.multi.loanbook/actions/workflows/R-CMD-check.yaml?query=branch%3Amain) | [![](https://img.shields.io/codecov/c/github/rmi-pacta/pacta.multi.loanbook/main)](https://app.codecov.io/gh/RMI-PACTA/pacta.multi.loanbook?branch=main) | [![](https://img.shields.io/github/r-package/v/rmi-pacta/pacta.multi.loanbook/main?label=version&labelColor=%23444d56&color=%2334d058)](https://github.com/RMI-PACTA/pacta.multi.loanbook/blob/main/DESCRIPTION) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fpacta.multi.loanbook%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/pacta.multi.loanbook/blob/main/.github/CODEOWNERS) | ## Workflows and Docker Images ### Transition Monitor -| Repo | Lifecycle | Docker_Status | Latest_SHA | Maintainer | -|:--------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------|:------------------------------------------------| -| [workflow.scenario.preparation](https://github.com/RMI-PACTA/workflow.scenario.preparation) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![docker](https://github.com/RMI-PACTA/workflow.scenario.preparation/actions/workflows/docker.yml/badge.svg)](https://github.com/RMI-PACTA/workflow.scenario.preparation/actions/workflows/docker.yml) | [`26811fa`](https://github.com/RMI-PACTA/workflow.scenario.preparation/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [workflow.data.preparation](https://github.com/RMI-PACTA/workflow.data.preparation) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![docker](https://github.com/RMI-PACTA/workflow.data.preparation/actions/workflows/docker.yml/badge.svg)](https://github.com/RMI-PACTA/workflow.data.preparation/actions/workflows/docker.yml) | [`12ef43e`](https://github.com/RMI-PACTA/workflow.data.preparation/commits/main) | [@cjyetman](https://github.com/cjyetman/) | -| [workflow.transition.monitor](https://github.com/RMI-PACTA/workflow.transition.monitor) | [![Lifecycle](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html) | [![.github/workflows/build-Docker-image-triggers.yml](https://github.com/RMI-PACTA/workflow.transition.monitor/actions/workflows/build-Docker-image-triggers.yml/badge.svg)](https://github.com/RMI-PACTA/workflow.transition.monitor/actions/workflows/build-Docker-image-triggers.yml) | [`5eedeef`](https://github.com/RMI-PACTA/workflow.transition.monitor/commits/main) | [@AlexAxthelm](https://github.com/AlexAxthelm/) | +| name | lifecycle | status | maintainer | +|:---|:---|:---|:---| +| [workflow.scenario.preparation](https://rmi-pacta.github.io/workflow.scenario.preparation/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/workflow.scenario.preparation/actions/workflows/docker.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/workflow.scenario.preparation/actions/workflows/docker.yml?query=branch%3Amain) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fworkflow.scenario.preparation%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/workflow.scenario.preparation/blob/main/.github/CODEOWNERS) | +| [workflow.benchmark.preparation](https://rmi-pacta.github.io/workflow.benchmark.preparation/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-experimental.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) | [![](https://github.com/RMI-PACTA/workflow.benchmark.preparation/actions/workflows/docker.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/workflow.benchmark.preparation/actions/workflows/docker.yml?query=branch%3Amain) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fworkflow.benchmark.preparation%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/workflow.benchmark.preparation/blob/main/.github/CODEOWNERS) | +| [workflow.data.preparation](https://rmi-pacta.github.io/workflow.data.preparation/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/workflow.data.preparation/actions/workflows/docker.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/workflow.data.preparation/actions/workflows/docker.yml?query=branch%3Amain) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fworkflow.data.preparation%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/workflow.data.preparation/blob/main/.github/CODEOWNERS) | +| [workflow.transition.monitor](https://rmi-pacta.github.io/workflow.transition.monitor/) | [![](https://lifecycle.r-lib.org/reference/figures/lifecycle-stable.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) | [![](https://github.com/RMI-PACTA/workflow.transition.monitor/actions/workflows/build-Docker-image-triggers.yml/badge.svg?branch=main)](https://github.com/RMI-PACTA/workflow.transition.monitor/actions/workflows/build-Docker-image-triggers.yml?query=branch%3Amain) | [![](https://img.shields.io/badge/dynamic/json?label=codeowner&query=codeownerInfo.ownersForFile&url=https%3A%2F%2Fgithub.com%2Frmi-pacta%2Fworkflow.transition.monitor%2Fdeferred-metadata%2Fmain%2F.github%2FCODEOWNERS)](https://github.com/RMI-PACTA/workflow.transition.monitor/blob/main/.github/CODEOWNERS) | diff --git a/man/generate_package_table.Rd b/man/generate_package_table.Rd index c7d931a..b257fd3 100644 --- a/man/generate_package_table.Rd +++ b/man/generate_package_table.Rd @@ -1,29 +1,41 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/generate_package_table.R +% Please edit documentation in R/generate_badge_tables.R \name{generate_package_table} \alias{generate_package_table} \title{Generate a table with R package information} \usage{ -generate_package_table(repo_paths) +generate_package_table(repo_vectors) } \arguments{ -\item{repo_paths}{A character vector with GH paths to the R package -repositories} -} -\value{ -A tibble with the following columns: +\item{repo_vectors}{A list of named character vectors. Each character vector +should contain: \itemize{ -\item Repo -\item Lifecycle -\item Status -\item Test_Coverage -\item Latest_SHA -\item Maintainer +\item path - the shortpath to the GitHub repository, including organization +(e.g. "RMI-PACTA/r2dii.data") +\item lifecycle - the lifecycle badge status (e.g. "stable", "experimental") +\item ci_check - the name of the CI check file (e.g. "R-CMD-check.yaml") +}} } +\value{ +A formatted sitrep tibble. } \description{ Generate a table with R package information } \examples{ -generate_package_table(c("RMI-PACTA/r2dii.data", "RMI-PACTA/r2dii.match")) + +repos <- list( + c( + path = "RMI-PACTA/r2dii.data", + lifecycle = "stable", + ci_check = "R-CMD-check.yaml" + ), + c( + path = "RMI-PACTA/r2dii.plot", + lifecycle = "stable", + ci_check = "R.yml" + ) +) + +generate_package_table(repos) } diff --git a/man/generate_workflow_table.Rd b/man/generate_workflow_table.Rd index 3a71641..b1174e0 100644 --- a/man/generate_workflow_table.Rd +++ b/man/generate_workflow_table.Rd @@ -1,28 +1,42 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/generate_workflow_table.R +% Please edit documentation in R/generate_badge_tables.R \name{generate_workflow_table} \alias{generate_workflow_table} -\title{Generate a table with worfklow information} +\title{Generate a table with workflow information} \usage{ -generate_workflow_table(repo_paths) +generate_workflow_table(repo_vectors) } \arguments{ -\item{repo_paths}{A character vector with GH paths to the workflow -repositories} -} -\value{ -A tibble with the following columns: +\item{repo_vectors}{A list of named character vectors. Each character vector +should contain: \itemize{ -\item Repo -\item Lifecycle -\item Docker Status -\item Latest_SHA -\item Maintainer +\item path - the shortpath to the GitHub repository, including organization +(e.g. "RMI-PACTA/workflow.transition.monitor") +\item lifecycle - the lifecycle badge status (e.g. "stable", "experimental") +\item ci_check - the name of the CI check file +(e.g. "build-Docker-image-triggers.yml") +}} } +\value{ +A formatted sitrep tibble. } \description{ -Generate a table with worfklow information +Generate a table with workflow information } \examples{ -generate_workflow_table("RMI-PACTA/workflow.transition.monitor") + +repos <- list( + c( + path = "RMI-PACTA/workflow.transition.monitor", + lifecycle = "stable", + ci_check = "build-Docker-image-triggers.yml" + ), + c( + path = "RMI-PACTA/workflow.data.preparation", + lifecycle = "stable", + ci_check = "docker.yml" + ) +) + +generate_workflow_table(repos) } diff --git a/tests/testthat/test-generate_package_table.R b/tests/testthat/test-generate_package_table.R index 391a554..939a898 100644 --- a/tests/testthat/test-generate_package_table.R +++ b/tests/testthat/test-generate_package_table.R @@ -1,20 +1,26 @@ library(testthat) library(dplyr) -pacta_r_package_path <- "RMI-PACTA/pacta.r.package" +pacta_r_package_path <- list( + c( + path = "RMI-PACTA/r2dii.data", + lifecycle = "stable", + ci_check = "R.yml" + ) +) test_that("returns correct structure and data", { result <- generate_package_table(pacta_r_package_path) - expected_names <- c("Repo", "Lifecycle", "Status", "Latest_SHA", "Maintainer") + expected_names <- c( + "name", + "lifecycle", + "status", + "coverage", + "version", + "maintainer" + ) expect_true(tibble::is_tibble(result)) expect_equal(ncol(result), 6) expect_true(all(expected_names %in% names(result))) }) - -test_that("handles empty input", { - empty_input <- character(0) - result <- generate_package_table(empty_input) - - expect_true(tibble::is_tibble(result) && nrow(result) == 0) -})