* First attempt at GHA CI instead of Azure Pipelines. * Could I have the matrix config wrong? * Oh, oops, I was just looking in the wrong place for the GHA log. * Disable Azure Pipelines Linux job. * Fix some additional small syntax errors. * Minor updates. * Try to figure out what is happening with this test! * Ha, actually remember the argument. * Try to parse the CTest results. * Don't build CLI programs for the debug-only mlpack_test build. * Try to figure out why we don't have the CTest output file. * Seems like maybe the test just needs more iterations. * Fix directory for CTest output. * Try running mlpack_test manually to see if we get better test output. * Remove version numbers and other non-XML from XML output test file. * Try to fix debug build. * Filtering regex. * Try to fail the build when the tests fail. * Minor fixes and cleanups to run Python binding tests. * Print test failure information in the actual build step. * Update Julia testing strategy. * Try to also get outputs from other test bindings. * Fix Julia and Go testing blocks. * Avoid random collisions that cause test failures. * Try moving splitting into the trial loop. * Try a different test reporter action. * Install pytest for Python tests. * Fix working directory for Julia test. * Add test case that will fail to see what it looks like. * Back to the old action, the new one I tried didn't do what I needed. * Try a better way to print the test output. * I still don't know how to mark the job failed yet. * Maybe this stdout character works better. * Try a forked test-summary action. * Try to use distribution version of the modified action. * Try to see if ccache is doing anything. * Always run ccache stats step. * Turn off PCH for ccache. * Let's just see what it looks like with more error output. * Clean up ccache configuration. * Remove fake test because it seems like now I have the output working right. * Try to reduce file size by not printing debug output into it. * Try and refactor binding environment seutp into a composite local action. * Try to fix some syntactical errors. * Refactor test running into a separate composite action. * Start trying to make the R build part of the main CI build. * Oops, the include directory was in the wrong place. * Try actually running R tests in the workflow too. * Try to fix a few action issues. * Try to work around libicu issue. * Remove unnecessary option. * Try to run OS X builds too. * Try to fix matrix configuration. * Revert "Try to fix matrix configuration." This reverts commit 22a08d6dcd0d39de0a27f2df16e885bd68e18fda. * Oops, maybe it was just an extra comma. * Fix naming, and maybe we have to remove stringi first. * Try to set Julia location correctly. * Some fixes to the pipelines. * Oops, I need root for that. * Some additional fixes for jobs. * Hopefully fix a few more builds. * What, how did that get there? * Don't use non-portable -i option with sed. * Run R tests properly to get junit output. * Oops, I have to redirect the output. * Where is the output file? * Try to fix macOS Python location. * Oops, ROOTDIR is just not set. * Try to store the name of the R package correctly. * Oops, we need to specify pip. * Try to get the right directory for the R package. * Try to fix another round of issues. I'm getting closer, at least. * Okay, fine, let's do it the brutalistic way. * What is actually happening with the Go binding tests? * Try a different strategy for printing. * Make some updates to prepare for Windows builds. * What's the output of go test? * Remove -Wall as per golang/go#6883. * Try to fix duplicate library warning. * Maybe I just specified the variable in an invalid way that didn't stick? * This should fix the Go build. * How did that cd go missing? * Try to remove DEBUG output from the debug tests. * Try to be more specific about the ccache key. * Oops, incorrect variable name. * Try to speed up the testing step. * Try to run the Windows build through GHA. * Try to install locally to deps/. * Try to install and set up Windows dependencies correctly. * Try to debug Windows build. * Use bash for CMake configuration. * Some additional path fixes. * A couple fixes, but I don't have the Armadillo path right. * Fix curl command. * Maybe this is closer to the right path... * Okay, look one directory deeper... * Temporarily print STB compilation failure. * Try to use absolute path for STB inclusion test. * Oops, fix syntax. * Try using REALPATH instead. * Try just skipping the check... * Try specifying BLAS and LAPACK locations directly. * Try to figure out what is going on. * Are we even using the correct FindArmadillo script? * Try specifying the libraries manually. * Try disabling the wrapper library. * What version of CMake is this? * Print the configuration. * What if we specify these library locations? * Double-check: this should fail. * Okay, that actually surprisingly did not fail. * Fix style issues. * Compress into only one GHA file so all the jobs show up in the same place. * Try to use absolute path to OpenBLAS. * Try to fix path mangling on Windows. * Fix STB path and no PS please. * Try to fix output on Windows tests. * Call test from the right place. * Remove some unnecessary output. * Try just running the test. * What is going on, why doesn't the test run? * Try just running the test with PowerShell. * Maybe I have the filename wrong? * PowerShell makes me angry... * Right, .exe is the suffix... * I love PowerShell! * Okay, forget PowerShell. * Can we even run the test? * Is it a DLL search path issue? * Okay, I think this might work for Windows. * Fix porting of new r2u/p3m workflow (hopefully). * Fix possibly incorrect variable name. * Reduce the number of macOS jobs. * Fix name of job. * Remove potentially unnecessary step. * Document CI changes and reorganize jobs for better viewing. * Remove invalid link. (Awesome that the link check build picked this up.)
101 lines
3.9 KiB
YAML
101 lines
3.9 KiB
YAML
# This action sets up any language-specific environment for any of mlpack's
|
|
# bindings.
|
|
name: "Run binding tests"
|
|
description: "Run tests for mlpack's bindings to other languages and gather results in junit format."
|
|
inputs:
|
|
lang:
|
|
required: true
|
|
description: "The language to run binding tests for."
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
#
|
|
# Python bindings.
|
|
#
|
|
- name: "Run Python binding tests"
|
|
if: inputs.lang == 'Python'
|
|
shell: bash
|
|
run: |
|
|
# Run manually instead of through CTest so we can get XML output.
|
|
ROOTDIR=`pwd`;
|
|
cd build/src/mlpack/bindings/python/
|
|
python3 -m pytest tests/ --junit-xml="$ROOTDIR/build/python_bindings.junit.xml"
|
|
|
|
#
|
|
# Julia bindings.
|
|
#
|
|
- name: "Run Julia binding tests"
|
|
if: inputs.lang == 'Julia'
|
|
shell: bash
|
|
run: |
|
|
# Run manually instead of through CTest so we can get XML output.
|
|
# We use the TestReports.jl package for getting output in the right
|
|
# format.
|
|
ROOTDIR=`pwd`;
|
|
cd build/src/mlpack/bindings/julia/mlpack/
|
|
JULIA_PROJECT=$PWD $JULIA_EXECUTABLE -e \
|
|
"using Pkg; Pkg.add(\"TestReports\"); using TestReports; TestReports.test(\"mlpack\")"
|
|
mv testlog.xml $ROOTDIR/build/julia_bindings.junit.xml
|
|
|
|
#
|
|
# R bindings.
|
|
#
|
|
- name: "Run R binding tests"
|
|
if: inputs.lang == 'R'
|
|
shell: bash
|
|
run: |
|
|
ROOTDIR=`pwd`;
|
|
cd build/src/mlpack/bindings/R/mlpack/
|
|
Rscript -e "library(pkgload); load_all('.'); library(testthat); options(testthat.output_file='r_bindings.junit.xml'); test_file('tests/testthat/test-R_binding.R', reporter = 'junit')"
|
|
mv tests/testthat/r_bindings.junit.xml $ROOTDIR/build/r_bindings.junit.xml
|
|
|
|
- name: "Upload R package artifact"
|
|
if: inputs.lang == 'R' && runner.os == 'Linux' # Only upload one tarball.
|
|
uses: actions/upload-artifact@v4.4.0
|
|
with:
|
|
name: mlpack_r_tarball
|
|
path: build/src/mlpack/bindings/R/${{ env.MLPACK_R_PACKAGE }}
|
|
|
|
- name: "Install R CMD check dependencies"
|
|
if: inputs.lang == 'R'
|
|
shell: Rscript {0}
|
|
run: |
|
|
install.packages(c('remotes', 'rcmdcheck', 'curl'))
|
|
remotes::install_deps('build/src/mlpack/bindings/R/${{ env.MLPACK_R_PACKAGE }}', dependencies = TRUE)
|
|
|
|
- name: "Run R CMD check"
|
|
if: inputs.lang == 'R'
|
|
shell: bash
|
|
# TODO: revert to error_on = 'warning'
|
|
run: Rscript -e "rcmdcheck::rcmdcheck('build/src/mlpack/bindings/R/${{ env.MLPACK_R_PACKAGE }}', args = c('--no-manual', '--as-cran'), error_on = 'error', check_dir = 'check')"
|
|
|
|
# TODO: upload check results on failure
|
|
|
|
#
|
|
# Go bindings.
|
|
#
|
|
- name: "Run Go binding tests (Linux)"
|
|
if: inputs.lang == 'Go' && runner.os == 'Linux'
|
|
shell: bash
|
|
run: |
|
|
# Run manually instead of through CTest so we can get XML output (via
|
|
# an extra tool).
|
|
go install github.com/jstemmer/go-junit-report/v2@latest
|
|
ROOTDIR=`pwd`;
|
|
cd build/src/mlpack/bindings/go/src/mlpack.org/v1/mlpack/
|
|
go test -v $ROOTDIR/src/mlpack/bindings/go/tests/go_binding_test.go 2>&1 |\
|
|
$HOME/go/bin/go-junit-report | tee $ROOTDIR/build/go_bindings.junit.xml;
|
|
|
|
- name: "Run Go binding tests (macOS)"
|
|
if: inputs.lang == 'Go' && runner.os == 'macOS'
|
|
shell: bash
|
|
run: |
|
|
# Run manually instead of through CTest so we can get XML output (via
|
|
# an extra tool).
|
|
go install github.com/jstemmer/go-junit-report/v2@latest
|
|
ROOTDIR=`pwd`;
|
|
cd build/src/mlpack/bindings/go/src/mlpack.org/v1/mlpack/
|
|
CGO_LDFLAGS="-Wl,-no_warn_duplicate_libraries" go test -v $ROOTDIR/src/mlpack/bindings/go/tests/go_binding_test.go 2>&1 |\
|
|
$HOME/go/bin/go-junit-report | tee $ROOTDIR/build/go_bindings.junit.xml;
|