release-post
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePackage Release Post
包发布博文
Create professional R/Python package release blog posts following Tidyverse or Shiny blog conventions.
创建遵循Tidyverse或Shiny博客规范的专业R/Python包发布博文。
Quick Start
快速开始
- Identify the blog platform: Tidyverse (tidyverse.org) or Shiny (shiny.posit.co)
- Verify NEWS.md or changelog exists for the package
- Gather package info: name, version, repository (e.g., "tidyverse/dplyr")
- Follow the workflow below
- Use to generate acknowledgments
scripts/get_contributors.R - Reference the appropriate formatting guide for final polish
- 确定博客平台:Tidyverse(tidyverse.org)或Shiny(shiny.posit.co)
- 确认包存在NEWS.md或更新日志
- 收集包信息:名称、版本、代码仓库(例如"tidyverse/dplyr")
- 遵循下方工作流程
- 使用生成致谢内容
scripts/get_contributors.R - 参考对应的格式指南进行最终润色
Platform Selection
平台选择
This skill supports two blog platforms with different formatting requirements:
-
Tidyverse blog (tidyverse.org)
- Uses hugodown
- R packages primarily
- More rigid structure and conventions
- See
references/tidyverse-formatting.md
-
Shiny blog (shiny.posit.co)
- Uses Quarto
- R and Python packages
- More flexible, feature-focused structure
- See
references/shiny-formatting.md
First, determine which platform the post is for, then follow the general workflow and apply platform-specific formatting.
本技能支持两个格式要求不同的博客平台:
-
Tidyverse博客(tidyverse.org)
- 使用hugodown
- 主要面向R包
- 结构和规范更严格
- 参考
references/tidyverse-formatting.md
-
Shiny博客(shiny.posit.co)
- 使用Quarto
- 支持R和Python包
- 结构更灵活,以功能为核心
- 参考
references/shiny-formatting.md
首先请确定博文对应的发布平台,然后遵循通用工作流并应用平台特定的格式要求。
General Workflow
通用工作流
These steps apply to both platforms. Content guidelines are based on Tidyverse best practices but adapt them as needed for Shiny posts.
以下步骤适用于两个平台。内容规范基于Tidyverse最佳实践,可根据Shiny博文需求灵活调整。
Step 1: Gather Information
步骤1:收集信息
Collect required information:
- Platform: Tidyverse or Shiny blog?
- Package name and version: e.g., "dplyr 1.2.0" or "shiny 1.9.0"
- Repository: GitHub repo in "owner/repo" format
- Package language: R or Python
- NEWS content: Read the package's NEWS.md, CHANGELOG, or NEWS
- Package description: One-sentence core purpose
- Previous release tag: For contributor fetching (optional)
- Featured image: For frontmatter (optional but recommended)
收集所需的基础信息:
- 发布平台:Tidyverse还是Shiny博客?
- 包名称与版本:例如"dplyr 1.2.0"或"shiny 1.9.0"
- 代码仓库:格式为"所有者/仓库名"的GitHub仓库地址
- 包开发语言:R或Python
- NEWS内容:读取包的NEWS.md、CHANGELOG或NEWS文件
- 包描述:一句话说明包的核心用途
- 上一个版本标签:用于拉取贡献者信息(可选)
- 特色图片:用于前言元数据(可选但推荐提供)
Step 2: Structure the Post
步骤2:搭建博文结构
Create the post outline following this order:
-
Frontmatter: Platform-specific YAML (see formatting references)
-
Title and Opening:
- Title: Package name and version
- Opening: Announcement with one-sentence package description
- Installation: Code block with installation command
- Overview: Brief summary with link to full release notes
-
Main Content (choose appropriate sections):
- Migration guide (if breaking changes) - Always first when present
- Lifecycle changes (deprecations, soft-deprecations, defunct)
- Feature sections (one per major feature, descriptive headings)
- Minor improvements (bulleted list)
-
Acknowledgements (when appropriate):
- Use
scripts/get_contributors.R - Format: "A big thank you to all the folks who helped make this release happen:"
- Comma-separated GitHub links
- Use
按照以下顺序创建博文大纲:
-
前言元数据:平台专属的YAML配置(参考格式指南)
-
标题与开篇:
- 标题:包名+版本号
- 开篇:发布公告+一句话包描述
- 安装说明:包含安装命令的代码块
- 概述:简要总结,附带完整发布说明的跳转链接
-
主体内容(选择适配的板块):
- 迁移指南(存在破坏性变更时):如有该内容必须放在最前面
- 生命周期变更(废弃、软废弃、停止维护等说明)
- 功能板块(每个核心功能单独成块,使用描述性标题)
- 次要优化:项目符号列表形式
-
致谢(适用场景下添加):
- 使用生成
scripts/get_contributors.R - 格式:"非常感谢所有助力本次发布的贡献者:"
- 逗号分隔的GitHub链接列表
- 使用
Step 3: Apply Content Guidelines
步骤3:遵循内容规范
Follow the best practices in :
references/content-guidelines.md- Opening style: "We're [random adjective expressing excitement] to announce the release of..."
- Section organization: Migration → Lifecycle → Features → Improvements → Acknowledgements
- Tone: Conversational, professional, enthusiastic but authentic
- Technical precision: Use exact function names in backticks
- Focus on benefits: Explain "why" not just "what"
- Code examples: Realistic, well-commented, properly formatted
遵循中的最佳实践:
references/content-guidelines.md- 开篇风格:"我们非常[表达兴奋的随机形容词]地宣布...版本正式发布"
- 板块组织顺序:迁移指南 → 生命周期变更 → 新功能 → 优化 → 致谢
- 语气:口语化、专业、热情且真实
- 技术准确性:使用反引号包裹准确的函数名
- 聚焦价值:解释变更的价值,而不仅仅是变更内容
- 代码示例:贴近真实使用场景、注释完善、格式正确
Step 4: Transform NEWS Content
步骤4:转换NEWS内容
Convert NEWS.md bullets to blog-friendly content:
- Research features thoroughly: Don't just copy NEWS bullets—read function docs, check PRs, understand the context
- Expand context: Why changes matter, not just what changed
- Add complete code examples: Show realistic usage with full workflows, not just function signatures
- Explain concepts first: For unfamiliar features, explain what they are and how they work before showing code
- Group thematically: Combine related NEWS items into coherent sections
- Use conversational tone: Transform terse bullets into prose
- Link documentation: Add relevant links to docs and resources
- Highlight breaking changes: Make migration paths clear
- Multi-language parity (Shiny only): For R+Python packages on the Shiny blog, ensure all examples show both languages in tabsets
将NEWS.md的列表内容转换为适合博客阅读的内容:
- 充分调研功能:不要直接复制NEWS的列表项,要阅读函数文档、查看PR、理解变更背景
- 补充上下文:说明变更的重要性,而不仅仅是变更了什么
- 添加完整代码示例:展示包含完整工作流的真实使用场景,而不仅仅是函数签名
- 先解释概念:对于用户不熟悉的功能,先说明功能是什么、如何工作,再展示代码
- 按主题分组:将相关的NEWS条目整合为连贯的板块
- 使用口语化语气:将简洁的列表项转换为通顺的正文
- 添加文档链接:关联相关的文档和资源链接
- 突出破坏性变更:明确说明迁移路径
- 多语言一致性(仅Shiny博客适用):如果是Shiny博客上同时支持R和Python的包,确保所有示例通过标签页展示两种语言的实现
Step 5: Apply Platform-Specific Formatting
步骤5:应用平台专属格式
For Tidyverse posts, read and apply:
references/tidyverse-formatting.md- hugodown frontmatter with ,
slug,photo.urlphoto.author - Specific slug format: (hyphens replace dots)
packagename-x-y-z - R code blocks with language identifier
r - Acknowledgements always included as final section
For Shiny posts, read and apply:
references/shiny-formatting.md- Quarto frontmatter with YAML anchors for social media
- Flexible title formatting
- Use tabsets for Python/R or Express/Core variations
- Platform-specific code block attributes
- Acknowledgements optional, varies by post type
- May use lead paragraphs, callouts, embedded media
Tidyverse博文请阅读并应用以下规则:
references/tidyverse-formatting.md- hugodown前言元数据需包含、
slug、photo.urlphoto.author - 固定slug格式:(用连字符替换点号)
包名-x-y-z - R代码块需添加语言标识
r - 致谢必须作为最后一个板块
Shiny博文请阅读并应用以下规则:
references/shiny-formatting.md- Quarto前言元数据需包含社交媒体用的YAML锚点
- 灵活的标题格式
- 使用标签页展示Python/R或Express/Core版本差异
- 平台专属的代码块属性
- 致谢为可选,根据博文类型调整
- 可使用引导段落、提示框、嵌入媒体等元素
Step 6: Generate Acknowledgements
步骤6:生成致谢内容
Run the contributor script:
bash
Rscript scripts/get_contributors.R "owner/repo"Or with a specific starting tag for the previous version (or tag used for last release post):
bash
Rscript scripts/get_contributors.R "owner/repo" "v1.0.0"Copy the markdown output into the Acknowledgements section.
运行贡献者拉取脚本:
bash
Rscript scripts/get_contributors.R "owner/repo"如果需要指定上一个版本的起始标签(或上一次发布博文使用的标签):
bash
Rscript scripts/get_contributors.R "owner/repo" "v1.0.0"将输出的markdown内容复制到致谢板块中。
Step 7: Review and Polish
步骤7:审核与润色
Platform-agnostic checklist:
- Frontmatter complete with all required fields
- Opening clearly states package purpose
- Installation code block present (both languages if applicable)
- Sections organized logically
- Code examples use proper syntax highlighting
- Function names in backticks with parentheses:
`function()` - Package names are not backticked or otherwise styled
- Tone is conversational but not marketing-speak
- No superlatives ("powerful", "rich", "seamless", etc.)
- Features explained with context, not just listed
- Concepts explained before showing code
- All examples show R and Python variants (if applicable)
- Links to full release notes included
Platform-specific checklist:
Tidyverse:
- Slug format: (hyphens, not dots)
package-x-y-z - Photo URL and author included
- Acknowledgements section is final section
- All contributors listed alphabetically
Shiny:
- YAML anchors used for description (,
&desc)*desc - Social media cards configured (,
open-graph)twitter-card - Appropriate filters specified if using tabsets/shinylive
- Tabsets used for showing paired variants (Python/R, Express/Core)
- Multi-language tabsets used consistently (for R+Python packages only)
通用检查清单:
- 前言元数据包含所有必填字段
- 开篇明确说明包的用途
- 包含安装代码块(适用场景下需同时提供两种语言的安装命令)
- 板块逻辑清晰有序
- 代码示例使用正确的语法高亮
- 函数名使用带括号的反引号包裹:
`function()` - 包名不使用反引号或其他特殊样式
- 语气口语化但不偏向营销话术
- 不使用夸大形容词(例如"强大的"、"丰富的"、"无缝的"等)
- 功能说明附带上下文,而不仅仅是罗列
- 展示代码前先解释相关概念
- 适用场景下所有示例都提供R和Python两种实现
- 包含完整发布说明的跳转链接
平台专属检查清单:
Tidyverse:
- Slug格式符合要求:(使用连字符,不使用点号)
包名-x-y-z - 包含图片URL和作者信息
- 致谢板块是最后一个板块
- 所有贡献者按字母顺序排列
Shiny:
- 描述使用YAML锚点(、
&desc)*desc - 配置了社交媒体卡片(、
open-graph)twitter-card - 使用标签页/shinylive时指定了正确的筛选条件
- 使用标签页展示成对的版本差异(Python/R、Express/Core)
- 多语言标签页使用一致(仅针对同时支持R+Python的包)
Reference Documentation
参考文档
Load these as needed for detailed guidance:
需要详细指导时可查阅以下文档:
Content Guidelines
内容规范
references/content-guidelines.md- Post structure and organization
- Opening style and tone
- Section hierarchy and organization
- Code examples and formatting
- Before/after patterns
- Acknowledgments conventions
references/content-guidelines.md- 博文结构与组织方式
- 开篇风格与语气要求
- 板块层级与组织规则
- 代码示例与格式要求
- 优化前后对比模式
- 致谢规范
Platform-Specific Formatting
平台专属格式要求
references/tidyverse-formatting.md- hugodown frontmatter structure
- Slug and title conventions
- Photo attribution
- Code block formatting
- Lifecycle section structure
- Acknowledgements format
references/shiny-formatting.md- Quarto frontmatter with YAML anchors
- Social media card configuration
- Lead paragraphs and callouts
- Tabsets for variants
- Line highlighting and annotations
- Video embedding
- Flexible acknowledgements
references/tidyverse-formatting.md- hugodown前言元数据结构
- slug与标题规范
- 图片署名要求
- 代码块格式
- 生命周期板块结构
- 致谢格式
references/shiny-formatting.md- 带YAML锚点的Quarto前言元数据
- 社交媒体卡片配置
- 引导段落与提示框使用规范
- 版本差异标签页使用规则
- 行高亮与注释规则
- 视频嵌入要求
- 灵活的致谢规则
Resources
资源
- : Fetch formatted contributor list using
scripts/get_contributors.Rusethis::use_tidy_thanks() - : General content best practices (platform-agnostic)
references/content-guidelines.md - : Tidyverse-specific formatting requirements
references/tidyverse-formatting.md - : Shiny-specific formatting requirements
references/shiny-formatting.md
- :使用
scripts/get_contributors.R拉取格式化的贡献者列表usethis::use_tidy_thanks() - :通用内容最佳实践(跨平台适用)
references/content-guidelines.md - :Tidyverse专属格式要求
references/tidyverse-formatting.md - :Shiny专属格式要求
references/shiny-formatting.md
Platform-Specific Quick Reference
平台专属快速参考
Tidyverse Post Template
Tidyverse博文模板
markdown
---
output: hugodown::hugo_document
slug: package-x-y-z
title: package x.y.z
date: YYYY-MM-DD
author: Your Name
description: >
Brief description
photo:
url: https://unsplash.com/photos/id
author: Photographer Name
categories: [package]
tags: [package]
---markdown
---
output: hugodown::hugo_document
slug: package-x-y-z
title: package x.y.z
date: YYYY-MM-DD
author: Your Name
description: >
Brief description
photo:
url: https://unsplash.com/photos/id
author: Photographer Name
categories: [package]
tags: [package]
---package x.y.z
package x.y.z
We're pleased to announce the release of package x.y.z...
r
install.packages("package")...
We're pleased to announce the release of package x.y.z...
r
install.packages("package")...
Acknowledgements
Acknowledgements
A big thank you to all the folks who helped make this release happen:
[Contributors from get_contributors.R]
undefinedA big thank you to all the folks who helped make this release happen:
[Contributors from get_contributors.R]
undefinedShiny Post Template
Shiny博文模板
markdown
---
title: Package Name x.y.z
description: &desc |
Brief description of the release.
author: "Your Name"
date: "YYYY-MM-DD"
image: feature.png
open-graph:
image: feature.png
description: *desc
twitter-card:
image: feature.png
description: *desc
---markdown
---
title: Package Name x.y.z
description: &desc |
Brief description of the release.
author: "Your Name"
date: "YYYY-MM-DD"
image: feature.png
open-graph:
image: feature.png
description: *desc
twitter-card:
image: feature.png
description: *desc
---package x.y.z
package x.y.z
We're excited to announce package x.y.z...
[Installation for Python or R]
...
undefinedWe're excited to announce package x.y.z...
[Installation for Python or R]
...
undefinedTips
提示
- Breaking changes first: Put migration guides before features
- Highlight the wins: Lead with the most exciting features
- Show don't tell: Use code examples liberally
- Link generously: Help readers find more information
- Keep it conversational: Write like you're explaining to a colleague
- Be authentic: Enthusiasm should feel genuine, not marketing-speak
- 破坏性变更优先:将迁移指南放在功能介绍之前
- 突出亮点:开篇优先介绍最受关注的新功能
- 展示而非说教:大量使用代码示例
- 多添加链接:方便读者获取更多信息
- 保持口语化:像和同事讲解一样撰写内容
- 保持真实:热情要发自内心,不要使用营销话术