# Preparing release notes

1. Use ["draft new release tag"](https://github.com/microsoft/playwright/releases/new).
1. Version starts with "v", e.g. "vX.Y.Z".
1. Fill "Raw notes".
    - `git fetch --tags upstream`
    - `git log --pretty="%h - %s" $(git describe --tags --abbrev=0)..HEAD`
1. Fill "Bug fixes".
    - `git log $(git describe --tags --abbrev=0)..HEAD`
    - Manually look for `#1234` references in commit messages.
1. Fill "Current status".
    - `node utils/print_versions.js`
    - Copy tests status from [IsPlaywrightReady](https://aslushnikov.github.io/isplaywrightready/).
1. Fill "Highlights" if any.
    - Be creative.
1. Fill "Breaking API Changes" if any.
    - `git diff $(git describe --tags --abbrev=0):docs/api.md docs/api.md`
1. Fill "New APIs" if any.
    - `git diff $(git describe --tags --abbrev=0):docs/api.md docs/api.md`
1. When making links to the API, copy actual links from [GitHub](https://github.com/microsoft/playwright/blob/master/docs/api.md), and not from `api.md` source - these might be incorrect.
    - Before publishing, replace `blob/master/docs` with `blob/vX.Y.Z/docs` in all the links.
1. Use "Save Draft", not "Publish".

# Releasing to npm

1. Announce `PSA: release vX.Y.Z in progress. Please do not commit anything.`
    - **Important**: no other commits should land in-between release commit and bump commit.
1. Mark a new version.
    - `node utils/update_version.js vX.Y.Z && npm run doc`.
    - Send a PR titled `chore: mark version vX.Y.Z`.
    - Make sure the PR passes all required checks and merge it.
1. Publish to npm.
    - `npm login`
    - `utils/publish_all_packages.sh --release`
1. Click 'Publish release' button on the prepared release notes.
1. Mark post release.
    - `node utils/update_version.js vX.Y.Z-post && npm run doc`.
    - Merge a PR titled `chore: bump version to vX.Y.Z-post`.
1. Announce `PSA: release vX.Y.Z is out.`
