agentleFS
MicrosoftKnown publishermicrosoft/playwright-python/.claude/skills/playwright-release/SKILL.md

playwright-release

Skill15k starsChanged 12 days agoApache-2.0View on GitHub

Prepare a Playwright Python release. Checks open bugs, writes the Python release notes in microsoft/playwright, opens the release PR, cuts the release branch, and saves a draft GitHub release. Never publishes the release.

  • Commits and pushes

We split this skill into the rules it gives an agent

13 rules. About 0 are common, 5 are distinctive, and 8 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 8

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Distinctive:

    Never publish the release.

    line 19
  2. Distinctive:

    Check that the bugs are closed.

    line 23
  3. Distinctive:

    If any are open, list them for the user and ask whether to continue.

    line 31
  4. Very specific:

    Check that the driver is rolled.

    line 34
  5. Very specific:

    Write the notes in the roll checkout, on a branch from origin/main:

    line 42
  6. Very specific:

    Keep the structure: highlights with emoji headings, ### New APIs with #### groups, ### Announcements, ### Browser Versions.

    line 54
  7. Very specific:

    Remove what Python does not have: the test runner (@playwright/test, test.*, config, fixtures, projects, reporters), UI mode, the HTML …

    line 56
  8. Very specific:

    Remove every API whose langs excludes Python.

    line 59
  9. Very specific:

    Keep API links as docs link macros: [method: Page.frameLocator] , [option: Tracing.start.ariaSnapshots] , [event: Page.dialogClosed] .

    line 65
  10. Distinctive:

    If some of them change what users see (for example, a different exception type), list them for the user and ask whether to add them to the …

    line 78
  11. Very specific:

    Commit, push to the user's fork of microsoft/playwright, and open the PR.

    line 81
  12. Very specific:

    Leave out the ## Version 1.xx heading.

    line 113
  13. Distinctive:

    Wait for the user to review and merge the PR.

    line 130

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Preparing a Playwright Python release

In this skill, 1.xx is the release (for example 1.64), and v1.xx.0 is its tag. $PW_SRC_DIR is the roll checkout of microsoft/playwright (see the playwright-roll skill, step 2).

Remotes: find the remote for microsoft/playwright-python with git remote -v. The commands below call it upstream.

What you may push:

  • The user's request to prepare the release is the instruction to open the two PRs in steps 2 and 3.
  • Cut the release branch (step 4) only when the user tells you to.
  • Never publish the release.

1. Preconditions

Check that the bugs are closed. The bug and regression issue templates give these title prefixes:

gh issue list --repo microsoft/playwright-python --state open \
  --search 'in:title "[Bug]" OR in:title "[Regression]"'

If any are open, list them for the user and ask whether to continue. Do not close or comment on issues.

Check that the driver is rolled. DRIVER_VERSION (npm=) must be the driver for the release: a 1.xx.y build, or a 1.xx.0-beta-… build from release-1.xx, as the user says, and rev= the commit that it is built from. If it is not, roll with the playwright-roll skill. This is often already done. The roll commit goes into the release commit PR (step 3). When the API roll for 1.xx is already on main, that PR only moves DRIVER_VERSION.

2. Release notes (microsoft/playwright)

Write the notes in the roll checkout, on a branch from origin/main:

git -C "$PW_SRC_DIR" fetch origin main
git -C "$PW_SRC_DIR" checkout -b release-notes-1.xx-python origin/main

In docs/src/release-notes-python.md, add a ## Version 1.xx section above the previous version. Translate it from the ## Version 1.xx section of docs/src/release-notes-js.md. Compare the Version 1.63 sections of the two files to see what a past translation dropped and changed.

  • Keep the structure: highlights with emoji headings, ### New APIs with #### groups, ### Announcements, ### Browser Versions.
  • Remove what Python does not have: the test runner (@playwright/test, test.*, config, fixtures, projects, reporters), UI mode, the HTML report, component testing, the VS Code extension, and npx playwright test options. Remove every API whose langs excludes Python. To check an API, look for it in playwright/async_api/_generated.py, or check langs in api.json (see "Verifying classifications" in the playwright-roll skill).
  • Rewrite code samples in Python, with the sync API: page.get_by_role("button").click(). Use snake_case names and Python values (True, None).
  • Keep API links as docs link macros: [`method: Page.frameLocator`], [`option: Tracing.start.ariaSnapshots`], [`event: Page.dialogClosed`]. The docs site shows them with Python names. In plain text, use Python names.
  • Commands: write playwright install, not npx playwright install.
  • Lean towards Python. List the playwright-python commits since the previous release branch:

    gh api repos/microsoft/playwright-python/compare/release-1.<xx-1>...main \
      --jq '.commits[].commit.message | split("\n")[0]'

    If some of them change what users see (for example, a different exception type), list them for the user and ask whether to add them to the notes.

Commit, push to the user's fork of microsoft/playwright, and open the PR. If the checkout has no remote for the fork, add one. gh api user --jq .login gives the user's login.

git -C "$PW_SRC_DIR" commit -am "docs: release notes for v1.xx Python"
git -C "$PW_SRC_DIR" push <fork-remote> release-notes-1.xx-python
gh pr create --repo microsoft/playwright --head <login>:release-notes-1.xx-python \
  --title "docs: release notes for v1.xx Python" \
  --body "- Add \`Version 1.xx\` to the Python release notes, translated from the Node.js notes"

Then put the roll checkout back on the release branch. ./scripts/update_api.sh reads the docs from it. Run the checkout checks from step 2 of the playwright-roll skill.

git -C "$PW_SRC_DIR" checkout release-1.xx

3. Release commit (playwright-python)

Open a PR from the branch with the roll commit:

  • Title: chore: roll Playwright to v1.xx.y, where v1.xx.y is the Python release version, even when DRIVER_VERSION is a beta build.
  • Description: the release notes from step 2, in GitHub markdown (see below). The user copies this description into the GitHub release, so for this PR it replaces the "keep PR descriptions short" rule in AGENTS.md.

Convert the notes to GitHub markdown yourself:

  • Leave out the ## Version 1.xx heading. Move every other heading up one level (### becomes ##, #### becomes ###).
  • Replace each link macro with a full playwright.dev link. Use the Python name as the link text:

    MacroGitHub markdown
    [`method: Page.frameLocator`][page.frame_locator()](https://playwright.dev/python/docs/api/class-page#page-frame-locator)
    [`method: Locator.visible`] (a property in Python)[locator.visible](https://playwright.dev/python/docs/api/class-locator#locator-visible)
    [`option: Browser.newContext.httpCredentials`][`http_credentials`](https://playwright.dev/python/docs/api/class-browser#browser-new-context-option-http-credentials)
    [`event: BrowserContext.dialogClosed`][browser_context.on("dialogclosed")](https://playwright.dev/python/docs/api/class-browsercontext#browser-context-event-dialog-closed)

    The page is class- and the class name in lower case. The anchor is the class and member names in kebab-case. Options add -option-<name>, and events add -event-<name>. A member is a property in Python if _generated.py declares it with @property.

Wait for the user to review and merge the PR. Do not merge it yourself.

4. Release (only when the user tells you to)

Cut release-1.xx from main and push it to upstream:

git fetch upstream main
git show FETCH_HEAD:DRIVER_VERSION       # the release driver
git log -1 --oneline FETCH_HEAD          # the release commit from step 3
git ls-remote --exit-code upstream refs/heads/release-1.xx   # must fail: the branch must not exist yet
git push upstream FETCH_HEAD:refs/heads/release-1.xx

Save the release notes as a draft release that targets the branch. Take the notes from the merged PR description, so that edits from the review are included:

gh pr view <release-pr> --repo microsoft/playwright-python --json body --jq .body > <notes-file>
gh release create v1.xx.0 --repo microsoft/playwright-python --draft \
  --target release-1.xx --title v1.xx.0 --notes-file <notes-file>
gh release list --repo microsoft/playwright-python --limit 3   # v1.xx.0 shows as Draft

Give the user the URL of the draft. Your work ends here. Do not publish the release: never run gh release create without --draft, and never run gh release edit --draft=false. Publishing creates the tag and starts .github/workflows/publish.yml, which builds the wheels and uploads them to PyPI after a reviewer approves the pypi environment. Never run that workflow, and never approve the environment.

Download now (ZIP)

Trending

Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data

Week of Aug 30: 0 new projectsWeek of Sep 6: 0 new projectsWeek of Sep 13: 0 new projectsWeek of Sep 20: 0 new projectsWeek of Sep 27: 0 new projectsWeek of Oct 4: 0 new projectsWeek of Oct 11: 0 new projectsWeek of Oct 18: 0 new projects
Aug 2026Sep 2026Oct 2026
New projects taking a version of this file each week, over the 8 weeks our latest run read: only 0 in all, so this is a hint, not a trend.

Who's talking about microsoft/playwright-python

The biggest 5 of 72 mentions linking to the repository that our crawl found. Each line is their own headline.

See all 72

Talked about on GitHub, Stack Overflow, YouTube, the web and Hacker News (72 times).

On GitHub · 50

45 more on GitHub

On Stack Overflow · 11

6 more on Stack Overflow

On YouTube · 5

On the web · 4

On Hacker News · 2

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.