返回技能列表

submit-to-cran

pjt222
更新于 2 days ago
8 次查看
17
2
17
在 GitHub 上查看
design

关于

This skill provides a complete workflow for submitting R packages to CRAN, handling both initial releases and updates. It automates pre-submission checks, prepares the required `cran-comments.md` file, and guides you through the final submission process. Use it when your package is ready for CRAN release or when re-submitting after reviewer feedback.

快速安装

Claude Code

推荐
主要方式
npx skills add pjt222/agent-almanac -a claude-code
插件命令备选方式
/plugin add https://github.com/pjt222/agent-almanac
Git 克隆备选方式
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/submit-to-cran

在 Claude Code 中复制并粘贴此命令以安装该技能

技能文档

Submit to CRAN

Execute full CRAN submission workflow from pre-flight checks through submission.

When Use

  • Package ready for initial CRAN release
  • Submitting updated version of existing CRAN package
  • Re-submitting after CRAN reviewer feedback

Inputs

  • Required: R package passing local R CMD check with 0 errors and 0 warnings
  • Required: Updated version number in DESCRIPTION
  • Required: Updated NEWS.md with changes for this version
  • Optional: Previous CRAN reviewer comments (for re-submissions)

Steps

Step 1: Version and NEWS Check

Verify DESCRIPTION has correct version:

desc::desc_get_version()

Verify NEWS.md has entry for this version. Entry should summarize user-facing changes.

Got: Version follows semantic versioning. NEWS.md has matching entry for this version.

If fail: Update version with usethis::use_version() (choose "major", "minor", or "patch"). Add NEWS.md entry summarizing user-facing changes.

Step 2: Local R CMD Check

devtools::check()

Got: 0 errors, 0 warnings, 0 notes (1 note acceptable for new submissions: "New submission").

If fail: Fix all errors and warnings before proceeding. Read check log at <pkg>.Rcheck/00check.log for details. Notes should be explained in cran-comments.md.

Step 3: Spell Check

devtools::spell_check()

Add legitimate words to inst/WORDLIST (one word per line, sorted alphabetical).

Got: No unexpected misspellings. All flagged words either corrected or added to inst/WORDLIST.

If fail: Fix genuine misspellings. Legitimate technical terms? Add to inst/WORDLIST (one word per line, alphabetical sorted).

Step 4: URL Check

urlchecker::url_check()

Got: All URLs return HTTP 200. No broken or redirected links.

If fail: Replace broken URLs. Use \doi{} for DOI links instead of raw URLs. Remove links to resources no longer exist.

Step 5: Win-Builder Checks

devtools::check_win_devel()
devtools::check_win_release()

Wait for email results (usual 15-30 minutes).

Got: 0 errors, 0 warnings on both Win-builder release and devel. Results arrive by email within 15-30 minutes.

If fail: Address platform-specific issues. Common causes: different compiler warnings, missing system dependencies, path separator differences. Fix local, re-submit to Win-builder.

Step 6: R-hub Check

rhub::rhub_check()

Checks on multiple platforms (Ubuntu, Windows, macOS).

Got: All platforms pass with 0 errors and 0 warnings.

If fail: Specific platform fails? Check R-hub build log for platform-specific errors. Use testthat::skip_on_os() or conditional code for platform-dependent behavior.

Step 7: Prepare cran-comments.md

Create or update cran-comments.md in package root:

## 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.

Updates? Include:

  • What changed (brief)
  • Response to any previous reviewer feedback
  • Reverse dependency check results if applicable

Got: cran-comments.md accurately summarizes check results across all test environments and explains any notes.

If fail: Check results differ across platforms? Document all variations. CRAN reviewers will check these claims against own tests.

Step 8: Final Pre-flight

# One last check
devtools::check()

# Verify the built tarball
devtools::build()

Got: Final devtools::check() passes clean. .tar.gz tarball built in parent directory.

If fail: Last-minute issue appears? Fix, re-run all checks from Step 2. Never submit with known failures.

Step 9: Submit

devtools::release()

Runs interactive checks and submits. Answer all questions honest.

Alternatively, submit manual at https://cran.r-project.org/submit.html by uploading tarball.

Got: Confirmation email from CRAN arrives within minutes. Click confirmation link to finalize submission.

If fail: Check email for rejection reasons. Common issues: examples too slow, missing \value tags, non-portable code. Fix issues, re-submit, note in cran-comments.md what changed.

Step 10: Post-Submission

After acceptance:

# Tag the release
usethis::use_github_release()

# Bump to development version
usethis::use_dev_version()

Got: GitHub release created with accepted version tag. DESCRIPTION bumped to development version (x.y.z.9000).

If fail: GitHub release fails? Create manual with gh release create. CRAN acceptance delayed? Wait for confirmation email before tagging.

Checks

  • R CMD check returns 0 errors, 0 warnings on local machine
  • Win-builder passes (release + devel)
  • R-hub passes on all tested platforms
  • cran-comments.md accurate describes check results
  • All URLs valid
  • No spelling errors
  • Version number correct and incremented
  • NEWS.md current
  • DESCRIPTION metadata complete and accurate

Pitfalls

  • Examples too slow: Wrap expensive examples in \donttest{}. CRAN enforces time limits.
  • Non-standard file/dir names: Avoid files that trigger CRAN notes (check .Rbuildignore)
  • Missing \value in docs: All exported functions need @return tag
  • Vignette build failures: Ensure vignettes build in clean environment without your .Renviron
  • DESCRIPTION Title format: Must be Title Case, no period at end, no "A Package for..."
  • Forget reverse dependency checks: Updates? Run revdepcheck::revdep_check()

Examples

# Full pre-submission workflow
devtools::spell_check()
urlchecker::url_check()
devtools::check()
devtools::check_win_devel()
rhub::rhub_check()
# Wait for results...
devtools::release()

See Also

  • release-package-version - version bumping, git tagging
  • write-roxygen-docs - ensure documentation meets CRAN standards
  • setup-github-actions-ci - CI checks that mirror CRAN expectations
  • build-pkgdown-site - documentation site for accepted packages

GitHub 仓库

pjt222/agent-almanac
路径: i18n/caveman/skills/submit-to-cran
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

相关推荐技能

content-collections

Content Collections 是一个 TypeScript 优先的构建工具,可将本地 Markdown/MDX 文件转换为类型安全的数据集合。它专为构建博客、文档站和内容密集型 Vite+React 应用而设计,提供基于 Zod 的自动模式验证。该工具涵盖从 Vite 插件配置、MDX 编译到生产环境部署的完整工作流。

查看技能

polymarket

这个Claude Skill为开发者提供完整的Polymarket预测市场开发支持,涵盖API调用、交易执行和市场数据分析。关键特性包括实时WebSocket数据流,可监控实时交易、订单和市场动态。开发者可用它构建预测市场应用、实施交易策略并集成实时市场预测功能。

查看技能

creating-opencode-plugins

该Skill帮助开发者创建OpenCode插件,用于接入命令、文件、LSP等25+种事件。它提供了插件结构、事件API规范和JavaScript/TypeScript实现模式,适合需要拦截操作、扩展功能或自定义事件处理的场景。开发者可通过它快速构建响应式模块来增强OpenCode AI助手的能力。

查看技能

sglang

SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。

查看技能