From da174b8d06ce6e724b1abba2b7ad5e3b5b9cb705 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 11 Jul 2024 22:30:44 -0700 Subject: [PATCH] [ci] [R-package] add arm64 macOS R-package CI job (fixes #6481) (#6494) --- .ci/test_r_package.sh | 45 +++++++++++++++++++++++---------- .github/workflows/r_package.yml | 17 +++++++------ 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/.ci/test_r_package.sh b/.ci/test_r_package.sh index c2ee3280e56d..a7f03c34915d 100755 --- a/.ci/test_r_package.sh +++ b/.ci/test_r_package.sh @@ -104,6 +104,18 @@ if [[ $OS_NAME == "macos" ]]; then sudo installer \ -pkg $(pwd)/R.pkg \ -target / || exit 1 + + # install tidy v5.8.0 + # ref: https://groups.google.com/g/r-sig-mac/c/7u_ivEj4zhM + TIDY_URL=https://github.com/htacg/tidy-html5/releases/download/5.8.0/tidy-5.8.0-macos-x86_64+arm64.pkg + curl -sL ${TIDY_URL} -o tidy.pkg + sudo installer \ + -pkg $(pwd)/tidy.pkg \ + -target / + + # ensure that this newer version of 'tidy' is used by 'R CMD check' + # ref: https://cran.r-project.org/doc/manuals/R-exts.html#Checking-packages + export R_TIDYCMD=/usr/local/bin/tidy fi # fix for issue where CRAN was not returning {lattice} and {evaluate} when using R 3.6 @@ -263,20 +275,25 @@ fi # this check makes sure that CI builds of the package # actually use MM_PREFETCH preprocessor definition -if [[ $R_BUILD_TYPE == "cran" ]]; then - mm_prefetch_working=$( - cat $BUILD_LOG_FILE \ - | grep --count -E "checking whether MM_PREFETCH work.*yes" - ) -else - mm_prefetch_working=$( - cat $BUILD_LOG_FILE \ - | grep --count -E ".*Performing Test MM_PREFETCH - Success" - ) -fi -if [[ $mm_prefetch_working -ne 1 ]]; then - echo "MM_PREFETCH test was not passed" - exit 1 +# +# _mm_prefetch will not work on arm64 architecture +# ref: https://github.com/microsoft/LightGBM/issues/4124 +if [[ $ARCH != "arm64" ]]; then + if [[ $R_BUILD_TYPE == "cran" ]]; then + mm_prefetch_working=$( + cat $BUILD_LOG_FILE \ + | grep --count -E "checking whether MM_PREFETCH work.*yes" + ) + else + mm_prefetch_working=$( + cat $BUILD_LOG_FILE \ + | grep --count -E ".*Performing Test MM_PREFETCH - Success" + ) + fi + if [[ $mm_prefetch_working -ne 1 ]]; then + echo "MM_PREFETCH test was not passed" + exit 1 + fi fi # this check makes sure that CI builds of the package diff --git a/.github/workflows/r_package.yml b/.github/workflows/r_package.yml index 3bcbf7ea4f79..acf5f2407c2e 100644 --- a/.github/workflows/r_package.yml +++ b/.github/workflows/r_package.yml @@ -55,12 +55,6 @@ jobs: r_version: 4.3 build_type: cmake container: 'ubuntu:22.04' - - os: ubuntu-latest - task: r-package - compiler: clang - r_version: 3.6 - build_type: cmake - container: 'ubuntu:18.04' - os: ubuntu-latest task: r-package compiler: clang @@ -138,6 +132,13 @@ jobs: r_version: 4.3 build_type: cran container: null + # macos-14 = arm64 + - os: macos-14 + task: r-package + compiler: clang + r_version: 4.3 + build_type: cran + container: null steps: - name: Prevent conversion of line endings on Windows if: startsWith(matrix.os, 'windows') @@ -188,12 +189,12 @@ jobs: CTAN_MIRROR: https://ctan.math.illinois.edu/systems/win32/miktex TINYTEX_INSTALLER: TinyTeX - name: Setup and run tests on Linux and macOS - if: matrix.os == 'macos-13' || matrix.os == 'ubuntu-latest' + if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu') shell: bash run: | export TASK="${{ matrix.task }}" export COMPILER="${{ matrix.compiler }}" - if [[ "${{ matrix.os }}" == "macos-13" ]]; then + if [[ "${{ matrix.os }}" =~ ^macos ]]; then export OS_NAME="macos" elif [[ "${{ matrix.os }}" == "ubuntu-latest" ]]; then export OS_NAME="linux"