diff --git a/.github/workflows/test-pkgs.yaml b/.github/workflows/test-pkgs.yaml new file mode 100644 index 0000000..b8e477e --- /dev/null +++ b/.github/workflows/test-pkgs.yaml @@ -0,0 +1,58 @@ +on: + push: + branches: + - master + - pak + pull_request: + branches: + - master + +name: Test packages + +jobs: + packages: + runs-on: ubuntu-latest + outputs: + pkg_names: ${{ steps.set_pkg_names.outputs.pkg_names }} + steps: + - uses: actions/checkout@v2 + - id: set_pkg_names + # https://stackoverflow.com/a/32354503/591574 + run: | + PKGS=`ls packages | jq -R '[.]' | jq -s -c 'add'` + echo "::set-output name=pkg_names::$PKGS" + - name: debug + run: | + echo "${{ steps.set_pkg_names.outputs.pkg_names }}" + + test: + runs-on: ubuntu-latest + + name: ${{ matrix.pkg }} - ${{ matrix.docker_type }} + + needs: + - packages + strategy: + fail-fast: false + + # Test using independent docker containers + # Isolated testing so that a prior package doesn't "help" another package + matrix: + # Dynamic pkg names from the `./packages` folder + # https://github.blog/changelog/2020-04-15-github-actions-new-workflow-features/ + pkg: ${{ fromJson(needs.packages.outputs.pkg_names) }} + docker_type: + - focal + - xenial + + steps: + - uses: actions/checkout@v2 + + - name: Build docker image + run: | + make docker-build-${{ matrix.docker_type }} + + # Use dockerhub image + - name: "Test package: ${{ matrix.pkg }}" + run: | + make test-${{ matrix.docker_type }}-${{ matrix.pkg }} diff --git a/.gitignore b/.gitignore index a977916..fa088d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .vagrant/ +pak/lib diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d9b7917..0000000 --- a/.travis.yml +++ /dev/null @@ -1,11 +0,0 @@ -sudo: required - -services: - - docker - -env: - - TEST_OS=xenial - - TEST_OS=focal - -script: - - make test-all-$TEST_OS diff --git a/Dockerfile.xenial b/Dockerfile.xenial index 2718a19..87f1950 100644 --- a/Dockerfile.xenial +++ b/Dockerfile.xenial @@ -37,6 +37,7 @@ RUN apt-get update -qq && \ libgsl0-dev \ libmysqlclient-dev \ libnetcdf-dev \ + libpcre2-dev \ libprocps4-dev \ libproj-dev \ libprotoc-dev \ diff --git a/install b/install index 32b2cde..25ef825 100755 --- a/install +++ b/install @@ -18,23 +18,33 @@ DIR=`dirname $0` PACKAGES=$@ +echo " ***** SETUP..." | purple +# make sure apt-get is up to date +apt-get update -qq + +# install pak if it doesn't already exist +echo " ***** INSTALL PAK..." | purple +Rscript "$DIR/pak/setup.R" + for PACKAGE in $PACKAGES; do PACKAGE_DIR=$DIR/packages/$PACKAGE - if [ -f $PACKAGE_DIR/install ]; then - echo " ***** PACKAGE $PACKAGE" | purple + echo " ***** PACKAGE $PACKAGE" | purple - echo " ***** INSTALLING..." | purple + echo " ***** INSTALLING..." | purple + if [ -f $PACKAGE_DIR/install ]; then bash $PACKAGE_DIR/install + else + Rscript "$DIR/pak/install_sys_reqs.R" $PACKAGE + fi - return_code=$? - if [[ $return_code != 0 ]] ; then - echo "$PACKAGE... FAILED" | red - exit $return_code - else - echo "$PACKAGE... SUCCESS" | green - fi + return_code=$? + if [[ $return_code != 0 ]] ; then + echo "$PACKAGE... FAILED" | red + exit $return_code + else + echo "$PACKAGE... SUCCESS" | green fi done diff --git a/packages/Rglpk/install b/packages/Rglpk/install deleted file mode 100755 index 8cac1cc..0000000 --- a/packages/Rglpk/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libglpk-dev diff --git a/packages/Rglpk/placeholder.txt b/packages/Rglpk/placeholder.txt new file mode 100644 index 0000000..8ae74d7 --- /dev/null +++ b/packages/Rglpk/placeholder.txt @@ -0,0 +1 @@ +Used to keep folder alive diff --git a/packages/Rmpfr/install b/packages/Rmpfr/install deleted file mode 100644 index b12b8f8..0000000 --- a/packages/Rmpfr/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libmpfr-dev diff --git a/packages/V8/install b/packages/V8/install deleted file mode 100755 index e136d1f..0000000 --- a/packages/V8/install +++ /dev/null @@ -1 +0,0 @@ -apt-get -y install libv8-dev \ No newline at end of file diff --git a/packages/gsl/placeholder.txt b/packages/gsl/placeholder.txt new file mode 100644 index 0000000..8ae74d7 --- /dev/null +++ b/packages/gsl/placeholder.txt @@ -0,0 +1 @@ +Used to keep folder alive diff --git a/packages/pdftools/install b/packages/pdftools/install deleted file mode 100755 index 532f13b..0000000 --- a/packages/pdftools/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libpoppler-cpp-dev diff --git a/packages/rDEA/install b/packages/rDEA/install deleted file mode 100644 index 95584ff..0000000 --- a/packages/rDEA/install +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -apt-get update -qq -apt-get install -y libglpk-dev diff --git a/packages/rDEA/placeholder.txt b/packages/rDEA/placeholder.txt new file mode 100644 index 0000000..8ae74d7 --- /dev/null +++ b/packages/rDEA/placeholder.txt @@ -0,0 +1 @@ +Used to keep folder alive diff --git a/packages/rDEA/test.R b/packages/rDEA/test.R deleted file mode 100644 index a3e0446..0000000 --- a/packages/rDEA/test.R +++ /dev/null @@ -1,2 +0,0 @@ -options(download.file.method="curl") -install.packages("rDEA", repos="https://cran.rstudio.com") diff --git a/packages/ragg/install b/packages/ragg/install deleted file mode 100755 index 36b3022..0000000 --- a/packages/ragg/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev libharfbuzz-dev libfribidi-dev diff --git a/packages/redland/install b/packages/redland/install deleted file mode 100755 index cd696a6..0000000 --- a/packages/redland/install +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y librdf0-dev - diff --git a/packages/rgeos/install b/packages/rgeos/install deleted file mode 100644 index 6b7da85..0000000 --- a/packages/rgeos/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libgeos-dev diff --git a/packages/rgl/install b/packages/rgl/install deleted file mode 100755 index 25067ff..0000000 --- a/packages/rgl/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libgl1-mesa-dev libglu1-mesa-dev diff --git a/packages/rgl/placeholder.txt b/packages/rgl/placeholder.txt new file mode 100644 index 0000000..8ae74d7 --- /dev/null +++ b/packages/rgl/placeholder.txt @@ -0,0 +1 @@ +Used to keep folder alive diff --git a/packages/rsvg/install b/packages/rsvg/install deleted file mode 100755 index 9be77f2..0000000 --- a/packages/rsvg/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y librsvg2-dev diff --git a/packages/tesseract/install b/packages/tesseract/install deleted file mode 100755 index 4feac56..0000000 --- a/packages/tesseract/install +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -set -x -set -e - -apt-get update -qq -apt-get install -y libtesseract-dev libleptonica-dev tesseract-ocr-eng diff --git a/packages/textshaping/install b/packages/textshaping/install deleted file mode 100644 index f3d20c6..0000000 --- a/packages/textshaping/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libharfbuzz-dev libfribidi-dev diff --git a/packages/textshaping/test.R b/packages/textshaping/test.R deleted file mode 100644 index 5c5548f..0000000 --- a/packages/textshaping/test.R +++ /dev/null @@ -1,3 +0,0 @@ -options(download.file.method="curl") -install.packages("textshaping", repos="https://cran.rstudio.com") -textshaping::text_width("test string") diff --git a/packages/tiff/install b/packages/tiff/install deleted file mode 100755 index f0da1f9..0000000 --- a/packages/tiff/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libtiff-dev diff --git a/packages/tiff/placeholder.txt b/packages/tiff/placeholder.txt new file mode 100644 index 0000000..8ae74d7 --- /dev/null +++ b/packages/tiff/placeholder.txt @@ -0,0 +1 @@ +Used to keep folder alive diff --git a/packages/udunits2/install b/packages/udunits2/install deleted file mode 100644 index 052a85d..0000000 --- a/packages/udunits2/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libudunits2-dev diff --git a/packages/units/install b/packages/units/install deleted file mode 100644 index 052a85d..0000000 --- a/packages/units/install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -x -set -e - -apt-get update -qq -apt-get install -y libudunits2-dev diff --git a/pak/install_sys_reqs.R b/pak/install_sys_reqs.R new file mode 100644 index 0000000..767629c --- /dev/null +++ b/pak/install_sys_reqs.R @@ -0,0 +1,44 @@ +# Returns the file currently being sourced or run with Rscript +thisFile <- function() { + cmdArgs <- commandArgs(trailingOnly = FALSE) + needle <- "--file=" + match <- grep(needle, cmdArgs) + if (length(match) > 0) { + # Rscript + return(normalizePath(sub(needle, "", cmdArgs[match]))) + } else { + # 'source'd via R console + return(normalizePath(sys.frames()[[1]]$ofile)) + } +} +# set to `pak` folder +setwd(dirname(thisFile())) + +os <- tryCatch({ + system("lsb_release -sc", intern = TRUE) +}, error = function(e) { + "local" +}) + +args <- commandArgs(TRUE) +if (length(args) > 0) { + pkgs <- args + + # Must match install file + lib <- file.path("lib", os, paste0(R.Version()$major, ".", R.Version()$minor)) + # Load pak from our tmp lib + require("pak", character.only = TRUE, lib.loc = lib, quietly = TRUE) + # Prepend the pak lib path for sys req installation + # No pkg is actually being installed in this step + .libPaths( + c( + lib, + .libPaths() + ) + ) + + lapply(pkgs, function(pkg) { + pak::pkg_system_requirements(pkg, execute = TRUE, sudo = TRUE) + }) +} +invisible() diff --git a/pak/setup.R b/pak/setup.R new file mode 100644 index 0000000..3db650a --- /dev/null +++ b/pak/setup.R @@ -0,0 +1,40 @@ +# Returns the file currently being sourced or run with Rscript +thisFile <- function() { + cmdArgs <- commandArgs(trailingOnly = FALSE) + needle <- "--file=" + match <- grep(needle, cmdArgs) + if (length(match) > 0) { + # Rscript + return(normalizePath(sub(needle, "", cmdArgs[match]))) + } else { + # 'source'd via R console + return(normalizePath(sys.frames()[[1]]$ofile)) + } +} +# set to `pak` folder +setwd(dirname(thisFile())) + +os <- tryCatch({ + system("lsb_release -sc", intern = TRUE) +}, error = function(e) { + "local" +}) + +# Must match install file +lib <- file.path("lib", os, paste0(R.Version()$major, ".", R.Version()$minor)) +if (!dir.exists(lib)) { + dir.create(lib, recursive = TRUE) +} + +if (system.file(package = "pak", lib.loc = lib) == "") { + # install latest + install.packages("pak", repos = "https://r-lib.github.io/p/pak/dev/", lib = lib) + # quick test + require("pak", character.only = TRUE, lib.loc = lib, quietly = FALSE) + +} else { + # Load pak from our tmp lib + require("pak", character.only = TRUE, lib.loc = lib, quietly = TRUE) + # update to latest version + pak::pak_update() +} diff --git a/test b/test index 93f9a37..b1fd3a0 100755 --- a/test +++ b/test @@ -14,6 +14,10 @@ color_text () { echo -e -n "\033[0m" # clear the color } +echo " ***** SETUP..." | purple +# make sure apt-get is up to date +apt-get update -qq + # install ts command (used later in this script) apt-get install -qq -y moreutils @@ -25,34 +29,38 @@ else PACKAGES=$@ fi +# install pak if it doesn't already exist +echo " ***** INSTALL PAK..." | purple +Rscript "$DIR/pak/setup.R" | ts + for PACKAGE in $PACKAGES; do PACKAGE_DIR=$DIR/packages/$PACKAGE - if [ -f $PACKAGE_DIR/install ]; then - echo " ***** PACKAGE $PACKAGE" | purple + echo " ***** PACKAGE $PACKAGE" | purple - echo " ***** INSTALLING..." | purple + echo " ***** INSTALLING $PACKAGE..." | purple + if [ -f $PACKAGE_DIR/install ]; then bash $PACKAGE_DIR/install | ts + else + Rscript "$DIR/pak/install_sys_reqs.R" $PACKAGE | ts + fi - echo " ***** TESTING..." | purple - if [ -f $PACKAGE_DIR/test.R ]; then - sudo R --verbose -f $PACKAGE_DIR/test.R - else - sudo R -e "install.packages('$PACKAGE', repos='http://cran.rstudio.com/'); library('$PACKAGE')" - fi - - return_code=$? - if [[ $return_code != 0 ]] ; then - echo "$PACKAGE... FAILED" | red - exit $return_code - else - echo "$PACKAGE... SUCCESS" | green - fi + echo " ***** TESTING $PACKAGE..." | purple + if [ -f $PACKAGE_DIR/test.R ]; then + sudo R --verbose -f $PACKAGE_DIR/test.R else - echo "Unable to find '$PACKAGE' in $DIR/packages, exiting..." | red - exit 1 + sudo R -e "install.packages('$PACKAGE', repos='http://cran.rstudio.com/'); library('$PACKAGE')" fi + + return_code=$? + if [[ $return_code != 0 ]] ; then + echo "$PACKAGE... FAILED" | red + exit $return_code + else + echo "$PACKAGE... SUCCESS" | green + fi + done exit 0