UNPKG

plotly.js

Version:

The open source javascript graphing library that powers plotly

131 lines (101 loc) • 9.23 kB
# Releasing plotly.js This document is for maintainers who publish plotly.js. For contributor workflows, read [CONTRIBUTING.md](CONTRIBUTING.md) and [BUILDING.md](BUILDING.md). plotly.js follows [semver](https://semver.org). A release that adds functionality bumps the minor version. A minor version can go past 9, so `v1.22.0` is valid. Do every step below for each release, unless indicated otherwise. ## Update README, CHANGELOG, and CITATION - Open [GitHub Actions](https://github.com/plotly/plotly.js/actions?query=branch%3Amain) and confirm that the `main` branch passes the tests - Run `git switch main && git pull` - Run `git status` and confirm that the working tree is clean - Run `git switch -c release-vX.Y.Z`, where `X.Y.Z` is the new version number - Run `npx check-node-version --node 22 --npm 10` to confirm the tooling versions before you install - Run `npm ci` - Run `npm run preversion` - Update the version number and the release date in [README.md](README.md) and [CITATION.cff](CITATION.cff). Skip this step for a release candidate. - Use find-and-replace in the README. The version number appears in three `https://cdn.plot.ly/plotly-X.Y.Z...` script URLs. - Update the `version` field and the `date-released` field in [CITATION.cff](CITATION.cff) - Run `npm run use-draftlogs` to copy the `draftlogs/` folder into [CHANGELOG.md](CHANGELOG.md) > [!NOTE] > `npm run use-draftlogs` accepts a filename that ends in `_add.md`, `_remove.md`, `_deprecate.md`, `_change.md`, or `_fix.md`. This will raise an error for any other name; rename files if necessary. - Review [CHANGELOG.md](CHANGELOG.md). Replace the placeholder heading `## [X.Y.Z] -- UNRELEASED` with the real version number and release date. - Follow [keepachangelog](https://keepachangelog.com/) style - Correct typos and add missing entries and extra details - Open `https://github.com/plotly/plotly.js/compare/vX.Y.Q...main` to view every commit since the previous release `vX.Y.Q` - Confirm that every draftlog entry uses the link template `[[#1234](https://github.com/plotly/plotly.js/pull/1234)]` - Credit a community contributor at the end of that entry: **', with thanks to @<USERNAME> for the contribution!'** - Run `npm run empty-draftlogs` to empty the `draftlogs/` folder. Skip this step for a release candidate. - Run `git add -u . && git commit -m "chore: Updates for release vX.Y.Z"` ## Update package.json and generate the release build - Run `npm version vX.Y.Z` from the repository root (for a release candidate, include the prerelease part, as in `npm version v4.2.0-rc.0`). The command runs these steps in order: - Run the `preversion` script, which tests the Node.js and `npm` versions, tests for `npm link`ed packages, and walks the dependency tree - Bump the version in `package.json` - Run the `version` script, which runs `npm run build` and then `git add -A lib dist build src/version.js` - `git commit`, with the message `'X.Y.Z'` - `git tag -a`, with the tag `'vX.Y.Z'` - The `postversion` script, which prints _Version bumped and committed. If ok, run: git push && git push --tags_ The build writes the `dist/` files: main bundles, partial bundles, locales, plot-schema, and geo assets. The build also writes the generated build files under [`build/`](build/README.md) and the package version file in `src/`. > [!NOTE] > The `npm ls` step inside `preversion` fails if the dependencies under `node_modules/` don't meet the requirements listed in `package.json`. Run `npm ci` to fix this issue. - Run `git show HEAD` to review the commit - The output shows the new CDN bundle links and the new bundle sizes in `dist/README.md`, plus the new code in the dist bundles - Carefully review the new bundle sizes in `dist/README.md`. If a bundle size has changed unexpectedly, or the diff contains any other unexpected change, run `git reset --hard HEAD^` and `git tag -d vX.Y.Z` to undo the last commit and tag. Investigate the issue before proceeding. - If everything looks good, run `git push && git push --tags` to push the release branch and the release tag - Open a pull request against `main`, and assign the `no-draftlog` label - Wait for CI to pass, and get an approval - Merge the pull request with a merge commit > [!CAUTION] > Do not squash merge, since that will result in the tagged commit `vX.Y.Z` not being part of `main` ## Publish the release - Run `git switch main && git pull` after the pull request merges - Run `git branch --contains vX.Y.Z` and confirm that the output includes `main` ### Publish to npm - Run `npm access list packages | grep plotly` to confirm your permission to publish the plotly.js packages - The output lists the Plotly packages that you can update - If that command returns no result, authenticate with npm: - Confirm your membership in the `plotly` npm organization. If you're not a member, contact the Libraries team for next steps. - Run `npm login` - Complete the authentication flow with the credentials for your account - Confirm in the terminal that the command finished - Run `npm access list packages | grep plotly` again, and read the list of Plotly packages - Run `npm pack --dry-run`. This shows what will be included in the published package without actually publishing. - Compare the package size against the previous release. An unexpected large change can be an indicator that something was added/removed that shouldn't have been. - Look for any files that don't belong in the release (usually at the project root level). If you find any, investigate why they're showing up. One resolution option is updating [.npmignore](.npmignore). - For a full release, run `npm publish`. This will publish the new version to the [npm registry](https://www.npmjs.com/package/plotly.js). - For a release candidate, run `npm publish --tag rc` instead - You will be prompted by npm to authorize publishing before proceeding. If you see an option to allow publishing without a challenge for the next few minutes, enable it. This will allow for easy partial bundle publishing that immediately follows completion of the `publish` step. > [!NOTE] > Before the `publish` step starts, the `prepack` and `postpack` scripts will run. These manage converting TS files to JS before packing and removing them after packing. After the `publish` step completes, the `postpublish` script will run. This kicks off `tasks/sync_packages.js`, which publishes the partial bundles. ### Publish to the Plotly CDN - Run `aws --version` and confirm that the output starts with `aws-cli/2` - If the command is not found, or the output shows version 1, install AWS CLI v2: - On macOS, run `brew install awscli` - On Linux or Windows, follow the [AWS CLI install guide](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) - Run `./tasks/cdn_publish.sh` to upload the new release files to the CDN bucket on S3 - If that step fails with an authentication error, run `aws configure` and enter the credentials for the plotly.js CDN bucket ### Publish to GitHub - Open the [releases page](https://github.com/plotly/plotly.js/releases) and click "Draft a new release" - Select the tag for the release - Set the title to `vX.Y.Z`, the same text as the tag - Copy the description from the matching section of the CHANGELOG. Add extra context if necessary. - For a release candidate, select the "This is a pre-release" box - Click "Publish release" ## Post-release tasks - Post a link to the release tag, `https://github.com/plotly/plotly.js/releases/tag/vX.Y.Z`, in the team announcement channels ## Make a maintenance release At times it may be required to patch an older version of plotly.js (for a security fix, etc.). This example patches `v3.7.0` and publishes `3.7.1`. - Run `git show v3.7.0:package.json` and read the `preversion` script for the toolchain - A v3 tag needs Node.js 18. A v4 tag needs Node.js 22. - Run `git switch -c maintenance-v3.7.1 v3.7.0` - Run `npm ci` - Find the commits on `main` that fixed the bugs in question. This example uses `a34ad3`. - Run `git cherry-pick a34ad3`, fix the merge conflicts, and test the behavior - To apply several patches at once, use GitHub's `.patch` URLs with `git am` - Run `npm version patch`. The command bumps the version to `3.7.1`, runs `npm run build`, commits, and adds the tag `v3.7.1`. - Run `git show HEAD` to review the version commit - Run `git push && git push --tags` - Run `DRYRUN=1 npm publish --tag maintenance` - `DRYRUN` prevents publishing of the partial bundles via `tasks/sync_packages.js`. The patched bundle will still be published. - Run `npm view plotly.js versions` and confirm that the list holds `3.7.1` - Run `npm dist-tag ls plotly.js` and confirm that `latest` still points at the current release ### Notes on maintenance releases - The `--tag` argument in the `npm publish` step is **very important**. Without that argument, the maintenance release takes the `latest` tag on npm. A clean `npm install plotly.js` then installs `3.7.1` instead of the current release from `main`. - Do not push a maintenance release to the CDN. This policy encourages every user to run the current plotly.js release.