diff --git a/.github/workflows/CODECOV-all-OS.yaml b/.github/workflows/CODECOV-all-OS.yaml index 805cbff1..b1f50f12 100644 --- a/.github/workflows/CODECOV-all-OS.yaml +++ b/.github/workflows/CODECOV-all-OS.yaml @@ -17,19 +17,45 @@ jobs: fail-fast: false matrix: config: + - {os: macOS-latest, r: 'release'} - {os: windows-latest, r: 'release'} - {os: ubuntu-20.04, r: 'release'} env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true R_REMOTES_NO_ERRORS_FROM_WARNINGS: true - RSPM: https://packagemanager.rstudio.com/all/latest + RSPM: ${{ matrix.config.rspm }} GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} CODECOV_DEBUG: true steps: - uses: actions/checkout@v2 + # macOS-specific steps + - name: Fix Homebrew Permissions (macOS only) + if: runner.os == 'macOS' + run: | + sudo chown -R $(whoami) $(brew --prefix)/* + + + # Debug Homebrew Installation (macOS only) + - name: Debug Homebrew Installation (macOS only) + if: runner.os == 'macOS' + run: | + cd /opt/homebrew/Library/Taps/homebrew/homebrew-core + git stash -u + git clean -d -f + brew doctor + brew config + + - name: Update and Install macOS Utilities + if: runner.os == 'macOS' + run: | + brew update + brew install libomp qpdf || echo "qpdf installation skipped if already installed" + export DYLD_LIBRARY_PATH=$(brew --prefix libomp)/lib + echo "DYLD_LIBRARY_PATH=$(brew --prefix libomp)/lib" >> $GITHUB_ENV + - uses: r-lib/actions/setup-r@v2-branch with: r-version: ${{ matrix.config.r }} @@ -37,36 +63,49 @@ jobs: - uses: r-lib/actions/setup-pandoc@v2-branch - # Install system dependencies for Linux - - name: Install Linux system dependencies - if: runner.os == 'Linux' - run: | - sudo apt-get update - sudo apt-get install -y default-jdk - sudo R CMD javareconf - sudo apt-get install -y libcurl4-openssl-dev libxml2-dev libssl-dev - sudo apt-get install -y libharfbuzz-dev libfribidi-dev - - # Install remotes first - - name: Install remotes package + - uses: conda-incubator/setup-miniconda@v3 + with: + auto-update-conda: true + python-version: 3.9 + miniconda-version: "latest" + + - name: Query dependencies run: | - install.packages('remotes', repos = "https://cloud.r-project.org") + install.packages('remotes') + saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) + writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") shell: Rscript {0} - # Pre-install critical dependencies - - name: Install critical R packages + - name: Cache R packages + if: runner.os != 'Windows' + uses: actions/cache@v4 + with: + path: ${{ env.R_LIBS_USER }} + key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} + restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- + + - name: Install system dependencies + if: runner.os == 'Linux' run: | - install.packages(c('rJava', 'mallet', 'topics'), repos = "https://cloud.r-project.org") - shell: Rscript {0} + while read -r cmd + do + eval sudo $cmd + done < <(Rscript -e 'cat(remotes::system_requirements("ubuntu", "20.04"), sep = "\n")') + sudo apt install libharfbuzz-dev + sudo apt install libfribidi-dev - # Install all dependencies - - name: Install all dependencies + - name: Install dependencies run: | remotes::install_deps(dependencies = TRUE) + remotes::install_cran("rcmdcheck") shell: Rscript {0} + - name: Fix Conda permissions on macOS + if: runner.os == 'macOS' + run: sudo chown -R $UID $CONDA + - name: Installing text and testing it - run: | + run: | install.packages("devtools") library(devtools) devtools::install_github("oscarkjell/text") @@ -74,13 +113,34 @@ jobs: text::textrpp_initialize(textEmbed_test = TRUE) shell: Rscript {0} - - name: Generate coverage report + - name: Session info + run: | + options(width = 100) + pkgs <- installed.packages()[, "Package"] + sessioninfo::session_info(pkgs, include_base = TRUE) + shell: Rscript {0} + + # Test coverage + - name: Test coverage env: OMP_MAX_ACTIVE_LEVELS: 2 CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} run: covr::codecov(token = Sys.getenv("CODECOV_TOKEN")) shell: Rscript {0} - - name: Debug and list files - run: ls -al - shell: bash + # Debugging step to confirm coverage files are generated + - name: List files for debugging + run: ls -R + + # Wait to ensure all coverage data is saved + - name: Wait for coverage files to be ready + run: sleep 5 + + # Upload coverage to Codecov + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + flags: ${{ matrix.config.os }} + verbose: true + files: "path/to/coverage/file" # Replace with actual coverage file path diff --git a/.github/workflows/RCMD.yaml b/.github/workflows/RCMD.yaml index ec78ce81..da5c3db0 100644 --- a/.github/workflows/RCMD.yaml +++ b/.github/workflows/RCMD.yaml @@ -1,84 +1,144 @@ on: push: - branches: - - master + branches: [ "master" ] pull_request: - branches: - - master + branches: [ "master" ] name: R-CMD-check jobs: R-CMD-check: runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) strategy: fail-fast: false matrix: config: - - {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com"} - - {os: windows-latest, r: 'release'} - {os: macOS-latest, r: 'release'} + - {os: windows-latest, r: 'release'} + - {os: ubuntu-20.04, r: 'release'} env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true R_REMOTES_NO_ERRORS_FROM_WARNINGS: true RSPM: ${{ matrix.config.rspm }} GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - R_LIBS_USER: /tmp/Library steps: - uses: actions/checkout@v2 - - name: Set up R - uses: r-lib/actions/setup-r@v2-branch + # macOS-specific steps + - name: Fix and Debug Homebrew Issues + if: runner.os == 'macOS' + run: | + # Reset Homebrew changes + cd /opt/homebrew/Library/Taps/homebrew/homebrew-core || exit 1 + git stash -u || echo "No changes to stash" + git clean -d -f || echo "No files to clean" + + # Fix Homebrew permissions + sudo chown -R $(whoami) $(brew --prefix)/* + + # Debug Homebrew + brew doctor || echo "brew doctor failed" + brew config || echo "brew config failed" + + - name: Install macOS Utilities + if: runner.os == 'macOS' + run: | + brew update || echo "Homebrew update failed" + brew install libomp || echo "libomp installation failed" + brew install qpdf || echo "qpdf installation failed but continuing" + export DYLD_LIBRARY_PATH=$(brew --prefix libomp)/lib + echo "DYLD_LIBRARY_PATH=$(brew --prefix libomp)/lib" >> $GITHUB_ENV + + # Set up R environment + - uses: r-lib/actions/setup-r@v2-branch with: r-version: ${{ matrix.config.r }} - - name: Install system dependencies (Ubuntu) + - uses: r-lib/actions/setup-pandoc@v2-branch + + # Install Miniconda (all OS) + - uses: conda-incubator/setup-miniconda@v3 + with: + auto-update-conda: true + python-version: 3.9 + miniconda-version: "latest" + + - name: Install Conda Dependencies + run: | + conda config --add channels defaults + conda config --set solver classic + conda install -c conda-forge numpy + + - name: Query R Dependencies + run: | + install.packages('remotes') + saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) + writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") + shell: Rscript {0} + + # Cache R packages + - name: Cache R Packages + if: runner.os != 'Windows' + uses: actions/cache@v1 + with: + path: ${{ env.R_LIBS_USER }} + key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} + restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- + + # Install system dependencies (Linux only) + - name: Install System Dependencies if: runner.os == 'Linux' run: | - sudo apt-get update -y - sudo apt-get install -y libcurl4-openssl-dev libxml2-dev libssl-dev - sudo apt-get install -y libharfbuzz-dev libfribidi-dev - sudo apt-get install -y pandoc - shell: bash + while read -r cmd; do + eval sudo $cmd + done < <(Rscript -e 'cat(remotes::system_requirements("ubuntu", "20.04"), sep = "\n")') + sudo apt install libharfbuzz-dev libfribidi-dev - - name: Set up Pandoc - uses: r-lib/actions/setup-pandoc@v2-branch + # Install R dependencies + - name: Install R Dependencies + run: | + remotes::install_deps(dependencies = TRUE) + remotes::install_cran("rcmdcheck") + shell: Rscript {0} + + # Fix Conda permissions (macOS only) + - name: Fix Conda Permissions + if: runner.os == 'macOS' + run: sudo chown -R $UID $CONDA - - name: Install required R packages + # Install and test "text" package + - name: Install and Test "text" Package run: | - options(repos = c(CRAN = "https://cran.rstudio.com")) - install.packages("remotes") - remotes::install_cran(c( - "topics", "rcmdcheck", "devtools", "dplyr", "tidyr", "ggplot2", - "ggrepel", "cowplot", "parsnip", "recipes", "rsample", - "reticulate", "tune", "workflows", "yardstick", - "future", "furrr", "rmarkdown", "evaluate" - )) + install.packages("devtools") + library(devtools) + devtools::install_github("oscarkjell/text") + text::textrpp_install(prompt = FALSE) + text::textrpp_initialize(textEmbed_test = TRUE) shell: Rscript {0} - - name: Verify installed packages + # Session Info + - name: Session Info run: | - required_packages <- c( - "topics", "rcmdcheck", "devtools", "dplyr", "tidyr", "ggplot2", - "ggrepel", "cowplot", "parsnip", "recipes", "rsample", - "reticulate", "tune", "workflows", "yardstick", - "future", "furrr", "rmarkdown", "evaluate" - ) - not_installed <- setdiff(required_packages, rownames(installed.packages())) - if (length(not_installed) > 0) { - stop("Some required packages are not installed: ", paste(not_installed, collapse = ", ")) - } + options(width = 100) + pkgs <- installed.packages()[, "Package"] + sessioninfo::session_info(pkgs, include_base = TRUE) shell: Rscript {0} - - name: Run R CMD Check + # Run R CMD check + - name: R CMD Check env: _R_CHECK_CRAN_INCOMING_: false - run: | - rcmdcheck::rcmdcheck( - args = c("--no-manual", "--as-cran"), - build_args = "--no-build-vignettes" - ) + OMP_MAX_ACTIVE_LEVELS: 0 + run: rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "warning", check_dir = "check") shell: Rscript {0} + + # Display testthat output + - name: Display Testthat Output + if: always() + run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash diff --git a/.github/workflows/dont run/CODECOV-all-OS.yaml b/.github/workflows/dont run/CODECOV-all-OS.yaml new file mode 100644 index 00000000..805cbff1 --- /dev/null +++ b/.github/workflows/dont run/CODECOV-all-OS.yaml @@ -0,0 +1,86 @@ +on: + push: + branches: + - master + pull_request: + branches: + - master + +name: CODECOV + +jobs: + R-CMD-check: + runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + + strategy: + fail-fast: false + matrix: + config: + - {os: windows-latest, r: 'release'} + - {os: ubuntu-20.04, r: 'release'} + + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + R_REMOTES_NO_ERRORS_FROM_WARNINGS: true + RSPM: https://packagemanager.rstudio.com/all/latest + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + CODECOV_DEBUG: true + + steps: + - uses: actions/checkout@v2 + + - uses: r-lib/actions/setup-r@v2-branch + with: + r-version: ${{ matrix.config.r }} + http-user-agent: ${{ matrix.config.http-user-agent }} + + - uses: r-lib/actions/setup-pandoc@v2-branch + + # Install system dependencies for Linux + - name: Install Linux system dependencies + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y default-jdk + sudo R CMD javareconf + sudo apt-get install -y libcurl4-openssl-dev libxml2-dev libssl-dev + sudo apt-get install -y libharfbuzz-dev libfribidi-dev + + # Install remotes first + - name: Install remotes package + run: | + install.packages('remotes', repos = "https://cloud.r-project.org") + shell: Rscript {0} + + # Pre-install critical dependencies + - name: Install critical R packages + run: | + install.packages(c('rJava', 'mallet', 'topics'), repos = "https://cloud.r-project.org") + shell: Rscript {0} + + # Install all dependencies + - name: Install all dependencies + run: | + remotes::install_deps(dependencies = TRUE) + shell: Rscript {0} + + - name: Installing text and testing it + run: | + install.packages("devtools") + library(devtools) + devtools::install_github("oscarkjell/text") + text::textrpp_install(prompt = FALSE) + text::textrpp_initialize(textEmbed_test = TRUE) + shell: Rscript {0} + + - name: Generate coverage report + env: + OMP_MAX_ACTIVE_LEVELS: 2 + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + run: covr::codecov(token = Sys.getenv("CODECOV_TOKEN")) + shell: Rscript {0} + + - name: Debug and list files + run: ls -al + shell: bash diff --git a/.github/workflows/dont run/RCMD.yaml b/.github/workflows/dont run/RCMD.yaml new file mode 100644 index 00000000..ec78ce81 --- /dev/null +++ b/.github/workflows/dont run/RCMD.yaml @@ -0,0 +1,84 @@ +on: + push: + branches: + - master + pull_request: + branches: + - master + +name: R-CMD-check + +jobs: + R-CMD-check: + runs-on: ${{ matrix.config.os }} + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + + strategy: + fail-fast: false + matrix: + config: + - {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com"} + - {os: windows-latest, r: 'release'} + - {os: macOS-latest, r: 'release'} + + env: + R_REMOTES_NO_ERRORS_FROM_WARNINGS: true + RSPM: ${{ matrix.config.rspm }} + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_LIBS_USER: /tmp/Library + + steps: + - uses: actions/checkout@v2 + + - name: Set up R + uses: r-lib/actions/setup-r@v2-branch + with: + r-version: ${{ matrix.config.r }} + + - name: Install system dependencies (Ubuntu) + if: runner.os == 'Linux' + run: | + sudo apt-get update -y + sudo apt-get install -y libcurl4-openssl-dev libxml2-dev libssl-dev + sudo apt-get install -y libharfbuzz-dev libfribidi-dev + sudo apt-get install -y pandoc + shell: bash + + - name: Set up Pandoc + uses: r-lib/actions/setup-pandoc@v2-branch + + - name: Install required R packages + run: | + options(repos = c(CRAN = "https://cran.rstudio.com")) + install.packages("remotes") + remotes::install_cran(c( + "topics", "rcmdcheck", "devtools", "dplyr", "tidyr", "ggplot2", + "ggrepel", "cowplot", "parsnip", "recipes", "rsample", + "reticulate", "tune", "workflows", "yardstick", + "future", "furrr", "rmarkdown", "evaluate" + )) + shell: Rscript {0} + + - name: Verify installed packages + run: | + required_packages <- c( + "topics", "rcmdcheck", "devtools", "dplyr", "tidyr", "ggplot2", + "ggrepel", "cowplot", "parsnip", "recipes", "rsample", + "reticulate", "tune", "workflows", "yardstick", + "future", "furrr", "rmarkdown", "evaluate" + ) + not_installed <- setdiff(required_packages, rownames(installed.packages())) + if (length(not_installed) > 0) { + stop("Some required packages are not installed: ", paste(not_installed, collapse = ", ")) + } + shell: Rscript {0} + + - name: Run R CMD Check + env: + _R_CHECK_CRAN_INCOMING_: false + run: | + rcmdcheck::rcmdcheck( + args = c("--no-manual", "--as-cran"), + build_args = "--no-build-vignettes" + ) + shell: Rscript {0}