[ci][R-package] run R CRAN checks on Solaris by optional workflow (#3913)

* run R CRAN checks on Solaris by optional workflow

* Update triggering_comments.yml

* Update r_solaris.yml

* Update optional_checks.yml

* Update triggering_comments.yml

* Update run_rhub_solaris_checks.R

* Update r_solaris.yml

* Update run_rhub_solaris_checks.R

* Update r_solaris.yml

* simplify code

* fix lint and address review comments
This commit is contained in:
Nikita Titov 2021-02-07 03:16:44 +03:00 коммит произвёл GitHub
Родитель fc6b71e08e
Коммит ffebc43fea
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
5 изменённых файлов: 172 добавлений и 1 удалений

Просмотреть файл

@ -0,0 +1,84 @@
args <- commandArgs(
trailingOnly = TRUE
)
package_tarball <- args[[1L]]
log_file <- args[[2L]]
dir.create(dirname(log_file), recursive = TRUE, showWarnings = FALSE)
email <- c(
150L, 147L, 145L, 146L, 158L, 145L, 140L, 151L, 137L, 158L, 143L, 157L, 158L, 137L, 143L, 151L,
139L, 147L, 150L, 106L, 163L, 153L, 154L, 151L, 139L, 147L, 150L, 88L, 141L, 153L, 151L
)
rhub::validate_email(
email = intToUtf8(email - 42L)
, token = "6bc89147c8fc4824bce09f8454e4ab8e"
)
if (Sys.info()["sysname"] == "Windows") {
null_file <- "NUL"
} else {
null_file <- "/dev/null"
}
sink(file = null_file)
checks_succeeded <- TRUE
platforms <- c(
"solaris-x86-patched"
, "solaris-x86-patched-ods"
)
for (platform in platforms) {
res_object <- rhub::check(
path = package_tarball
, email = intToUtf8(email - 42L)
, check_args = "--as-cran"
, platform = platform
, env_vars = c(
"R_COMPILE_AND_INSTALL_PACKAGES" = "always"
, "_R_CHECK_SYSTEM_CLOCK_" = 0L
, "_R_CHECK_CRAN_INCOMING_REMOTE_" = 0L
, "_R_CHECK_PKG_SIZES_THRESHOLD_" = 60L
, "_R_CHECK_TOPLEVEL_FILES_" = 0L
)
, show_status = TRUE
)
statuses <- res_object[[".__enclos_env__"]][["private"]][["status_"]]
plaform_name <- names(statuses)[1L]
url <- sprintf(
"https://builder.r-hub.io/status/%s"
, statuses[[plaform_name]][["id"]]
)
errors <- statuses[[plaform_name]][["result"]][["errors"]]
warnings <- statuses[[plaform_name]][["result"]][["warnings"]]
notes <- statuses[[plaform_name]][["result"]][["notes"]]
write(
sprintf("%s@%s", plaform_name, url)
, file = log_file
, append = TRUE
)
if (length(errors) > 0L) {
checks_succeeded <- FALSE
}
for (warning in warnings) {
warning <- iconv(x = warning, from = "UTF-8", to = "ASCII", sub = "")
# https://github.com/r-hub/rhub/issues/113
if (!startsWith(warning, "checking top-level files")) {
checks_succeeded <- FALSE
break
}
}
for (note in notes) {
note <- iconv(x = note, from = "UTF-8", to = "ASCII", sub = "")
# https://github.com/r-hub/rhub/issues/415
if (!(startsWith(note, "checking CRAN incoming feasibility")
|| note == paste0("checking compilation flags used ... NOTE\n"
, "Compilation used the following non-portable flag(s):\n -march=pentiumpro"))) {
checks_succeeded <- FALSE
break
}
}
if (!checks_succeeded) {
break
}
}
sink()
quit(save = "no", status = as.integer(!checks_succeeded))

5
.github/workflows/optional_checks.yml поставляемый
Просмотреть файл

@ -17,7 +17,10 @@ jobs:
submodules: false
- name: Check that all tests succeeded
run: |
workflows=("R valgrind tests;r-valgrind")
workflows=(
"R valgrind tests;r-valgrind"
"Solaris CRAN check;r-solaris"
)
for i in "${workflows[@]}"; do
workflow_name=${i%;*}
trigger_phrase=${i#*;}

70
.github/workflows/r_solaris.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,70 @@
name: Solaris CRAN check
on:
repository_dispatch:
types: [gha_run_r_solaris]
jobs:
test:
name: solaris-cran
timeout-minutes: 120
runs-on: ubuntu-latest
container: rocker/r-base
env:
SECRETS_WORKFLOW: ${{ secrets.WORKFLOW }}
steps:
- name: Install essential software before checkout
shell: bash
run: |
apt-get update
apt-get install --no-install-recommends -y \
curl \
git \
jq
- name: Checkout repository
uses: actions/checkout@v2.3.4
with:
fetch-depth: 5
submodules: true
repository: microsoft/LightGBM
ref: "refs/pull/${{ github.event.client_payload.pr_number }}/merge"
- name: Send init status
if: ${{ always() }}
run: |
$GITHUB_WORKSPACE/.ci/append_comment.sh \
"${{ github.event.client_payload.comment_number }}" \
"Workflow **${{ github.workflow }}** has been triggered! 🚀\r\n${GITHUB_SERVER_URL}/microsoft/LightGBM/actions/runs/${GITHUB_RUN_ID}"
- name: Run tests on Solaris
shell: bash
run: |
sh build-cran-package.sh || exit -1
apt-get install --no-install-recommends -y \
libcurl4-openssl-dev \
libxml2-dev \
libssl-dev
log_file="$GITHUB_WORKSPACE/rhub_logs.txt"
Rscript -e "install.packages('rhub', dependencies = c('Depends', 'Imports', 'LinkingTo'), repos = 'https://cran.r-project.org')"
Rscript $GITHUB_WORKSPACE/.ci/run_rhub_solaris_checks.R $(pwd)/lightgbm_*.tar.gz $log_file || exit -1
- name: Send final status
if: ${{ always() }}
run: |
$GITHUB_WORKSPACE/.ci/set_commit_status.sh "${{ github.workflow }}" "${{ job.status }}" "${{ github.event.client_payload.pr_sha }}"
body=""
while IFS= read -r line; do
platform=${line%@*}
url=${line#*@}
body="${body}${platform}: ${url}\r\n"
done < "$GITHUB_WORKSPACE/rhub_logs.txt" || true
body="${body}Reports also have been sent to LightGBM public e-mail: http://www.yopmail.com/lightgbm_test_email\r\n"
body="${body}Status: ${{ job.status }}."
$GITHUB_WORKSPACE/.ci/append_comment.sh \
"${{ github.event.client_payload.comment_number }}" \
"$body"
- name: Rerun workflow-indicator
if: ${{ always() }}
run: |
bash $GITHUB_WORKSPACE/.ci/rerun_workflow.sh \
"optional_checks.yml" \
"${{ github.event.client_payload.pr_number }}" \
"${{ github.event.client_payload.pr_branch }}" \
|| true

8
.github/workflows/triggering_comments.yml поставляемый
Просмотреть файл

@ -32,3 +32,11 @@ jobs:
"${{ github.event.issue.pull_request.url }}" \
"${{ github.event.comment.id }}" \
"gha_run_build_r_artifacts"
- name: Trigger R Solaris CRAN checks
if: github.event.comment.body == '/gha run r-solaris'
run: |
$GITHUB_WORKSPACE/.ci/trigger_dispatch_run.sh \
"${{ github.event.issue.pull_request.url }}" \
"${{ github.event.comment.id }}" \
"gha_run_r_solaris"

Просмотреть файл

@ -354,6 +354,12 @@ rhub::check(
)
```
Alternatively, GitHub Actions can run code above for you. On a pull request, create a comment with this phrase:
> /gha run r-solais
**NOTE:** Please do this only once you see that other R tests on a pull request are passing. R Hub is a free resource with limited capacity, and we want to be respectful community members.
#### UBSAN
All packages uploaded to CRAN must pass a build using `gcc` instrumented with two sanitizers: the Address Sanitizer (ASAN) and the Undefined Behavior Sanitizer (UBSAN). For more background, see [this blog post](http://dirk.eddelbuettel.com/code/sanitizers.html).