Building CRAN binaries for rpkgs.com
- R 77.4%
- Shell 8.6%
- TypeScript 7%
- HCL 3.5%
- Just 1.8%
- Other 1.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Welcome to [Renovate](https://github.com/renovatebot/renovate)! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin. 🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged. --- ### Detected Package Files * `docker/Dockerfile-ubi9` (dockerfile) * `docker/Dockerfile.rhel8` (dockerfile) * `.woodpecker/build.yaml` (woodpecker) * `.woodpecker/images.yaml` (woodpecker) ### Configuration Summary Based on the default config's presets, Renovate will: - Start dependency updates only once this onboarding PR is merged - Enable Renovate Dependency Dashboard creation. - Use semantic commit type `fix` for dependencies and `chore` for all others if semantic commits are in use. - Ignore `node_modules`, `bower_components`, `vendor` and various test/tests directories. - Group known monorepo packages together. - Use curated list of recommended non-monorepo package groupings. - Apply crowd-sourced package replacement rules. - Apply crowd-sourced workarounds for known problems with packages. - Run lock file maintenance (updates) early Monday mornings. - Schedule automerge daily. - Schedule for weekends. - Enable Renovate Dependency Dashboard creation. - Use semantic commit type `fix` for dependencies and `chore` for all others if semantic commits are in use. - Ignore `node_modules`, `bower_components`, `vendor` and various test/tests directories. - Group known monorepo packages together. - Use curated list of recommended non-monorepo package groupings. - Apply crowd-sourced package replacement rules. - Apply crowd-sourced workarounds for known problems with packages. - Run lock file maintenance (updates) early Monday mornings. - Schedule automerge daily. - Schedule for weekends. - Run Renovate on following schedule: every weekend 🔡 Do you want to change how Renovate upgrades your dependencies? Add your custom config to `renovate.json` in this branch. Renovate will update the Pull Request description the next time it runs. --- ### What to Expect It looks like your repository dependencies are already up-to-date and no Pull Requests will be necessary right away. --- ❓ Got questions? Check out Renovate's [Docs](https://docs.renovatebot.com/), particularly the Getting Started section. If you need any further assistance then you can also [request help here](https://github.com/renovatebot/renovate/discussions). --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-config-hash:5194d01a36db041d33badf95c91bbd2577f7875d668ecaa620d459efdda0b7ef--> Reviewed-on: devxy/arm64-r-binaries#6 Co-authored-by: automation-bot <no-reply@devxy.io> Co-committed-by: automation-bot <no-reply@devxy.io> |
||
| .woodpecker | ||
| docker | ||
| man | ||
| R | ||
| .editorconfig | ||
| .gitignore | ||
| .markdownlint.yaml | ||
| .prettierrc.json | ||
| .Rbuildignore | ||
| 04-create-archive-rds.sh | ||
| 05-get-updated-cran-pkgs.R | ||
| DESCRIPTION | ||
| Justfile | ||
| LICENSE.md | ||
| NAMESPACE | ||
| rBinaries.Rproj | ||
| README.md | ||
| renovate.json | ||
README
Workflow
- "Prepare"
- Install R interpreter
- Add required repos to resolve syslibs
- Install pak
- Install awscli for remote s3 sync
- "Build"
- For every package, do
- Clone from GitHub CRAN mirror
- Install all system dependencies via
pak::local_install_dev_deps() - Checkout each available tag
- Build binary package
- Create Archive/ directory
- Move all versions besides the most recent one to Archive/ (for source and binary)
- Create
PACKAGESmetadata file usingcranlikepackage - Store build metadata in sqlite DB
- For every package, do
- "Upload"
- Sync all binaries and sources to S3 bucket
-4-create-archive-rds.sh- Create
Meta/archive.rdsfile for each package so thatremotes::install_version()can install archived versions - Upload
Meta/archive.rdsto S3 bucket
- Create
Build metadata
The build metadata is stored in a sqlite database. The following tables are used:
metadatacontains the build metadata for each package:
| package_name | tag | platform | error_occurred | build_timestamp |
|---|
metadata_summarycontains aggregated build metadata for each package and platform:
| package_name | platform | successful_builds | unsuccessful_builds | total_builds | percentage_successful_builds | average_build_time_per_tag |
|---|
Support for archived versions
remotes::install_version()
remotes::install_version() is searching for a Meta/archive.rds file in the /src/contrib directory.
This file must be a list of dataframes containing the information about the archived versions of the package.
Example:
con <- gzcon(url(sprintf("%s/src/contrib/Meta/archive.rds",
c("CRAN" = "https://cloud.r-project.org")), "rb"))
foo = readRDS(con)
foo[[1]]
pak::pak(package@version)
pak searches for Archive/<package> and is able to install all versions existing there.
Ensure to use a clean cache if other repos have been used before, i.e. call pak::meta_clean(force = TRUE) if in doubt or when testing.
Platforms
The following platforms are supported:
- RHEL9
Lessons learned
- Newer R versions have issues compiling C code from older package Versions. Using an older R version to build the binaries is recommended.
- R 4.0.5 is used to build all binaries for R 4.x
- Binaries which cannot be built using R 4.0.5 often also require older system library or compiler versions and are out of scope for this project.
Platforms
- Identifier must match the ones used in https://github.com/rstudio/r-system-requirements to be picked up correctly by the automatic syslib dependency installer of
pak, more specifically by the env varPKG_SYSREQS_PLATFORM
Helpers
Check the row number of a package by name
pkgs = tools::CRAN_package_db()
which(pkgs$Package == "ABCanalysis")