open-source/release-post/SKILL.md
Create professional package release blog posts following Tidyverse or Shiny blog conventions. Use when the user needs to: (1) Write a release announcement blog post for an R or Python package for tidyverse.org or shiny.posit.co, (2) Transform NEWS/changelog content into blog format, (3) Generate acknowledgments sections with contributor lists, (4) Format posts following specific blog platform requirements. Supports both Tidyverse (hugodown) and Shiny (Quarto) blog formats with automated contributor fetching and comprehensive style guidance.
npx skillsauth add posit-dev/skills release-postInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create professional R/Python package release blog posts following Tidyverse or Shiny blog conventions.
scripts/get_contributors.R to generate acknowledgmentsThis skill supports two blog platforms with different formatting requirements:
Tidyverse blog (tidyverse.org)
references/tidyverse-formatting.mdShiny blog (shiny.posit.co)
references/shiny-formatting.mdFirst, determine which platform the post is for, then follow the general workflow and apply platform-specific formatting.
These steps apply to both platforms. Content guidelines are based on Tidyverse best practices but adapt them as needed for Shiny posts.
Collect required information:
Create the post outline following this order:
Frontmatter: Platform-specific YAML (see formatting references)
Title and Opening:
Main Content (choose appropriate sections):
Acknowledgements (when appropriate):
scripts/get_contributors.RFollow the best practices in references/content-guidelines.md:
Convert NEWS.md bullets to blog-friendly content:
For Tidyverse posts, read references/tidyverse-formatting.md and apply:
slug, photo.url, photo.authorpackagename-x-y-z (hyphens replace dots)r language identifierFor Shiny posts, read references/shiny-formatting.md and apply:
Run the contributor script:
Rscript scripts/get_contributors.R "owner/repo"
Or with a specific starting tag for the previous version (or tag used for last release post):
Rscript scripts/get_contributors.R "owner/repo" "v1.0.0"
Copy the markdown output into the Acknowledgements section.
Platform-agnostic checklist:
`function()`Platform-specific checklist:
Tidyverse:
package-x-y-z (hyphens, not dots)Shiny:
&desc, *desc)open-graph, twitter-card)Load these as needed for detailed guidance:
references/content-guidelines.md - General best practices for all release posts:
references/tidyverse-formatting.md - Tidyverse blog requirements:
references/shiny-formatting.md - Shiny blog requirements:
scripts/get_contributors.R: Fetch formatted contributor list using usethis::use_tidy_thanks()references/content-guidelines.md: General content best practices (platform-agnostic)references/tidyverse-formatting.md: Tidyverse-specific formatting requirementsreferences/shiny-formatting.md: Shiny-specific formatting requirements---
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
We're pleased to announce the release of package x.y.z...
```r
install.packages("package")
```
...
## Acknowledgements
A big thank you to all the folks who helped make this release happen:
[Contributors from get_contributors.R]
---
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
We're excited to announce package x.y.z...
[Installation for Python or R]
...
tools
Build modern Shiny dashboards and applications using bslib (Bootstrap 5). Use when creating new Shiny apps, modernizing legacy apps (fluidPage, fluidRow/column, tabsetPanel, wellPanel, shinythemes), or working with bslib page layouts, grid systems, cards, value boxes, navigation, sidebars, filling layouts, theming, accordions, tooltips, popovers, toasts, or bslib inputs. Assumes familiarity with basic Shiny.
development
Review test code for quality, design, and completeness after implementing a feature or fixing a bug. Use when the user asks to "review my tests", "check my test quality", "are these tests good enough", "review testing", or after completing a feature implementation that includes tests. Also use when tests feel brittle, flaky, or superficial. Cross-references production code to find coverage gaps.
tools
Guide for drafting issue closure and decline responses as an open-source package maintainer. Use when helping compose a reply that says "no" to a feature request, closes an issue as won't-fix, redirects a user to a different package, explains why a design choice is intentional, or otherwise declines or closes a community contribution. Also use when the maintainer needs to explain a deprecation, point out a user misunderstanding, or communicate an effort/scope tradeoff to a contributor.
tools
R package development with devtools, testthat, and roxygen2. Use when the user is working on an R package, running tests, writing documentation, or building package infrastructure.