73 lines
2.7 KiB
Markdown
73 lines
2.7 KiB
Markdown
# README
|
|
|
|
## Workflow
|
|
|
|
1. "Prepare"
|
|
1. Install R interpreter
|
|
2. Add required repos to resolve syslibs
|
|
3. Install pak
|
|
4. Install awscli for remote s3 sync
|
|
2. "Build"
|
|
1. For every package, do
|
|
1. Clone from GitHub CRAN mirror
|
|
2. Install all system dependencies via `pak::local_install_dev_deps()`
|
|
3. Checkout each available tag
|
|
<!-- 4. Build source package -->
|
|
4. Build binary package
|
|
5. Create Archive/ directory
|
|
6. Move all versions besides the most recent one to Archive/ (for source and binary)
|
|
7. Create `PACKAGES` metadata file using `cranlike` package
|
|
8. Store build metadata in sqlite DB
|
|
3. "Upload"
|
|
1. Sync all binaries and sources to S3 bucket
|
|
4. `-4-create-archive-rds.sh`
|
|
1. Create `Meta/archive.rds` file for each package so that `remotes::install_version()` can install archived versions
|
|
2. Upload `Meta/archive.rds` to S3 bucket
|
|
|
|
## Build metadata
|
|
|
|
The build metadata is stored in a sqlite database.
|
|
The following tables are used:
|
|
|
|
- `metadata` contains the build metadata for each package:
|
|
|
|
| package_name | tag | platform | error_occurred | build_timestamp |
|
|
| ------------ | --- | -------- | -------------- | --------------- |
|
|
|
|
- `metadata_summary` contains 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:
|
|
|
|
```r
|
|
|
|
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.
|