feat: R-minor-sensitive binary builds (full + iterative) #84

Merged
pat-s merged 15 commits from t3code/69b1319c into main 2026-06-14 08:04:41 +00:00
Owner

Summary

Builds R-minor-sensitive CRAN packages once per installed R minor version (into per-minor S3 slots …/contrib/<x.y>/) and everything else once into the generic slot, driven by bincraft 4.2.0's ABI classifier. Both the full and iterative pipelines are covered.

What's in here

Detection / precompute

  • local/r-minor-helpers.R — pure classify_from_metadata() (NeedsCompilation / risky LinkingTo) + parse_build_args(), with unit tests.
  • local/packages-to-build.R — adds a per-package r_minor_sensitive flag: cheap CRAN-metadata rules first, source download + bincraft::needs_per_minor_recompile() only for the ambiguous compiled subset (fail-safe to sensitive). Classified once per package, applied to all versions.

Full build

  • local/build-all.R — passes the per-row is_r_minor_sensitive flag; new --sensitive-only mode builds just the risky subset.
  • .crow/build-all-versions-{amd64,arm64}.yaml — install-deps persists the sensitive subset; build step runs a sensitive-only pass under each non-primary /opt/R/* minor; new step uploads the generic index plus a per-minor index for each minor.

Iterative build

  • All 14 .crow/process-updates-*.yaml — primary pass uses r_minor_detection = 'classifier'; a sensitive-only multi-R pass builds risky updates under each other minor; per-minor index upload added.

Tooling / housekeeping

  • Pins bincraft v4.1.1v4.2.0 across all workflows; removes the superseded standalone build-r-minor-sensitive-packages.yaml.
  • Adds prek/pre-commit hooks (prettier, markdownlint, editorconfig-checker, yamllint, air) and applies them repo-wide; excludes the verbatim GPL LICENSE.md and auxiliary shell scripts.
  • Design + implementation docs under docs/superpowers/.

Requires before merge

  • A v4.2.0 git tag must be pushed on the bincraft repo (codefloe.com/rpkgs/bincraft) — the workflow install steps pin @v4.2.0. The full-build install-deps clones main, so it is unaffected.
## Summary Builds R-minor-sensitive CRAN packages once per installed R minor version (into per-minor S3 slots `…/contrib/<x.y>/`) and everything else once into the generic slot, driven by bincraft 4.2.0's ABI classifier. Both the full and iterative pipelines are covered. ## What's in here **Detection / precompute** - `local/r-minor-helpers.R` — pure `classify_from_metadata()` (NeedsCompilation / risky `LinkingTo`) + `parse_build_args()`, with unit tests. - `local/packages-to-build.R` — adds a per-package `r_minor_sensitive` flag: cheap CRAN-metadata rules first, source download + `bincraft::needs_per_minor_recompile()` only for the ambiguous compiled subset (fail-safe to sensitive). Classified once per package, applied to all versions. **Full build** - `local/build-all.R` — passes the per-row `is_r_minor_sensitive` flag; new `--sensitive-only` mode builds just the risky subset. - `.crow/build-all-versions-{amd64,arm64}.yaml` — install-deps persists the sensitive subset; build step runs a sensitive-only pass under each non-primary `/opt/R/*` minor; new step uploads the generic index plus a per-minor index for each minor. **Iterative build** - All 14 `.crow/process-updates-*.yaml` — primary pass uses `r_minor_detection = 'classifier'`; a sensitive-only multi-R pass builds risky updates under each other minor; per-minor index upload added. **Tooling / housekeeping** - Pins bincraft `v4.1.1` → `v4.2.0` across all workflows; removes the superseded standalone `build-r-minor-sensitive-packages.yaml`. - Adds prek/pre-commit hooks (prettier, markdownlint, editorconfig-checker, yamllint, air) and applies them repo-wide; excludes the verbatim GPL `LICENSE.md` and auxiliary shell scripts. - Design + implementation docs under `docs/superpowers/`. ## Requires before merge - A `v4.2.0` git tag must be pushed on the bincraft repo (codefloe.com/rpkgs/bincraft) — the workflow install steps pin `@v4.2.0`. The full-build install-deps clones `main`, so it is unaffected.
Spec for integrating bincraft's ABI classifier (PR #49) into the iterative
and full build pipelines so only R-minor-sensitive packages are built per
installed R minor, leveraging the multi-R exec-env images.
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.
Bumps the bincraft git-tag pin and version guard from v4.1.1 to v4.2.0 across
all .crow workflows, removes .crow/build-r-minor-sensitive-packages.yaml (now
superseded by the integrated full + iterative flow), and drops its now-orphaned
hook-exclude entries.
Resolve process-updates conflicts: keep main's simplified cache-cleanup
(#76) and this branch's bincraft v4.2.0 pin + classifier/multi-R additions.
pat-s merged commit d558e27c11 into main 2026-06-14 08:04:41 +00:00
pat-s deleted branch t3code/69b1319c 2026-06-14 08:04:41 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
devxy/build-cran-binaries!84
No description provided.