From c5ab604e9d3f10a28e3d369d0ba4911bbde59276 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Mon, 1 Jun 2026 15:02:14 +0300 Subject: [PATCH 1/3] GHA: add locale-specific checks --- .github/workflows/R-CMD-check.yaml | 51 ++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index cc54295fc7..56dc522633 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -71,3 +71,54 @@ jobs: - uses: yihui/actions/check-r-package@HEAD with: check-args: "--no-manual --as-cran" + + R-CMD-check-locale: + runs-on: ${{ matrix.os }} + + name: ${{ matrix.os }}, R-${{ matrix.r }}, LC_CTYPE=${{ matrix.locale }} + + strategy: + fail-fast: true + matrix: + os: [ubuntu-22.04] + r: ['release'] + locale: ['fr_CA.ISO-8859-1', 'zh_CN.GB18030', 'ru_RU.KOI8-R'] + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + _R_CHECK_RD_CHECKRD_MINLEVEL_: -Inf + _R_CHECK_RD_CONTENTS_VALUE_: 1 + + steps: + - uses: actions/checkout@v6 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.r }} + + - name: Configure locale + run: | + echo ${{ matrix.locale }} `echo ${{ matrix.locale }} | sed 's/.*\.//'` | sudo tee -a /etc/locale.gen + sudo locale-gen --keep-existing + + - uses: yihui/actions/setup-r-dependencies@HEAD + + - name: Override R for locale-specific check + run: | + sudo mkdir -p /override + # poor man's luit that doesn't require a tty + sudo tee /override/R < expand backticks, dollars + #!/bin/bash + set -o pipefail + exec stdbuf -o L -e L `which R` "\$@" 2>&1 | while read line; do + echo "\$line" | iconv -t UTF-8 + done + EOF + sudo chmod +x /override/R + echo PATH=/override:$PATH >> $GITHUB_ENV + + - uses: yihui/actions/check-r-package@HEAD + with: + check-args: "--no-manual" + env: + LC_CTYPE: ${{ matrix.locale }} From 52271bbb0cc12d3474a3d8d0d7dd82dea08842e1 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 6 Jun 2026 23:32:46 +0300 Subject: [PATCH 2/3] Fix tests 2298.* In a non-UTF-8 locale capable of representing a-umlaut, o-umlaut, u-umlaut, encode from the locale encoding, not UTF-8. --- inst/tests/tests.Rraw | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/tests/tests.Rraw b/inst/tests/tests.Rraw index 687bf929ed..1de5c8e06e 100644 --- a/inst/tests/tests.Rraw +++ b/inst/tests/tests.Rraw @@ -20283,7 +20283,7 @@ local(if (utf8_check(c("\u00e4", "\u00f6", "\u00fc"))) { # a-umlaut, o-umlaut, u-umlaut eval(parse(text = ' # eval(parse()) defers parsing to runtime; see utf8_check description setnames(x , c("\u00e4", "\u00f6", "\u00fc")) - setnames(y , iconv(c("\u00f6", "\u00fc", "\u00e4"), from = "UTF-8", to = "latin1")) + setnames(y , iconv(c("\u00f6", "\u00fc", "\u00e4"), from = "", to = "latin1")) test(2298.1, rbindlist(list(x,y), use.names=TRUE), data.table("\u00e4"=c(1,6), "\u00f6"=c(2,4), "\u00fc"=c(3,5))) test(2298.2, rbindlist(list(y,x), use.names=TRUE), data.table("\u00f6"=c(4,2), "\u00fc"=c(5,3), "\u00e4"=c(6,1))) set(y, j="\u00e4", value=NULL) From 29ad3b031433183de6d4eaa61060a76603f689e0 Mon Sep 17 00:00:00 2001 From: Ivan K Date: Sat, 18 Jul 2026 20:12:22 +0300 Subject: [PATCH 3/3] Drop unnecessary environment variables --- .github/workflows/R-CMD-check.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 56dc522633..1e437a2e2a 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -86,8 +86,6 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - _R_CHECK_RD_CHECKRD_MINLEVEL_: -Inf - _R_CHECK_RD_CONTENTS_VALUE_: 1 steps: - uses: actions/checkout@v6