Skip to content

Make CI image locale setup portable across Rocker versions - #102

Merged
jonthegeek merged 2 commits into
mainfrom
copilot/fix-ci-image-build-failure
May 27, 2026
Merged

Make CI image locale setup portable across Rocker versions#102
jonthegeek merged 2 commits into
mainfrom
copilot/fix-ci-image-build-failure

Conversation

Copilot AI commented May 26, 2026

Copy link
Copy Markdown
Contributor

The Build CI Image workflow was failing while building .github/docker because locale generation depended on /usr/share/locale/locale.alias, which is not present across the full Rocker matrix. This updates locale setup to generate en_US.UTF-8 using the distro-supported locale-gen path instead.

  • Locale generation

    • Replace the localedef ... -A /usr/share/locale/locale.alias ... invocation with /etc/locale.gen + locale-gen en_US.UTF-8.
    • Avoid hard-coding the locale.alias path so the build works across older and newer Rocker base images.
  • Runtime locale environment

    • Export both LANG and LC_ALL as en_US.UTF-8 to keep the container locale explicit and consistent.
  • Scope

    • Keep the rest of the CI image build unchanged; only the locale setup block is adjusted.
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        locales \
    && printf 'en_US.UTF-8 UTF-8\n' > /etc/locale.gen \
    && locale-gen en_US.UTF-8 \
    && rm -rf /var/lib/apt/lists/*

ENV LANG=en_US.UTF-8 \
    LC_ALL=en_US.UTF-8
Original prompt

The GitHub Actions job at https://github.com/api2r/pkgskills/actions/runs/26394402082/job/77976535471 is failing in the Build CI Image workflow while building the CI container image.

Repository: api2r/pkgskills

Please implement a fix for the failing build.

What failed:

  • The failure occurs in .github/docker/Dockerfile during locale setup.
  • The current Dockerfile runs localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 after installing locales.
  • The job logs show: locale alias file '/usr/share/locale/locale.alias' not found: No such file or directory.
  • The workflow that triggers this build is .github/workflows/build-ci-image.yml, which builds .github/docker across an R-version matrix (devel, release, oldrel-1, oldrel-2, oldrel-3, oldrel-4).

Desired fix:

  • Make locale generation robust across the Rocker base images used in the matrix.
  • Avoid depending on /usr/share/locale/locale.alias existing.
  • Preserve the intent of configuring en_US.UTF-8 for the container.

Suggested direction:

  • Replace the brittle localedef ... -A /usr/share/locale/locale.alias ... usage with a more portable locale setup such as enabling en_US.UTF-8 UTF-8 in /etc/locale.gen and running locale-gen en_US.UTF-8.
  • Ensure the resulting image exports LANG=en_US.UTF-8; set LC_ALL=en_US.UTF-8 too if appropriate.
  • Keep the rest of the Dockerfile behavior unchanged unless a small adjacent change is needed for reliability.

Please create a pull request with the fix.

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: Please find a solution for this failing job. Use the logs, job definition, and any referenced files where the failure occurred. Keep your response focused on the solution and include code suggestions when appropriate.

Assistant: The failure is caused by the locale-generation step in the CI image Docker build, not by the R-version resolution step.

Root cause

In .github/docker/Dockerfile at 025e8f389f3b22754699380a9c448ad9c3af2a76, this line fails:

From the job log:

  • locale alias file '/usr/share/locale/locale.alias' not found: No such file or directory

That means the image being built from rocker/r-ver:${R_VERSION} does not reliably provide /usr/share/locale/locale.alias, so the explicit -A argument makes localedef abort.

Fix

Remove the dependency on locale.alias and generate the locale in a more portable way.

Recommended patch

In .github/docker/Dockerfile:

  • replace the current locale setup block around lines 48–50 with:
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        git \
        sudo \
        curl \
        wget \
        rsync \
        ssh-client \
        gnupg2 \
        jq \
        file \
        locales \
        lsb-release \
        tar \
        unzip \
        zip \
        xz-utils \
        zstd \
        make \
        gcc \
        g++ \
        pkg-config \
        cmake \
        libxml2-dev \
        libcurl4-openssl-dev \
        libssl-dev \
        libfontconfig1-dev \
        libfreetype6-dev \
        libfribidi-dev \
        libharfbuzz-dev \
        libjpeg-dev \
        libmagick++-dev \
        libpng-dev \
        libtiff-dev \
        pandoc \
        qpdf \
    && sed -i 's/^# *en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
    && locale-gen en_US.UTF-8 \
    && rm -rf /var/lib/apt/lists/*
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8

Why this works

locale-gen uses /etc/locale.gen and avoids the brittle hardcoded dependency on /usr/share/locale/locale.alias. That makes the build more robust across Debian/Ubuntu variants used by different Rocker tags, especially older R images in your matrix from .github/workflows/build-ci-image.yml.

Minimal alternative

If you want the smallest change, replace:

&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8

with:

&& localedef -i en_US -c -f UTF-8 en_US.UTF-8

But the locale-gen approach is safer.

Files involved

Best targeted change

Update .github/docker/Dockerfile to use locale-gen instead of localedef -A /usr/share/locale/locale.alias .... This directly addresses the failing line shown in the logs and should unblock the CI image build across the matrix.

User: Can you hand this off to @copilot to implement a fix?

Assistant: Yes — I’ve handed it off to @copilot to implement the fix in `api2r/...

This pull request was created from Copilot chat.

@github-actions

github-actions Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

{qcthat} Report: User Acceptance

No issues are awaiting UAT.

This report was generated by this GitHub Actions run.

Last updated: 2026-05-27 02:25:52 UTC

Session Info ─ Session info ───────────────────────────────────────────────────────────────

setting value

version R version 4.6.0 (2026-04-24)

os Ubuntu 24.04.4 LTS

system x86_64, linux-gnu

ui X11

language (EN)

collate en_US.UTF-8

ctype en_US.UTF-8

tz UTC

date 2026-05-27

pandoc 3.1.3 @ /usr/bin/pandoc

quarto NA

─ Packages ───────────────────────────────────────────────────────────────────

package * version date (UTC) lib source

askpass 1.2.1 2024-10-04 [1] RSPM

astgrepr 0.1.1 2025-06-07 [1] RSPM

backports 1.5.1 2026-04-03 [1] RSPM

base * 4.6.0 2026-04-24 [2] local

base64enc 0.1-6 2026-02-02 [1] RSPM

boot 1.3-32 2025-08-29 [2] CRAN (R 4.6.0)

brew 1.0-10 2023-12-16 [1] RSPM

brio 1.1.5 2024-04-24 [1] RSPM

bslib 0.11.0 2026-05-16 [1] RSPM

cachem 1.1.0 2024-05-16 [1] RSPM

callr 3.7.6 2024-03-25 [1] RSPM

checkmate 2.3.4 2026-02-03 [1] RSPM

class 7.3-23 2025-01-01 [2] CRAN (R 4.6.0)

cli 3.6.6 2026-04-09 [1] RSPM

clipr 0.8.1 2026-05-25 [1] RSPM

cluster 2.1.8.2 2026-02-05 [2] CRAN (R 4.6.0)

codetools 0.2-20 2024-03-31 [2] CRAN (R 4.6.0)

commonmark 2.0.0 2025-07-07 [1] RSPM

compiler 4.6.0 2026-04-24 [2] local

covr 3.6.5 2025-11-09 [1] RSPM

crayon 1.5.3 2024-06-20 [1] RSPM

credentials 2.0.3 2025-09-12 [1] RSPM

curl 7.1.0 2026-04-22 [1] RSPM

datasets * 4.6.0 2026-04-24 [2] local

desc 1.4.3 2023-12-10 [1] RSPM

devtools 2.5.2 2026-04-30 [1] RSPM

diffobj 0.3.6 2025-04-21 [1] RSPM

digest 0.6.39 2025-11-19 [1] RSPM

docopt 0.7.2 2025-03-25 [1] RSPM (R 4.6.0)

downlit 0.4.5 2025-11-14 [1] RSPM

dplyr 1.2.1 2026-04-03 [1] RSPM

ellipsis 0.3.3 2026-04-04 [1] RSPM

emoji 16.0.0 2024-10-28 [1] RSPM

evaluate 1.0.5 2025-08-27 [1] RSPM

fansi 1.0.7 2025-11-19 [1] RSPM

fastmap 1.2.0 2024-05-15 [1] RSPM

fontawesome 0.5.3 2024-11-16 [1] RSPM

foreign 0.8-91 2026-01-29 [2] CRAN (R 4.6.0)

fs 2.1.0 2026-04-18 [1] RSPM

generics 0.1.4 2025-05-09 [1] RSPM

gert 2.3.1 2026-01-11 [1] RSPM

gh 1.5.0 2025-05-26 [1] RSPM

git2r 0.36.2 2025-03-29 [1] RSPM

gitcreds 0.1.2 2022-09-08 [1] RSPM

glue 1.8.1 2026-04-17 [1] RSPM

graphics * 4.6.0 2026-04-24 [2] local

grDevices * 4.6.0 2026-04-24 [2] local

grid 4.6.0 2026-04-24 [2] local

highr 0.12 2026-03-06 [1] RSPM

htmltools 0.5.9 2025-12-04 [1] RSPM

htmlwidgets 1.6.4 2023-12-06 [1] RSPM

httpuv 1.6.17 2026-03-18 [1] RSPM

httr 1.4.8 2026-02-13 [1] RSPM

httr2 1.2.2 2025-12-08 [1] RSPM

ini 0.3.1 2018-05-20 [1] RSPM

jquerylib 0.1.4 2021-04-26 [1] RSPM

jsonlite 2.0.0 2025-03-27 [1] RSPM

KernSmooth 2.23-26 2025-01-01 [2] CRAN (R 4.6.0)

knitr 1.51 2025-12-20 [1] RSPM

later 1.4.8 2026-03-05 [1] RSPM

lattice 0.22-9 2026-02-09 [2] CRAN (R 4.6.0)

lifecycle 1.0.5 2026-01-08 [1] RSPM

littler 0.3.23 2026-04-12 [1] RSPM (R 4.6.0)

magick 2.9.1 2026-02-28 [1] RSPM

magrittr 2.0.5 2026-04-04 [1] RSPM

MASS 7.3-65 2025-02-28 [2] CRAN (R 4.6.0)

Matrix 1.7-5 2026-03-21 [2] CRAN (R 4.6.0)

memoise 2.0.1 2021-11-26 [1] RSPM

methods * 4.6.0 2026-04-24 [2] local

mgcv 1.9-4 2025-11-07 [2] CRAN (R 4.6.0)

mime 0.13 2025-03-17 [1] RSPM

miniUI 0.1.2 2025-04-17 [1] RSPM

nlme 3.1-169 2026-03-27 [2] CRAN (R 4.6.0)

nnet 7.3-20 2025-01-01 [2] CRAN (R 4.6.0)

openssl 2.4.1 2026-05-14 [1] RSPM

otel 0.2.0 2025-08-29 [1] RSPM

pak 0.9.5 2026-04-27 [1] RSPM (R 4.6.0)

parallel 4.6.0 2026-04-24 [2] local

pillar 1.11.1 2025-09-17 [1] RSPM

pkgbuild 1.4.8 2025-05-26 [1] RSPM

pkgconfig 2.0.3 2019-09-22 [1] RSPM

pkgdown 2.2.0 2025-11-06 [1] RSPM

pkgload 1.5.2 2026-04-22 [1] RSPM

pkgskills 0.0.0.9000 2026-05-27 [1] local

praise 1.0.0 2015-08-11 [1] RSPM

prettyunits 1.2.0 2023-09-24 [1] RSPM

processx 3.9.0 2026-04-22 [1] RSPM

profvis 0.4.0 2024-09-20 [1] RSPM

promises 1.5.0 2025-11-01 [1] RSPM

ps 1.9.3 2026-04-20 [1] RSPM

purrr 1.2.2 2026-04-10 [1] RSPM

qcthat 1.1.2 2026-05-27 [1] Github (Gilead-Public/qcthat@d0958dc)

R6 2.6.1 2025-02-15 [1] RSPM

ragg 1.5.2 2026-03-23 [1] RSPM

rappdirs 0.3.4 2026-01-17 [1] RSPM

rcmdcheck 1.4.0 2021-09-27 [1] RSPM

Rcpp 1.1.1-1.1 2026-04-24 [1] RSPM

rex 1.2.2 2026-03-28 [1] RSPM

rlang 1.2.0 2026-04-06 [1] RSPM

rmarkdown 2.31 2026-03-26 [1] RSPM

roxygen2 8.0.0 2026-05-01 [1] RSPM

rpart 4.1.27 2026-03-27 [2] CRAN (R 4.6.0)

rprojroot 2.1.1 2025-08-26 [1] RSPM

rrapply 1.2.8 2025-11-25 [1] RSPM

rstudioapi 0.18.0 2026-01-16 [1] RSPM

rversions 3.0.0 2025-10-09 [1] RSPM

sass 0.4.10 2025-04-11 [1] RSPM

sessioninfo 1.2.3 2025-02-05 [1] RSPM

shiny 1.13.0 2026-02-20 [1] RSPM

sourcetools 0.1.7-2 2026-03-28 [1] RSPM

spatial 7.3-18 2025-01-01 [2] CRAN (R 4.6.0)

splines 4.6.0 2026-04-24 [2] local

stats * 4.6.0 2026-04-24 [2] local

stats4 4.6.0 2026-04-24 [2] local

stbl 0.3.0.9000 2026-05-27 [1] Github (wranglezone/stbl@5a38548)

stringi 1.8.7 2025-03-27 [1] RSPM

stringr 1.6.0 2025-11-04 [1] RSPM

survival 3.8-6 2026-01-16 [2] CRAN (R 4.6.0)

sys 3.4.3 2024-10-04 [1] RSPM

systemfonts 1.3.2 2026-03-05 [1] RSPM

tcltk 4.6.0 2026-04-24 [2] local

testthat 3.3.2 2026-01-11 [1] RSPM

textshaping 1.0.5 2026-03-06 [1] RSPM

tibble 3.3.1 2026-01-11 [1] RSPM

tidyr 1.3.2 2025-12-19 [1] RSPM

tidyselect 1.2.1 2024-03-11 [1] RSPM

tinytex 0.59 2026-03-28 [1] RSPM

tools 4.6.0 2026-04-24 [2] local

urlchecker 1.0.1 2021-11-30 [1] RSPM

usethis 3.2.1 2025-09-06 [1] RSPM

utf8 1.2.6 2025-06-08 [1] RSPM

utils * 4.6.0 2026-04-24 [2] local

vctrs 0.7.3 2026-04-11 [1] RSPM

waldo 0.6.2 2025-07-11 [1] RSPM

whisker 0.4.1 2022-12-05 [1] RSPM

withr 3.0.2 2024-10-28 [1] RSPM

xfun 0.57 2026-03-20 [1] RSPM

xml2 1.5.2 2026-01-17 [1] RSPM

xopen 1.0.1 2024-04-25 [1] RSPM

xtable 1.8-8 2026-02-22 [1] RSPM

yaml 2.3.12 2025-12-10 [1] RSPM

zip 2.3.3 2025-05-13 [1] RSPM

[1] /usr/local/lib/R/site-library

[2] /usr/local/lib/R/library

[3] /__w/_temp/Library

  • ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────

@github-actions

github-actions Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

{qcthat} Reports

PR-Associated Issues

█ A qcthat issue test matrix with 0 milestones, 0 issues, and 0 tests
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped

Completed Issues

✅ A qcthat issue test matrix with 1 milestone, 25 issues, and 102 tests
└─█─Milestone: v0.1.0 (25 issues, 102 tests)
  ├─☑️─Feature 97: Install conditions tests with tdd-workflow
  │ └─✅─use_skill_tdd_workflow() emits messages (#11, #52, #97)
  ├─☑️─Feature 52: feat: use_skill_tdd_workflow() no longer installs helper-expectations.R
  │ └─✅─use_skill_tdd_workflow() emits messages (#11, #52, #97)
  ├─☑️─Feature 48: Install minimal `R/aaa-conditions.R` with `use_skill_r_code()`
  │ ├─✅─use_skill_r_code() creates R/aaa-conditions.R when absent (#48)
  │ ├─✅─use_skill_r_code() substitutes Package into aaa-conditions.R (#48)
  │ ├─✅─use_skill_r_code() does not overwrite existing R/aaa-conditions.R (#48)
  │ └─✅─use_skill_r_code() does not emit conditions message when file exists (#48)
  ├─☑️─Bug 44: fix: `use_github_copilot()` corrupts `${{ }}` GitHub Actions expressions
  │ ├─✅─use_github_copilot() preserves ${{ }} in copilot-setup-steps.yml (#44)
  │ ├─✅─.use_template_as_is() errors on non-logical open (#44)
  │ ├─✅─.use_template_as_is() writes template content verbatim (#44)
  │ └─✅─.use_template_as_is() calls edit_file when open = TRUE (#44)
  ├─☑️─Bug 42: fix: use_ai() fails when called via pkgskills::use_ai() without library(pkgskills)
  │ └─✅─pkgskills::use_ai() works without library(pkgskills) (#42)
  ├─☑️─Task 36: chore: standardize overwrite argument
  │ ├─✅─use_agent() errors if AGENTS.md exists and overwrite = FALSE (#36)
  │ └─✅─use_agent() overwrites AGENTS.md when overwrite = TRUE (#36)
  ├─☑️─Feature 28: feat: use_ai()
  │ ├─✅─use_ai() returns invisibly (#28)
  │ ├─✅─use_ai() returns a named list with all function names (#28)
  │ ├─✅─use_ai() installs only selected skills (#28)
  │ ├─✅─use_ai() errors on invalid skill name (#28)
  │ ├─✅─use_ai() creates AGENTS.md and copilot workflow (#28)
  │ ├─✅─use_ai() creates selected skill files (#28)
  │ ├─✅─use_ai() respects save_agent_as (#28)
  │ ├─✅─use_ai() respects target_skills_dir (#28)
  │ └─✅─use_ai() passes gh_token to use_skill_create_issue() (#28)
  ├─☑️─Feature 25: feat: use_github_copilot()
  │ ├─✅─use_github_copilot() installs copilot-setup-steps.yml (#25, #84, #89)
  │ ├─✅─use_github_copilot() returns path to copilot-setup-steps.yml invisibly (#25)
  │ ├─✅─use_github_copilot() errors if copilot-setup-steps.yml exists and overwrite = FALSE (#25)
  │ └─✅─use_github_copilot() overwrites files when overwrite = TRUE (#25, #84)
  ├─☑️─Feature 20: feat: use_skill_search_code()
  │ ├─✅─use_skill_search_code() installs skill at correct path (#20)
  │ ├─✅─use_skill_search_code() returns path invisibly (#20)
  │ ├─✅─use_skill_search_code() adds astgrepr to Suggests when absent (#20)
  │ ├─✅─use_skill_search_code() does not modify DESCRIPTION when astgrepr already in Suggests (#20)
  │ └─✅─use_skill_search_code() does not modify DESCRIPTION when astgrepr already in Imports (#20)
  ├─☑️─Feature 19: feat: use_skill_r_code()
  │ ├─✅─use_skill_r_code() installs skill at correct path (#19)
  │ ├─✅─use_skill_r_code() returns path invisibly (#19)
  │ └─✅─use_skill_r_code() emits messages (#19, #81)
  ├─☑️─Feature 18: feat: use_skill_implement_issue()
  │ ├─✅─use_skill_implement_issue() installs skill at correct path (#18)
  │ └─✅─use_skill_implement_issue() returns path invisibly (#18)
  ├─☑️─Feature 94: `update_ai()` function
  │ ├─✅─update_ai() defaults overwrite to TRUE (#94)
  │ └─✅─update_ai() still allows explicit overwrite = FALSE (#94)
  ├─☑️─Feature 17: feat: use_skill_github()
  │ ├─✅─use_skill_github() installs skill at correct path (#17)
  │ └─✅─use_skill_github() returns path invisibly (#17)
  ├─☑️─Feature 15: feat: default `.use_skill()` `data` argument to `list()`
  │ └─✅─.use_skill() uses empty list as default data (#15)
  ├─☑️─Feature 11: feat: use_skill_tdd_workflow()
  │ ├─✅─use_skill_tdd_workflow() creates skill file at correct path (#11)
  │ ├─✅─use_skill_tdd_workflow() returns path invisibly (#11)
  │ ├─✅─use_skill_tdd_workflow() renders package name into skill file (#11)
  │ ├─✅─use_skill_tdd_workflow() emits messages (#11, #52, #97)
  │ └─✅─use_skill_tdd_workflow() errors when Package field is absent (#11)
  ├─☑️─Feature 9: feat: use_skill_document()
  │ ├─✅─use_skill_document() installs skill at correct path (#9)
  │ ├─✅─use_skill_document() returns path invisibly (#9)
  │ ├─✅─use_skill_document() creates R/aaa-shared_params.R when absent (#9)
  │ ├─✅─use_skill_document() does not overwrite existing R/aaa-shared_params.R (#9)
  │ ├─✅─use_skill_document() emits message when aaa-shared_params.R is created (#9, #81)
  │ └─✅─use_skill_document() does not emit shared_params message when file exists (#9)
  ├─☑️─Feature 6: feat: use_skill_create_issue()
  │ ├─✅─use_skill_create_issue() errors on non-scalar target_dir (#6)
  │ ├─✅─use_skill_create_issue() errors on non-logical overwrite (#6)
  │ ├─✅─use_skill_create_issue() errors when BugReports is absent (#6)
  │ ├─✅─use_skill_create_issue() errors when BugReports is not a GitHub URL (#6)
  │ ├─✅─use_skill_create_issue() passes correct data to .use_skill() (#6)
  │ ├─✅─use_skill_create_issue() returns path invisibly (#6)
  │ ├─✅─.use_skill() returns path invisibly (#6)
  │ ├─✅─.use_skill() creates file at correct path with use_skills_subdir = TRUE (#6)
  │ ├─✅─.use_skill() creates file at correct path with use_skills_subdir = FALSE (#6)
  │ ├─✅─.use_skill() renders template variables into skill file (#6)
  │ ├─✅─.use_skill() emits a message (#6, #81)
  │ ├─✅─.use_skill() upserts into AGENTS.md when it exists (#6)
  │ ├─✅─.use_skill() creates ## Skills section in AGENTS.md if missing (#6)
  │ ├─✅─.use_skill() updates trigger for existing row in AGENTS.md (#6)
  │ ├─✅─.use_skill() does not touch AGENTS.md when it does not exist (#6)
  │ ├─✅─.use_skill() errors when overwrite = FALSE and file exists (#6)
  │ ├─✅─.use_skill() overwrites file when overwrite = TRUE and file exists (#6)
  │ ├─✅─.use_skill() errors on non-scalar skill (#6)
  │ ├─✅─.use_skill() errors on non-logical use_skills_subdir (#6)
  │ ├─✅─.use_skill() errors on non-logical overwrite (#6)
  │ ├─✅─.read_skill_trigger() errors when template file not found (#6)
  │ ├─✅─.read_skill_trigger() errors when front matter is missing (#6)
  │ ├─✅─.read_skill_trigger() errors when trigger field is absent (#6)
  │ ├─✅─.upsert_agents_skill() creates table when ## Skills has no table (#6)
  │ ├─✅─.upsert_agents_skill() appends row after non-terminal table (#6)
  │ └─✅─.upsert_agents_skill() returns NULL invisibly when AGENTS.md absent (#6)
  ├─☑️─Feature 2: feat: use_agent()
  │ ├─✅─use_agent() writes AGENTS.md and returns the path invisibly (#2)
  │ ├─✅─use_agent() substitutes Package and Title into the template (#2, #59)
  │ ├─✅─use_agent() does not insert 'NA' when Description or URL is absent (#2, #59)
  │ ├─✅─use_agent() emits an informational message after writing (#2, #81)
  │ ├─✅─use_agent() errors on non-scalar save_as (#2)
  │ ├─✅─use_agent() errors on NULL save_as (#2)
  │ ├─✅─use_agent() respects a custom save_as path (#2)
  │ ├─✅─.use_template() errors on non-logical open (#2)
  │ └─✅─.use_template() creates the file with default data and open args (#2)
  ├─☑️─Feature 89: feat: stop copilot from reviewing `.Rd` files
  │ ├─✅─use_github_copilot_code_review() installs copilot-instructions.md (#89)
  │ ├─✅─use_github_copilot_code_review() returns path invisibly (#89)
  │ ├─✅─use_github_copilot_code_review() errors if file exists and overwrite = FALSE (#89)
  │ ├─✅─use_github_copilot_code_review() overwrites file when overwrite = TRUE (#89)
  │ └─✅─use_github_copilot() installs copilot-setup-steps.yml (#25, #84, #89)
  ├─☑️─Task 84: feat: hosted actions
  │ ├─✅─use_github_copilot() installs copilot-setup-steps.yml (#25, #84, #89)
  │ └─✅─use_github_copilot() overwrites files when overwrite = TRUE (#25, #84)
  ├─☑️─Bug 82: `use_ai()` fails without a Bugreports in DESCRIPTION
  │ ├─✅─.bug_reports_from_remote() informs about writes (#81, #82)
  │ ├─✅─.bug_reports_from_remote() falls back to origin GitHub remote (#82)
  │ ├─✅─.bug_reports_from_remote() prefers upstream over origin (#82)
  │ ├─✅─.bug_reports_from_remote() ignores non-GitHub remotes (#82)
  │ └─✅─.bug_reports_from_remote() works with SSH remote URL (#82)
  ├─☑️─Infrastructure 81: Cleaner messages and warnings
  │ ├─✅─use_agent() emits an informational message after writing (#2, #81)
  │ ├─✅─use_github_copilot_whitelist() warns and informs user (#79, #81)
  │ ├─✅─.bug_reports_from_remote() informs about writes (#81, #82)
  │ ├─✅─use_skill_document() emits message when aaa-shared_params.R is created (#9, #81)
  │ ├─✅─use_skill_r_code() emits messages (#19, #81)
  │ └─✅─.use_skill() emits a message (#6, #81)
  ├─☑️─Feature 79: Add github copilot whitelist
  │ ├─✅─use_github_copilot_whitelist() warns and informs user (#79, #81)
  │ ├─✅─use_github_copilot_whitelist() message contains allowlist URL (#79)
  │ ├─✅─use_github_copilot_whitelist() message contains allowlist entries (#79)
  │ ├─✅─use_github_copilot_whitelist() returns NULL invisibly (#79)
  │ ├─✅─use_github_copilot_whitelist() aborts with bad_endpoint subclass (#79)
  │ └─✅─use_github_copilot_whitelist() errors if no BugReports in DESCRIPTION (#79)
  ├─☑️─Bug 76: Add `AGENTS.md` to .Rbuildignore
  │ ├─✅─use_agent() adds AGENTS.md to .Rbuildignore (#76)
  │ └─✅─use_agent() adds custom save_as path to .Rbuildignore (#76)
  └─☑️─Documentation 59: docs: reconcile AGENT.md
    ├─✅─use_agent() substitutes Package and Title into the template (#2, #59)
    └─✅─use_agent() does not insert 'NA' when Description or URL is absent (#2, #59)
# Issue state: 📥 = open, ☑️ = closed (completed), ⛔ = closed (won't fix)
# Test disposition: ✅ = passed, ❌ = failed, 🚫 = skipped
✅ All tests passed

🟢 All issues have at least one test

🙈 12 issues with label "qcthat-nocov" were ignored


This report was generated by this GitHub Actions run.

Last updated: 2026-05-27 02:25:53 UTC

Session Info ─ Session info ───────────────────────────────────────────────────────────────

setting value

version R version 4.6.0 (2026-04-24)

os Ubuntu 24.04.4 LTS

system x86_64, linux-gnu

ui X11

language (EN)

collate en_US.UTF-8

ctype en_US.UTF-8

tz UTC

date 2026-05-27

pandoc 3.1.3 @ /usr/bin/pandoc

quarto NA

─ Packages ───────────────────────────────────────────────────────────────────

package * version date (UTC) lib source

askpass 1.2.1 2024-10-04 [1] RSPM

astgrepr 0.1.1 2025-06-07 [1] RSPM

backports 1.5.1 2026-04-03 [1] RSPM

base * 4.6.0 2026-04-24 [2] local

base64enc 0.1-6 2026-02-02 [1] RSPM

boot 1.3-32 2025-08-29 [2] CRAN (R 4.6.0)

brew 1.0-10 2023-12-16 [1] RSPM

brio 1.1.5 2024-04-24 [1] RSPM

bslib 0.11.0 2026-05-16 [1] RSPM

cachem 1.1.0 2024-05-16 [1] RSPM

callr 3.7.6 2024-03-25 [1] RSPM

checkmate 2.3.4 2026-02-03 [1] RSPM

class 7.3-23 2025-01-01 [2] CRAN (R 4.6.0)

cli 3.6.6 2026-04-09 [1] RSPM

clipr 0.8.1 2026-05-25 [1] RSPM

cluster 2.1.8.2 2026-02-05 [2] CRAN (R 4.6.0)

codetools 0.2-20 2024-03-31 [2] CRAN (R 4.6.0)

commonmark 2.0.0 2025-07-07 [1] RSPM

compiler 4.6.0 2026-04-24 [2] local

covr 3.6.5 2025-11-09 [1] RSPM

crayon 1.5.3 2024-06-20 [1] RSPM

credentials 2.0.3 2025-09-12 [1] RSPM

curl 7.1.0 2026-04-22 [1] RSPM

datasets * 4.6.0 2026-04-24 [2] local

desc 1.4.3 2023-12-10 [1] RSPM

devtools 2.5.2 2026-04-30 [1] RSPM

diffobj 0.3.6 2025-04-21 [1] RSPM

digest 0.6.39 2025-11-19 [1] RSPM

docopt 0.7.2 2025-03-25 [1] RSPM (R 4.6.0)

downlit 0.4.5 2025-11-14 [1] RSPM

dplyr 1.2.1 2026-04-03 [1] RSPM

ellipsis 0.3.3 2026-04-04 [1] RSPM

emoji 16.0.0 2024-10-28 [1] RSPM

evaluate 1.0.5 2025-08-27 [1] RSPM

fansi 1.0.7 2025-11-19 [1] RSPM

fastmap 1.2.0 2024-05-15 [1] RSPM

fontawesome 0.5.3 2024-11-16 [1] RSPM

foreign 0.8-91 2026-01-29 [2] CRAN (R 4.6.0)

fs 2.1.0 2026-04-18 [1] RSPM

generics 0.1.4 2025-05-09 [1] RSPM

gert 2.3.1 2026-01-11 [1] RSPM

gh 1.5.0 2025-05-26 [1] RSPM

git2r 0.36.2 2025-03-29 [1] RSPM

gitcreds 0.1.2 2022-09-08 [1] RSPM

glue 1.8.1 2026-04-17 [1] RSPM

graphics * 4.6.0 2026-04-24 [2] local

grDevices * 4.6.0 2026-04-24 [2] local

grid 4.6.0 2026-04-24 [2] local

highr 0.12 2026-03-06 [1] RSPM

htmltools 0.5.9 2025-12-04 [1] RSPM

htmlwidgets 1.6.4 2023-12-06 [1] RSPM

httpuv 1.6.17 2026-03-18 [1] RSPM

httr 1.4.8 2026-02-13 [1] RSPM

httr2 1.2.2 2025-12-08 [1] RSPM

ini 0.3.1 2018-05-20 [1] RSPM

jquerylib 0.1.4 2021-04-26 [1] RSPM

jsonlite 2.0.0 2025-03-27 [1] RSPM

KernSmooth 2.23-26 2025-01-01 [2] CRAN (R 4.6.0)

knitr 1.51 2025-12-20 [1] RSPM

later 1.4.8 2026-03-05 [1] RSPM

lattice 0.22-9 2026-02-09 [2] CRAN (R 4.6.0)

lifecycle 1.0.5 2026-01-08 [1] RSPM

littler 0.3.23 2026-04-12 [1] RSPM (R 4.6.0)

magick 2.9.1 2026-02-28 [1] RSPM

magrittr 2.0.5 2026-04-04 [1] RSPM

MASS 7.3-65 2025-02-28 [2] CRAN (R 4.6.0)

Matrix 1.7-5 2026-03-21 [2] CRAN (R 4.6.0)

memoise 2.0.1 2021-11-26 [1] RSPM

methods * 4.6.0 2026-04-24 [2] local

mgcv 1.9-4 2025-11-07 [2] CRAN (R 4.6.0)

mime 0.13 2025-03-17 [1] RSPM

miniUI 0.1.2 2025-04-17 [1] RSPM

nlme 3.1-169 2026-03-27 [2] CRAN (R 4.6.0)

nnet 7.3-20 2025-01-01 [2] CRAN (R 4.6.0)

openssl 2.4.1 2026-05-14 [1] RSPM

otel 0.2.0 2025-08-29 [1] RSPM

pak 0.9.5 2026-04-27 [1] RSPM (R 4.6.0)

parallel 4.6.0 2026-04-24 [2] local

pillar 1.11.1 2025-09-17 [1] RSPM

pkgbuild 1.4.8 2025-05-26 [1] RSPM

pkgconfig 2.0.3 2019-09-22 [1] RSPM

pkgdown 2.2.0 2025-11-06 [1] RSPM

pkgload 1.5.2 2026-04-22 [1] RSPM

pkgskills 0.0.0.9000 2026-05-27 [1] local

praise 1.0.0 2015-08-11 [1] RSPM

prettyunits 1.2.0 2023-09-24 [1] RSPM

processx 3.9.0 2026-04-22 [1] RSPM

profvis 0.4.0 2024-09-20 [1] RSPM

promises 1.5.0 2025-11-01 [1] RSPM

ps 1.9.3 2026-04-20 [1] RSPM

purrr 1.2.2 2026-04-10 [1] RSPM

qcthat 1.1.2 2026-05-27 [1] Github (Gilead-Public/qcthat@d0958dc)

R6 2.6.1 2025-02-15 [1] RSPM

ragg 1.5.2 2026-03-23 [1] RSPM

rappdirs 0.3.4 2026-01-17 [1] RSPM

rcmdcheck 1.4.0 2021-09-27 [1] RSPM

Rcpp 1.1.1-1.1 2026-04-24 [1] RSPM

rex 1.2.2 2026-03-28 [1] RSPM

rlang 1.2.0 2026-04-06 [1] RSPM

rmarkdown 2.31 2026-03-26 [1] RSPM

roxygen2 8.0.0 2026-05-01 [1] RSPM

rpart 4.1.27 2026-03-27 [2] CRAN (R 4.6.0)

rprojroot 2.1.1 2025-08-26 [1] RSPM

rrapply 1.2.8 2025-11-25 [1] RSPM

rstudioapi 0.18.0 2026-01-16 [1] RSPM

rversions 3.0.0 2025-10-09 [1] RSPM

sass 0.4.10 2025-04-11 [1] RSPM

sessioninfo 1.2.3 2025-02-05 [1] RSPM

shiny 1.13.0 2026-02-20 [1] RSPM

sourcetools 0.1.7-2 2026-03-28 [1] RSPM

spatial 7.3-18 2025-01-01 [2] CRAN (R 4.6.0)

splines 4.6.0 2026-04-24 [2] local

stats * 4.6.0 2026-04-24 [2] local

stats4 4.6.0 2026-04-24 [2] local

stbl 0.3.0.9000 2026-05-27 [1] Github (wranglezone/stbl@5a38548)

stringi 1.8.7 2025-03-27 [1] RSPM

stringr 1.6.0 2025-11-04 [1] RSPM

survival 3.8-6 2026-01-16 [2] CRAN (R 4.6.0)

sys 3.4.3 2024-10-04 [1] RSPM

systemfonts 1.3.2 2026-03-05 [1] RSPM

tcltk 4.6.0 2026-04-24 [2] local

testthat 3.3.2 2026-01-11 [1] RSPM

textshaping 1.0.5 2026-03-06 [1] RSPM

tibble 3.3.1 2026-01-11 [1] RSPM

tidyr 1.3.2 2025-12-19 [1] RSPM

tidyselect 1.2.1 2024-03-11 [1] RSPM

tinytex 0.59 2026-03-28 [1] RSPM

tools 4.6.0 2026-04-24 [2] local

urlchecker 1.0.1 2021-11-30 [1] RSPM

usethis 3.2.1 2025-09-06 [1] RSPM

utf8 1.2.6 2025-06-08 [1] RSPM

utils * 4.6.0 2026-04-24 [2] local

vctrs 0.7.3 2026-04-11 [1] RSPM

waldo 0.6.2 2025-07-11 [1] RSPM

whisker 0.4.1 2022-12-05 [1] RSPM

withr 3.0.2 2024-10-28 [1] RSPM

xfun 0.57 2026-03-20 [1] RSPM

xml2 1.5.2 2026-01-17 [1] RSPM

xopen 1.0.1 2024-04-25 [1] RSPM

xtable 1.8-8 2026-02-22 [1] RSPM

yaml 2.3.12 2025-12-10 [1] RSPM

zip 2.3.3 2025-05-13 [1] RSPM

[1] /usr/local/lib/R/site-library

[2] /usr/local/lib/R/library

[3] /__w/_temp/Library

  • ── Packages attached to the search path.

──────────────────────────────────────────────────────────────────────────────

@github-actions

github-actions Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

🌐 PR pkgdown deployed

This report was generated by this GitHub Actions job.

Last updated: 2026-05-27 02:26:10 UTC

Co-authored-by: jonthegeek <33983824+jonthegeek@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix locale setup in CI Dockerfile for robust build Make CI image locale setup portable across Rocker versions May 26, 2026
Copilot AI requested a review from jonthegeek May 26, 2026 23:37

@jonthegeek jonthegeek left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good as far as I can tell!

@jonthegeek
jonthegeek marked this pull request as ready for review May 27, 2026 02:24
@jonthegeek
jonthegeek requested a review from Copilot May 27, 2026 02:24

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes CI image builds across the Rocker R-version matrix by making locale generation portable (removing the dependency on /usr/share/locale/locale.alias) and explicitly setting runtime locale environment variables.

Changes:

  • Switch locale setup from localedef ... -A /usr/share/locale/locale.alias ... to a /etc/locale.gen + locale-gen en_US.UTF-8 flow.
  • Export both LANG and LC_ALL as en_US.UTF-8 to keep locale behavior explicit inside the container.

@jonthegeek
jonthegeek merged commit 796e7c7 into main May 27, 2026
12 checks passed
@jonthegeek
jonthegeek deleted the copilot/fix-ci-image-build-failure branch May 27, 2026 03:04
github-actions Bot pushed a commit that referenced this pull request May 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants