on: workflow_dispatch: push: branches: - master - main pull_request: branches: - master - main release: types: [published, created, edited] permissions: contents: read name: mlpack.mlpack jobs: jobR: name: mlpack R tarball if: ${{ github.repository == 'mlpack/mlpack' }} runs-on: ubuntu-latest outputs: r_bindings: ${{ steps.mlpack_version.outputs.mlpack_r_package }} steps: - uses: actions/checkout@v3 - name: Extract mlpack version id: mlpack_version run: | MLPACK_VERSION_MAJOR=$(grep -i ".*#define MLPACK_VERSION_MAJOR.*" src/mlpack/core/util/version.hpp | grep -o "[0-9]*") MLPACK_VERSION_MINOR=$(grep -i ".*#define MLPACK_VERSION_MINOR.*" src/mlpack/core/util/version.hpp | grep -o "[0-9]*") MLPACK_VERSION_PATCH=$(grep -i ".*#define MLPACK_VERSION_PATCH.*" src/mlpack/core/util/version.hpp | grep -o "[0-9]*") MLPACK_VERSION_VALUE=${MLPACK_VERSION_MAJOR}.${MLPACK_VERSION_MINOR}.${MLPACK_VERSION_PATCH} echo ::set-output name=mlpack_r_package::$(echo mlpack_"$MLPACK_VERSION_VALUE".tar.gz) # Setup Pandoc - uses: r-lib/actions/setup-pandoc@v2 # Setup R actions - uses: r-lib/actions/setup-r@v2 - name: Query dependencies run: | cp src/mlpack/bindings/R/mlpack/DESCRIPTION.in DESCRIPTION Rscript -e "install.packages('remotes')" -e "saveRDS(remotes::dev_package_deps(dependencies = TRUE), 'depends.Rds')" - name: Cache R packages if: runner.os != 'Windows' && runner.os != 'macOS' uses: actions/cache@v3 with: path: ${{ env.R_LIBS_USER }} key: ${{ runner.os }}-r-release-${{ hashFiles('depends.Rds') }} restore-keys: ${{ runner.os }}-r-release- - name: Install Build Dependencies run: | sudo apt-get update # We don't install cereal via apt, because the Debian packagers # split the rapidjson dependency into a separate package. We will # bundle the cereal sources with the R package, so we want them to # be exactly the upstream sources (with rapidjson included). sudo apt-get install -y --allow-unauthenticated libopenblas-dev liblapack-dev g++ libensmallen-dev libhdf5-dev libarmadillo-dev libcurl4-openssl-dev wget https://github.com/USCiLab/cereal/archive/refs/tags/v1.3.2.tar.gz tar -xvzpf v1.3.2.tar.gz # These directives cause warnings on CRAN: # https://github.com/USCiLab/cereal/blob/master/include/cereal/external/base64.hpp#L28-L31 # The command below comments them out. sed -i 's|#pragma|// #pragma|' cereal-1.3.2/include/cereal/external/base64.hpp - name: Install R-bindings dependencies run: | remotes::install_deps(dependencies = TRUE) remotes::install_cran("roxygen2") remotes::install_cran("pkgbuild") shell: Rscript {0} - name: CMake run: | mkdir build cd build && cmake -DDEBUG=OFF -DPROFILE=OFF -DBUILD_CLI_EXECUTABLES=OFF -DBUILD_PYTHON_BINDINGS=OFF -DBUILD_JULIA_BINDINGS=OFF -DBUILD_GO_BINDINGS=OFF -DBUILD_R_BINDINGS=ON -DDOWNLOAD_DEPENDENCIES=ON -DBUILD_TESTS=ON -DCEREAL_INCLUDE_DIR=../cereal-1.3.2/include/ .. - name: Build run: | cd build && make - name: Run tests via ctest run: | cd build && CTEST_OUTPUT_ON_FAILURE=1 ctest -T Test . - name: Upload R packages uses: actions/upload-artifact@v3 with: name: mlpack_r_tarball path: build/src/mlpack/bindings/R/${{ steps.mlpack_version.outputs.mlpack_r_package }} R-CMD-check: needs: jobR runs-on: ${{ matrix.config.os }} name: ${{ matrix.config.name }} if: ${{ github.repository == 'mlpack/mlpack' }} strategy: fail-fast: false matrix: config: - {os: windows-latest, r: 'release', name: 'Windows R'} - {os: macOS-latest, r: 'release', name: 'macOS R'} - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release', name: 'Linux R'} env: MAKEFLAGS: "-j 2" R_BUILD_ARGS: "--no-build-vignettes" R_CHECK_ARGS: "--no-build-vignettes" _R_CHECK_FORCE_SUGGESTS: 0 R_REMOTES_NO_ERRORS_FROM_WARNINGS: true GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} R_KEEP_PKG_SOURCE: yes steps: - uses: actions/download-artifact@v2 with: name: mlpack_r_tarball - uses: r-lib/actions/setup-pandoc@v2 - uses: r-lib/actions/setup-r@v2 with: r-version: ${{ matrix.config.r }} http-user-agent: ${{ matrix.config.http-user-agent }} use-public-rspm: true - name: Query dependencies run: Rscript -e "install.packages('remotes')" -e "saveRDS(remotes::dev_package_deps('${{ needs.jobR.outputs.r_bindings }}', dependencies = TRUE), 'depends.Rds')" - name: Cache R packages if: runner.os != 'Windows' && runner.os != 'macOS' uses: actions/cache@v1 with: path: ${{ env.R_LIBS_USER }} key: ${{ runner.os }}-r-${{ matrix.config.r }}-${{ hashFiles('depends.Rds') }} restore-keys: ${{ runner.os }}-r-${{ matrix.config.r }}- - name: Install check dependencies if: runner.os != 'Windows' && runner.os != 'macOS' run: | sudo apt-get update sudo apt-get install -y --allow-unauthenticated libcurl4-openssl-dev - name: Install dependencies run: | install.packages('remotes') remotes::install_deps('${{ needs.jobR.outputs.r_bindings }}', dependencies = TRUE) remotes::install_cran("rcmdcheck") shell: Rscript {0} - name: Check run: Rscript -e "rcmdcheck::rcmdcheck('${{ needs.jobR.outputs.r_bindings }}', args = c('--no-manual','--as-cran'), error_on = 'warning', check_dir = 'check')" - name: Upload check results if: failure() uses: actions/upload-artifact@v3 with: name: ${{ runner.os }}-r${{ matrix.config.r }}-results path: | check/mlpack.Rcheck/00check.log check/mlpack.Rcheck/00install.out