submit-to-cran
Acerca de
Esta habilidad proporciona un flujo de trabajo completo para enviar paquetes de R a CRAN, cubriendo lanzamientos iniciales, actualizaciones y reenvíos. Automatiza las verificaciones previas al envío, incluyendo validación local, pruebas en win-builder y R-hub, junto con la preparación de documentación requerida como cran-comments.md. Úsela cuando su paquete de R esté listo para lanzarse en CRAN o al responder a comentarios de revisores.
Instalación rápida
Claude Code
Recomendadonpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/submit-to-cranCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
提交至 CRAN
執行完整 CRAN 提交流程,自起飛前檢查至提交。
適用時機
- 套件已備好初次 CRAN 發布
- 提交既有 CRAN 套件之更新版
- 收 CRAN 審查者回饋後重新提交
輸入
- 必要:通過本機
R CMD check之 R 套件,0 錯誤、0 警告 - 必要:DESCRIPTION 中之版本號已更新
- 必要:NEWS.md 含此版本之變更
- 選擇性:先前 CRAN 審查者意見(重新提交時)
步驟
步驟一:版本與 NEWS 檢查
驗 DESCRIPTION 含正確版本:
desc::desc_get_version()
驗 NEWS.md 有此版本之條目。條目應總結用戶可見之變更。
預期: 版本遵循語義化版本控制。NEWS.md 含此版本之對應條目。
失敗時: 用 usethis::use_version() 更版本(擇「major」、「minor」或「patch」)。為 NEWS.md 加總結用戶可見變更之條目。
步驟二:本機 R CMD Check
devtools::check()
預期: 0 錯誤、0 警告、0 註記(新提交可接受 1 註記:「New submission」)。
失敗時: 進行前修復所有錯誤與警告。閱讀 <pkg>.Rcheck/00check.log 之檢查日誌以了解詳情。註記應於 cran-comments.md 中說明。
步驟三:拼字檢查
devtools::spell_check()
將合理之詞加入 inst/WORDLIST(一行一詞、字母序排)。
預期: 無意外拼字錯。所有標出之詞已修正或加入 inst/WORDLIST。
失敗時: 修真正之拼字錯。對合理之技術術語,加入 inst/WORDLIST(一行一詞、字母序排)。
步驟四:URL 檢查
urlchecker::url_check()
預期: 所有 URL 回 HTTP 200。無損壞或重定向之連結。
失敗時: 替換損壞 URL。對 DOI 連結用 \doi{} 而非生 URL。移除已不存在之資源連結。
步驟五:Win-Builder 檢查
devtools::check_win_devel()
devtools::check_win_release()
待郵件結果(通常 15-30 分鐘)。
預期: Win-builder release 與 devel 上 0 錯誤、0 警告。結果於 15-30 分鐘內以郵件抵達。
失敗時: 處理平台特有問題。常見因:不同編譯器警告、缺系統依賴、路徑分隔符差異。本機修復並重提至 Win-builder。
步驟六:R-hub 檢查
rhub::rhub_check()
此於多平台檢查(Ubuntu、Windows、macOS)。
預期: 所有平台以 0 錯誤、0 警告通過。
失敗時: 若某平台失敗,檢 R-hub 建置日誌找平台特有錯。對平台依賴行為用 testthat::skip_on_os() 或條件碼。
步驟七:準備 cran-comments.md
於套件根建立或更新 cran-comments.md:
## R CMD check results
0 errors | 0 warnings | 1 note
* This is a new release.
## Test environments
* local: Windows 11, R 4.5.0
* win-builder: R-release, R-devel
* R-hub: ubuntu-latest (R-release), windows-latest (R-release), macos-latest (R-release)
## Downstream dependencies
There are currently no downstream dependencies for this package.
對更新,含:
- 變更為何(簡述)
- 對任何先前審查者回饋之回應
- 反向依賴檢查結果(如適用)
預期: cran-comments.md 準確總結跨所有測試環境之檢查結果並說明任何註記。
失敗時: 若檢查結果於平台間差,記錄所有差異。CRAN 審查者將以其自身測試核驗此等聲明。
步驟八:最終起飛前
# One last check
devtools::check()
# Verify the built tarball
devtools::build()
預期: 最終 devtools::check() 乾淨通過。.tar.gz tarball 於父目錄建成。
失敗時: 若末刻問題現,修之並自步驟二重跑所有檢查。勿以已知失敗提交。
步驟九:提交
devtools::release()
此跑互動式檢查並提交。誠實答所有問題。
或於 https://cran.r-project.org/submit.html 手動上傳 tarball 提交。
預期: CRAN 之確認郵件數分鐘內抵。點確認連結以完成提交。
失敗時: 檢郵件以求拒因。常見問題:例執行過慢、缺 \value 標籤、不可移植之代碼。修問題並重提,於 cran-comments.md 中註明變更。
步驟十:提交後
接受後:
# Tag the release
usethis::use_github_release()
# Bump to development version
usethis::use_dev_version()
預期: GitHub 發布以接受版本之標籤建立。DESCRIPTION 升至開發版本(x.y.z.9000)。
失敗時: 若 GitHub 發布失敗,以 gh release create 手動建立。若 CRAN 接受延遲,待確認郵件再標籤。
驗證
- 本機
R CMD check回 0 錯誤、0 警告 - Win-builder 通過(release + devel)
- R-hub 於所有測試平台通過
-
cran-comments.md準確描述檢查結果 - 所有 URL 有效
- 無拼字錯
- 版本號正確且已遞增
- NEWS.md 已更新
- DESCRIPTION 元資料完整且正確
常見陷阱
- 例執行過慢:將昂貴之例包入
\donttest{}。CRAN 強制時間限制。 - 非標準檔/目錄名:避免會觸發 CRAN 註記之檔(檢
.Rbuildignore) - 文件缺
\value:所有匯出函式需@return標籤 - vignette 建置失敗:確保 vignettes 於無你
.Renviron之乾淨環境中建置 - DESCRIPTION Title 格式:須為 Title Case、結尾無句點、無「A Package for...」
- 遺忘反向依賴檢查:對更新,跑
revdepcheck::revdep_check()
範例
# Full pre-submission workflow
devtools::spell_check()
urlchecker::url_check()
devtools::check()
devtools::check_win_devel()
rhub::rhub_check()
# Wait for results...
devtools::release()
相關技能
release-package-version— 版本升級與 git 標籤write-roxygen-docs— 確保文件符合 CRAN 標準setup-github-actions-ci— 鏡像 CRAN 期望之 CI 檢查build-pkgdown-site— 已接受套件之文件站
Repositorio GitHub
Habilidades relacionadas
content-collections
MetaEsta habilidad proporciona una configuración probada en producción para Content Collections, una herramienta centrada en TypeScript que transforma archivos Markdown/MDX en colecciones de datos con tipado seguro mediante validación Zod. Úsala al construir blogs, sitios de documentación o aplicaciones Vite + React con mucho contenido para garantizar seguridad de tipos y validación automática de contenido. Abarca todo, desde la configuración del plugin de Vite y compilación MDX hasta la optimización de despliegue y validación de esquemas.
polymarket
MetaEsta habilidad permite a los desarrolladores crear aplicaciones con la plataforma de mercados de predicción Polymarket, incluyendo la integración de API para operaciones y datos de mercado. También proporciona transmisión de datos en tiempo real a través de WebSocket para monitorear operaciones en vivo y actividad del mercado. Úsela para implementar estrategias de trading o crear herramientas que procesen actualizaciones de mercado en tiempo real.
creating-opencode-plugins
MetaEsta habilidad ayuda a los desarrolladores a crear complementos de OpenCode que se conectan a más de 25 tipos de eventos, como comandos, archivos y operaciones LSP. Proporciona la estructura del complemento, las especificaciones de la API de eventos y los patrones de implementación para módulos en JavaScript/TypeScript. Úsala cuando necesites interceptar, monitorear o extender el ciclo de vida del asistente de IA de OpenCode con lógica personalizada basada en eventos.
sglang
MetaSGLang es un framework de alto rendimiento para el servicio de LLM que se especializa en generación rápida y estructurada para JSON, expresiones regulares y flujos de trabajo de agentes utilizando su caché de prefijos RadixAttention. Ofrece una inferencia significativamente más rápida, especialmente para tareas con prefijos repetidos, lo que lo hace ideal para salidas complejas y estructuradas, y conversaciones multiturno. Elige SGLang sobre alternativas como vLLM cuando necesites decodificación restringida o estés construyendo aplicaciones con uso extensivo de prefijos compartidos.
