ropensci-review-tools / roreviewapi

API endpoint for package reviews via ropensci-review-bot
https://docs.ropensci.org/roreviewapi
4 stars 1 forks source link

Pre-install Julia #28

Closed mpadge closed 2 years ago

mpadge commented 2 years ago

@s3alfisc has now submitted first package which calls external Julia routines. Pre-install via main pkgcheck docker image is easy via apt, but current Ubuntu 20.04 distributes Julia v1.4.1, while actual Julia is 1.7.3.

@s3alfisc Have you got any ideas or opinions as to differences between 1.4 -> 1.7? Hopefully not too much difference, so we can presume that not-exactly-current Ubuntu apt version will always suffice, but I've no idea, and presume you know more about this. Opinions please :+1: Also ping @adamhsparks

s3alfisc commented 2 years ago

Hi Mark, I am far from a Julia expert, so I cannot really comment on any changes between 1.4.1 and 1.7.3. The unit tests for fwildclusterboot might fail under 1.4.1, as WildBootTests.jl depends on Julia 1.7.2.

After thinking a little bit more about unit tests that depend on other languages, I believe that it is more convenient to 'hard code' return values into testing scripts instead of actively calling the other language in a CI system. The advantage is that unit tests will not fail. - if e.g. a bug were to be introduced to WildBootTests.jl, I can still properly test fwildclusterboot on any CI system and even on CRAN if values are hard-coded. The statsmodels package e.g. implements tests in this style.

For actual wrapper package, this is instead a drawback, as I in fact want to know when WildBootTests.jl fails. So my recommendation - and what I in fact plan to implement - is to have both (even if it is a lot of work): tests with hard coded values that I will run on CRAN and github actions, and equivalent tests that run Julia / WildBootTests.jl on CI but skip the tests in all environments where Julia is not installed.

adamhsparks commented 2 years ago

Yeah, I’m far from an expert, but my first thought was also compatibility issues with the version for the direct Julia code or dependencies as @s3alfisc mentioned.

mpadge commented 2 years ago

Unfortuantely, Julia doesn't have or use a dynamic URL to latest release, so direct downloads from julialang.org require hard-coding specific versions, which makes that out for long-term maintenance. Luckily, they also seem to officially suport a cross-platform installer, jill.py for latest stable Julia. Full steps (from official Julia platform-specific instructions):

  1. apt install python3 python3-pip
  2. pip install jill
  3. jill install --confirm
mpadge commented 2 years ago

@s3alfisc The above commit adds latest Julia (currently 1.7.3) to our base container. That itself gets rebuilt at least monthly, so will always be up-to-date. Those changes won't propagate across to our internal system until scheduled rebuild next week (5th July), after which your Julia tests should all work. You should still add control flags througout to avoid fails on systems which don't have Julia, such as all CRAN systems.