docs: implementation plans for R-minor-sensitive builds
Split into two sequenced plans: bincraft 4.2.0 enhancements (per-minor index + classifier-driven process_cran_updates) and the pipeline integration (full + iterative). Spec revised to classify at the orchestration layer instead of a build_binary_package "auto" mode.
This commit is contained in:
parent
59c3e0960c
commit
d328f261d2
1 changed files with 962 additions and 14 deletions
|
|
@ -103,22 +103,29 @@ Driven by the bincraft enhancement below; the single build step becomes:
|
|||
|
||||
## Required bincraft enhancements (separate PR, coordinated release)
|
||||
|
||||
1. `build_binary_package()`:
|
||||
- Accept `is_r_minor_sensitive = "auto"` — classify the source it already clones via
|
||||
`abi_classify()` and route the artifact to the per-minor slot iff `risky`.
|
||||
- Add `r_minor_sensitive_only` — when `TRUE`, skip (return `"skipped"`) non-risky
|
||||
packages early, after classification, before building.
|
||||
2. `process_cran_updates()`:
|
||||
`build_binary_package()` needs **no change** — it already accepts a concrete
|
||||
`is_r_minor_sensitive` logical and routes the slot accordingly. Classification stays at
|
||||
the orchestration layer (mirroring the full-build precompute), which keeps
|
||||
`build_binary_package`'s pre-build S3 skip-check and source clone untouched.
|
||||
|
||||
1. `process_cran_updates()`:
|
||||
- Add `r_minor_detection = c("none", "issue", "classifier")` (default `"none"` to
|
||||
preserve current behavior; `"issue"` is today's `filter_r_minor_sensitive` path).
|
||||
- Add `r_minor_sensitive_only`, threaded down to `build_binary_package()`.
|
||||
- With `"classifier"`, pass `is_r_minor_sensitive = "auto"` per package instead of a
|
||||
single run-wide bool.
|
||||
3. `upload_package_index()`:
|
||||
- Add per-minor slot support: write/upload `PACKAGES*` (and `Meta/archive.rds`) under
|
||||
`…/contrib/<major.minor>/`, mirroring the generic-slot logic. Invocable per minor.
|
||||
- Add `r_minor_sensitive_only` (default `FALSE`).
|
||||
- With `"classifier"`: for each candidate `(name, version)`, clone the source to a temp
|
||||
dir and call `bincraft::needs_per_minor_recompile()`; pass the resulting concrete
|
||||
logical as `is_r_minor_sensitive` to `build_binary_package()`. When
|
||||
`r_minor_sensitive_only = TRUE`, drop non-risky candidates before building.
|
||||
- Implemented via a small internal helper `classify_r_minor_sensitive(name, tag,
|
||||
source_org_url, local_clone_dir)` returning a logical — the unit-testable seam.
|
||||
2. `upload_package_index()`:
|
||||
- Add an `r_minor = NULL` argument. When non-NULL (e.g. `"4.4"`), point the remote dir
|
||||
at `…/contrib/<r_minor>/` and write/upload `PACKAGES*` (and `Meta/archive.rds`) there,
|
||||
mirroring the generic-slot logic. Extract the remote-dir construction into a pure
|
||||
helper `package_index_remote_dir(s3_bucket, arch, codename, r_minor = NULL)` — the
|
||||
unit-testable seam.
|
||||
|
||||
These three are the only bincraft changes; detection itself (PR #49) is already merged.
|
||||
These two are the only bincraft changes; detection itself (PR #49) is already merged.
|
||||
|
||||
## Scope and cleanup
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue