試環(huán)境矩陣與 R CMD check 質(zhì)量門(mén)禁解析)
數(shù)據(jù)工程數(shù)據(jù)分析大數(shù)據(jù)【免費(fèi)下載鏈接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing項(xiàng)目地址https://gitcode.com/gh_mirrors/arrow12/arrow點(diǎn)擊查看免費(fèi)下載Apache Arrow 的 R 語(yǔ)言接口r/目錄下的arrow包在向 CRAN 提交新版本時(shí)必須隨源碼包附帶一份名為cran-comments.md的提交注釋文件向 CRAN 維護(hù)者說(shuō)明「在哪些平臺(tái)上完成過(guò)驗(yàn)證」以及「R CMD check的結(jié)果如何」。本文以倉(cāng)庫(kù)中的 cran-comments.md 為骨架結(jié)合 PACKAGING.md 發(fā)布檢查清單、Makefile 構(gòu)建目標(biāo)與 r_test.sh 中 CRAN 級(jí)檢查的實(shí)現(xiàn)逐段拆解這份文件的結(jié)構(gòu)、每個(gè)測(cè)試環(huán)境的真實(shí)含義以及 Arrow R 包提交 CRAN 前完整的質(zhì)量門(mén)禁流程。讀完本文你將掌握如何解讀、撰寫(xiě)并維護(hù)一份合格的 CRAN 提交注釋以及 Arrow R 包從構(gòu)建到提交的完整檢查鏈路。一、cran-comments.md 是什么CRAN 提交注釋在 Arrow R 包中的角色CRAN 要求每個(gè)提交的包在源碼包根目錄包含cran-comments.md用于向 CRAN 維護(hù)者volunteers說(shuō)明本次提交的驗(yàn)證情況。它通常包含兩大部分Test environments列出本次發(fā)布前運(yùn)行R CMD check的操作系統(tǒng)、編譯器與 R 版本組合R CMD check results聲明檢查結(jié)果的 ERROR / WARNING / NOTE 情況并對(duì)任何無(wú)法消除的 NOTE 給出解釋。Arrow 倉(cāng)庫(kù)中的 cran-comments.md 正是這一標(biāo)準(zhǔn)結(jié)構(gòu)的真實(shí)范例。它位于r/目錄下與包描述文件 DESCRIPTION、發(fā)布清單 PACKAGING.md 同處一地是 R 包發(fā)布流程的「最后一公里」產(chǎn)物——只有當(dāng) PACKAGING.md 中列出的所有檢查步驟全部通過(guò)后這份注釋才會(huì)隨arrow_X.X.X.tar.gz一起上傳到 CRAN 提交頁(yè)面。二、Test environments 部分逐行解析原文完整列出的測(cè)試環(huán)境如下* Debian Linux, GCC, R-devel/R-patched/R-release * Fedora Linux, GCC/clang, R-devel * Ubuntu Linux 16.04 LTS, R-release, GCC * win-builder (R-devel and R-release) * macOS 10.14, R-oldrel2.1 為什么必須聲明測(cè)試環(huán)境CRAN 維護(hù)者會(huì)對(duì)照這份清單核驗(yàn)提交者是否覆蓋了足夠多的平臺(tái)組合。R 生態(tài)中一個(gè)共識(shí)是只有在多個(gè)操作系統(tǒng)、編譯器、R 版本上都能通過(guò)R CMD check的包才適合進(jìn)入 CRAN。Arrow 作為同時(shí)綁定 C 原生庫(kù)的包詳見(jiàn)下文對(duì)編譯器差異、鏈接行為尤其敏感因此環(huán)境矩陣的覆蓋度直接關(guān)系到提交能否被接受。2.2 R 版本分支的含義清單中的R-devel、R-patched、R-release、R-oldrel是 R 官方定義的四個(gè)版本分支含義固定分支含義R-devel正在開(kāi)發(fā)的下一代 R未發(fā)布用于提前發(fā)現(xiàn) API 變更帶來(lái)的兼容問(wèn)題R-patched當(dāng)前發(fā)布版的補(bǔ)丁分支bugfix 版本R-release當(dāng)前正式發(fā)布版R-oldrel上一個(gè)正式發(fā)布版舊版本Arrow 的覆蓋策略是在 Debian 上同時(shí)跑R-devel/R-patched/R-release三個(gè)分支GCC 編譯器在 Fedora 上跑R-devel并同時(shí)用 GCC 和 clang 兩種編譯器在 Ubuntu LTS 上跑R-release在 macOS 上跑R-oldrel。這樣組合出「新版本 R 老版本 R」「GCC clang」「Linux Windows macOS」三個(gè)維度的交叉覆蓋。2.3 平臺(tái)與編譯器的分工Debian Linux GCCLinux 上的主測(cè)試平臺(tái)覆蓋三個(gè) R 版本分支是環(huán)境矩陣的中堅(jiān)Fedora Linux GCC/clang額外引入 clang 編譯器用于捕獲 GCC 與 clang 在 C 編譯如模板實(shí)例化、告警級(jí)別上的差異——這對(duì) Arrow 這種大量使用 C17 模板與表達(dá)式求值引擎的包尤為重要Ubuntu 16.04 LTS R-release GCC覆蓋長(zhǎng)期支持版 LTS 發(fā)行版貼近多數(shù)生產(chǎn)服務(wù)器環(huán)境win-builder (R-devel and R-release)win-builder 是 CRAN 官方提供的 Windows 遠(yuǎn)程檢查服務(wù)通過(guò)上傳*.tar.gz觸發(fā)用于在 Windows 工具鏈Rtools上驗(yàn)證R CMD check是必須的一環(huán)macOS 10.14 R-oldrel覆蓋 Apple 平臺(tái)的舊版本 R驗(yàn)證與 macOS 系統(tǒng)庫(kù)的鏈接兼容性。需要說(shuō)明原文中的 Ubuntu 16.04 與 macOS 10.14 是這份文件撰寫(xiě)時(shí)使用的具體發(fā)行版版本號(hào)屬于歷史記錄當(dāng)前倉(cāng)庫(kù)的 CI 環(huán)境以 Docker 鏡像形式維護(hù)于 ci/docker/如ubuntu-22.04-cpp.dockerfile、fedora-39-cpp.dockerfile等發(fā)布前應(yīng)依據(jù)當(dāng)時(shí)實(shí)際使用的環(huán)境更新此清單。三、R CMD check results 部分逐行解析原文的檢查結(jié)果聲明只有一句話但信息量不小There were no ERRORs or WARNINGs. On some platforms, there is a NOTE about the installed package size.3.1 R CMD check 的三級(jí)結(jié)果R CMD check對(duì)包進(jìn)行檢查后輸出三個(gè)級(jí)別的結(jié)論CRAN 的容忍度完全不同級(jí)別含義CRAN 態(tài)度ERROR致命錯(cuò)誤安裝失敗、測(cè)試失敗、文檔錯(cuò)誤直接拒收WARNING非致命但可疑的問(wèn)題未使用變量、文檔不一致等通常拒收必須清零NOTE提示性信息包體積過(guò)大、URL 無(wú)法驗(yàn)證等可以接受但必須在cran-comments.md中說(shuō)明原因Arrow 的目標(biāo)是 ERROR 與 WARNING 全平臺(tái)清零NOTE 則逐條說(shuō)明。3.2 「installed package size」NOTE 的根源這個(gè) NOTE 的產(chǎn)生與 Arrow R 包的架構(gòu)直接相關(guān)。arrow并非純 R 包它通過(guò) cpp11 綁定 Arrow C 庫(kù)并且為了在未安裝系統(tǒng)級(jí) libarrow 的環(huán)境上也能編譯安裝發(fā)布流程會(huì)把 C 源碼內(nèi)嵌進(jìn) R 包。證據(jù)在 Makefile 的sync-cpp目標(biāo)中sync-cpp: cp ../NOTICE.txt inst/NOTICE.txt rsync --archive --delete --exclude apidoc --exclude build --exclude ... ../cpp tools/ cp -p ../.env tools/dotenv ...它把倉(cāng)庫(kù)根目錄的 cpp/ 同步到tools/cpp/僅保留源碼與構(gòu)建所需部分剔除src/gandiva、src/jni、測(cè)試文件等再由 PACKAGING.md 中的make build步驟「copies Arrow C into tools/cpp, prunes some unnecessary components, and runsR CMD build」。因此最終生成的arrow_X.X.X.tar.gz攜帶整套 C 源碼安裝包體積遠(yuǎn)超普通 R 包CRAN 便會(huì)給出「package size」NOTE。這正是注釋中「on some platforms, there is a NOTE」需要主動(dòng)說(shuō)明的原因——體積大是設(shè)計(jì)使然而非打包失誤。3.3 如何確認(rèn) NOTE 的合理性發(fā)布前可通過(guò) r/tools/check-versions.R 與 r/tools/nixlibs.R 中的邏輯核對(duì)內(nèi)嵌 C 庫(kù)版本與包版本的一致性nixlibs.R甚至?xí)谖雌ヅ涞筋A(yù)期 nightly 版本時(shí)回退到源碼構(gòu)建并輸出日志確保體積增長(zhǎng)可解釋、可復(fù)現(xiàn)。四、Arrow R 包提交 CRAN 前的完整檢查鏈路cran-comments.md是檢查鏈路的終點(diǎn)產(chǎn)物其前提是 PACKAGING.md 中一整套清單全部落實(shí)。以下按執(zhí)行順序梳理關(guān)鍵環(huán)節(jié)。4.1 本地構(gòu)建與檢查make build / make check / make release倉(cāng)庫(kù) r/Makefile 提供了三個(gè)逐級(jí)遞進(jìn)的入口build: doc sync-cpp R CMD build ${args} . check: build -export _R_CHECK_CRAN_INCOMING_REMOTE_FALSE export ARROW_R_DEV$(ARROW_R_DEV) export _R_CHECK_TESTS_NLINES_0 R CMD check --as-cran arrow_$(VERSION).tar.gz release: build -export _R_CHECK_TESTS_NLINES_0 R CMD check --as-cran arrow_$(VERSION).tar.gzmake build先執(zhí)行docroxygen 文檔重生成與sync-cpp內(nèi)嵌 C 源碼再R CMD build生成源碼包arrow_$(VERSION).tar.gzmake check對(duì)生成的包執(zhí)行R CMD check --as-cran并關(guān)閉_R_CHECK_CRAN_INCOMING_REMOTE_避免遠(yuǎn)程 URL 檢查拖慢/誤報(bào)--as-cran是 CRAN 官方推薦的最嚴(yán)格檢查模式等價(jià)于盡量模擬 CRAN 的檢查環(huán)境make release面向最終發(fā)布版同樣以--as-cran檢查但保留遠(yuǎn)程檢查項(xiàng)。注意check目標(biāo)設(shè)置ARROW_R_DEV$(ARROW_R_DEV)默認(rèn)TRUE。ARROW_R_DEV在 Arrow R 包開(kāi)發(fā)中會(huì)啟用data-raw/codegen.R的代碼生成邏輯與額外的編譯告警豁免具體可參考 workflow.Rmd 中「C code」一節(jié)的說(shuō)明。4.2 devtools::check_built 與反向依賴檢查PACKAGING.md 要求在 release candidate 切出后devtools::check_built(arrow_X.X.X.tar.gz)對(duì)構(gòu)建產(chǎn)物直接執(zhí)行完整檢查同時(shí)通過(guò)archery docker run r-revdepcheck運(yùn)行反向依賴reverse dependency檢查評(píng)估依賴 arrow 的上游包是否會(huì)因本次發(fā)布而破壞——這對(duì)應(yīng) cran-comments.md 中「所有平臺(tái)無(wú) ERROR/WARNING」這一聲明的支撐證據(jù)。4.3 win-builder 與 MacBuilder 的外部驗(yàn)證清單要求將生成的.tar.gz上傳到 win-builderr-devel與 MacBuilder確認(rèn) Windows 與 macOS 上的檢查干凈后才可提交。這也解釋了cran-comments.md環(huán)境清單中win-builder (R-devel and R-release)一行的由來(lái)——它不是口頭聲明而是有實(shí)際上傳驗(yàn)證記錄的。4.4 CI 中 CRAN 級(jí)檢查的實(shí)現(xiàn)r_test.sh倉(cāng)庫(kù) CI 通過(guò) r_test.sh 復(fù)刻 CRAN 檢查行為其中關(guān)鍵的環(huán)境變量設(shè)置完整對(duì)應(yīng)「模擬 CRAN」的目標(biāo)export _R_CHECK_CRAN_INCOMING_REMOTE_FALSE export _R_CHECK_DONTTEST_EXAMPLES_TRUE export _R_CHECK_FORCE_SUGGESTS_FALSE export _R_CHECK_LIMIT_CORES_FALSE export _R_CHECK_TESTS_NLINES_0 export _R_CHECK_STOP_ON_INVALID_NUMERIC_VERSION_INPUTS_TRUE_R_CHECK_DONTTEST_EXAMPLES_TRUE強(qiáng)制執(zhí)行文檔中\(zhòng)donttest示例R ≥ 4.0 的行為_(kāi)R_CHECK_FORCE_SUGGESTS_FALSESuggests 依賴未安裝時(shí)允許繼續(xù)Arrow 的 Suggests 列表很長(zhǎng)見(jiàn) DESCRIPTION_R_CHECK_STOP_ON_INVALID_NUMERIC_VERSION_INPUTS_TRUE將非法版本號(hào)輸入由告警升級(jí)為錯(cuò)誤確保發(fā)布前暴露。隨后腳本內(nèi)嵌的 R 代碼通過(guò)rcmdcheck::rcmdcheck(build_args ..., args c(--as-cran, ...), error_on warning)執(zhí)行檢查只要出現(xiàn) warning 即判定失敗——這與cran-comments.md中「no ERRORs or WARNINGs」的聲明完全一致。另外腳本通過(guò)NOT_CRAN環(huán)境變量區(qū)分兩種模式as_cran - !identical(tolower(Sys.getenv(NOT_CRAN)), true) if (as_cran) { args - --as-cran } else { args - c(--no-manual, --ignore-vignettes) }NOT_CRANtrue默認(rèn)開(kāi)發(fā)模式表示非 CRAN 環(huán)境跳過(guò)手冊(cè)構(gòu)建、跳過(guò) vignetteNOT_CRAN為空時(shí)則以--as-cran全量模式運(yùn)行模擬 CRAN 的嚴(yán)格檢查。4.5 提交前的最后動(dòng)作按 PACKAGING.md 的「CRAN submission」清單移除 README 中的 badge避免 URL 檢查誤報(bào)運(yùn)行urlchecker::url_check()校驗(yàn)文檔鏈接執(zhí)行Rscript tools/update-checksums.R libarrow version下載預(yù)編譯二進(jìn)制校驗(yàn)和到tools/目錄重新生成arrow_X.X.X.tar.gzmake build上傳至 CRAN 提交頁(yè)面并確認(rèn)提交郵件。五、為 Arrow R 包維護(hù) cran-comments.md 的實(shí)操建議結(jié)合以上分析當(dāng)需要更新 cran-comments.md 時(shí)可按如下清單核對(duì)環(huán)境矩陣與事實(shí)對(duì)齊對(duì)照 CI 與本地實(shí)際運(yùn)行R CMD check --as-cran的平臺(tái)Debian/Fedora/Ubuntu 的 Docker 鏡像見(jiàn) ci/docker/Windows 見(jiàn) win-builder 結(jié)果郵件逐條更新「Test environments」R 分支覆蓋完整確認(rèn)R-devel、R-patched、R-release均有覆蓋macOS 側(cè)可用R-oldrel補(bǔ)齊舊版本維度結(jié)果聲明準(zhǔn)確ERROR/WARNING 必須為 0任何 NOTE 都必須在注釋中解釋原因NOTE 解釋可溯源例如「installed package size」需說(shuō)明體積來(lái)自內(nèi)嵌的 Arrow C 庫(kù)Makefile 的sync-cpp目標(biāo)并確保tools/cpp的同步與版本校驗(yàn)nixlibs.R、check-versions.R均已通過(guò)與發(fā)布清單聯(lián)動(dòng)cran-comments.md的最終版本應(yīng)在 PACKAGING.md 全部清單完成、make release檢查通過(guò)后定稿避免聲明與實(shí)際檢查結(jié)果脫節(jié)。六、小結(jié)cran-comments.md雖然只有寥寥數(shù)行卻是 Apache Arrow R 包質(zhì)量門(mén)禁的「對(duì)外公示」。其背后是 PACKAGING.md 數(shù)十項(xiàng)檢查、Makefile 的build/check/release目標(biāo)、r_test.sh 中以--as-cran為核心的嚴(yán)格檢查實(shí)現(xiàn)以及 win-builder/MacBuilder 的外部驗(yàn)證。理解了這份文件的結(jié)構(gòu)與每個(gè)字段的出處就掌握了 Arrow R 包從源碼到 CRAN 的完整驗(yàn)證鏈路——無(wú)論你是要參與 Arrow R 包的發(fā)布還是維護(hù)自己的 R 包提交這份「測(cè)試環(huán)境矩陣 檢查結(jié)果聲明」的范式都值得直接復(fù)用。贊分享數(shù)據(jù)工程數(shù)據(jù)分析大數(shù)據(jù)【免費(fèi)下載鏈接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing項(xiàng)目地址https://gitcode.com/gh_mirrors/arrow12/arrow點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Apache Arrow R 包 CRAN 提交指南基于 cran-comments.md 的測(cè)試環(huán)境矩陣與 R CMD check 檢查標(biāo)準(zhǔn)Apache Arrow R 包 CRAN 提交指南基于 cran comments.md 的測(cè)試環(huán)境矩陣與 R CMD check 檢查標(biāo)準(zhǔn) 在 Apach數(shù)據(jù)工程大數(shù)據(jù)序列化數(shù)據(jù)分析Apache Arrow R 包 CRAN 打包全流程基于 r/PACKAGING.md 的發(fā)布檢查單深度解析Apache Arrow R 包 CRAN 打包全流程基于 r/PACKAGING.md 的發(fā)布檢查單深度解析 Apache Arrow 的 R 接口包 r大數(shù)據(jù)數(shù)據(jù)分析數(shù)據(jù)工程序列化SparkR 發(fā)布到 CRAN 的完整指南源碼包構(gòu)建、R CMD check 檢查與發(fā)布流程Apache SparkSparkR 發(fā)布到 CRAN 的完整指南源碼包構(gòu)建、R CMD check 檢查與發(fā)布流程Apache Spark Apache Spark 的 R 前大數(shù)據(jù)數(shù)據(jù)分析批處理流處理機(jī)器學(xué)習(xí)圖計(jì)算上一篇Hyperf框架中EventStream流式響應(yīng)報(bào)錯(cuò)問(wèn)題解析下一篇Xmake項(xiàng)目中C模塊依賴檢測(cè)的變量命名問(wèn)題分析創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考