npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

release-plan

v0.11.0

Published

_The most contributor friendly and hands-off release tool there is_.

Downloads

17,019

Readme

release-plan

The most contributor friendly and hands-off release tool there is.

Features

  • ✨ No manual steps[^after-initial-setup]
    • release from anywhere[^release-anywhere]
  • 🤖 Everything is automated via GH Action Workflows[^gh-by-default]
  • 🔐 No need to give maintainers access to npm[^npm-config]
  • 📦 PNPM and monorepo support by default
    • also supports non-pnpm repos
  • 🚀 Release preview PR
    • release via merge of the release preview PR
  • 📝 Automatic changelog
    • changelog entries editable by editing PR titles

This allows folks with GH Maintainer access to preview and release to npm without actually needing to have any keys locally on their machine (or access to the npm package, which makes management of the repo separate from the npm package easy and encouraged).

[^gh-by-default]: While GitHub Actions is the default setup via create-release-plan-setup [^after-initial-setup]: after initial setup, which is already mostly automated. [^npm-config]: The NPM token can be granular, and the package needs to have its "Publishing access" configured to either "Don't require two-factor authentication" or, "Require two-factor authentication or an automation or granular access token" (recommended). This can be configured under https://www.npmjs.com/package/{package-name}/access [^release-anywhere]: You can release from bed, the mall, the porcelain, anywhere! No need for a computer! (assuming you have a smart phone)

Usage & Installation

Automated

Use create-release-plan-setup, see the README over there for detailed instructions.

If you already have a local GITHUB_AUTH token,

npx create-release-plan-setup@latest 

does all the setup for you (aside from repo-configuration (see here))

You can create a GitHub personal access token here

Or, if you use the gh CLI, you can temporarily expose a token to your local terminal shell via:

export GITHUB_AUTH=$(gh auth token);

This command will create

.github/workflows/
  - plan-release.yml
  - publish.yml
RELEASE.md

which is responsible for automating the process that you'd run through manually below.

Manual

npm i --save-dev release-plan

To use release-plan you need to have a valid GITHUB_AUTH environment variable that has the repo permission. This allows release-plan to check what PRs have been merged since the last release and plan the release accordingly.

  1. Run npx release-plan explain-plan. If there are unlabeled PRs that need to be released it will complain and show you a list of them. Each PR needs to be labeled with one of:

    • breaking
    • enhancement
    • bug
    • documentation
    • internal
  2. Once all the PRs are labeled, release-plan will instead show you the release plan, explaining which packages are getting released, at which versions, and why.

  3. If you disagree with the plan, you can modify the list of changes before using it to explain-plan or prepare a release:

    • npx release-plan gather-changes > /tmp/changelog
    • edit /tmp/changelog
    • npx release-plan --from-stdin < /tmp/changelog

    For example, this can be necessary if a PR that's labeled breaking touches multiple packages and only one of those packages is actually a breaking change. In that case you can take the other package names out of the description of the PR.

  4. Once you're happy with the plan, run npx release-plan prepare. This will edit CHANGELOG.md, bump the version numbers in package.json files, and create a file named .release-plan.json. Make a PR with these changes.

  5. Once the PR is merged, in a clean local repo at the merge commit, run npx release-plan publish. If you need an otp for your release you can provide that to the publish command like this npx release-plan publish --otp=123456

Options

For projects that need extra control over how versions are incremented release-plan configuration can be added to individual package.json files to remap the increment level passed to semver eg:

{
  "name": "example",
  "version": "0.9.0",
  "release-plan": {
    "semverIncrementAs": {
      "major": "minor"
    }
  }
}

Will mean that any breaking change is treated as a minor which is useful in case the project is in the pre 1.0 stage. Please use responsibly

Comparison

Note that we take the stance of reducing friction for new contributors (regardless of how new to GitHub they are), we want to optimize for the contribution, and assume that maintainers can handle a little bit of process -- and with this stance, changesets is the most work out of this comparison.

Additionally, this comparison assumes the recommended configuration for each release tool.

| release-plan | release-it (requires computer) | changesets (requires computer) | | ------------------ | ------------------------------ | ------------------------------ | | add a label to a PR | same | have the repo cloned | merge the PR | same | add the remote of the PR-submitter to your local git | | | checkout the branch | | | run pnpm changeset | | | write something about the change | | | push it back up to the PR-submitter's branch | ensure the PR title is what you want in the changelog | same | | | have the repo cloned | | | update / sync repo locally | | | run npx release -it | | automation creates a preview PR | | same | merging that preview PR does the actual release | | same

Needed Access: | | release-plan | release-it | changesets | | - | ------------------ | ---------- | ---------- | | NPM_TOKEN | only ci | local | only ci | | GH_TOKEN | only ci | local | only ci |

Note that while it's recommended to use release-plan with full automation, release-plan can be used locally, as described in the Manual Installation section of this README.

Summary: | | release-plan | release-it | changesets | | - | ------------------ | ---------- | ---------- | | number of steps | 5 | 6 | 8 | | Downsides | n/a | maintainers need admin access to both GitHub and NPMrequires a computer | requires push access to the submitter's PR, or potentially risk losing steam from the contributor to ask them to create the changesetmore up-front work required per change/PRhard to go back and add a changeset and have it associated with the PR correctly (maybe impossible), so forgetting to add changesets pre-merge can totally ruin the accuracy of changeset's changelogrequires a computer |

Origins

This package was originally developed to help release Embroider and was extracted so everyone can use it 🎉