diff --git a/.github/workflows/roll.yml b/.github/workflows/roll.yml
index a2295476a..7882c2e09 100644
--- a/.github/workflows/roll.yml
+++ b/.github/workflows/roll.yml
@@ -146,7 +146,6 @@ jobs:
id: save
env:
COMPLETE: ${{ steps.agent.outputs.outcome == 'success' && steps.check.outcome == 'success' }}
- TITLE: "chore: roll Playwright to ${{ steps.record.outputs.version }} (${{ needs.versions.outputs.new_short }})"
COMPARE_URL: https://github.com/microsoft/playwright/compare/${{ needs.versions.outputs.old_commit }}...${{ needs.versions.outputs.new_commit }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
run: |
@@ -160,7 +159,6 @@ jobs:
fi
echo "complete=$COMPLETE" >> "$GITHUB_OUTPUT"
python - <<'EOF'
- import json
import os
from pathlib import Path
@@ -180,8 +178,9 @@ jobs:
commits.append(f"- … and {total - len(commits)} more: {env['COMPARE_URL']}")
parts.append(f"\nUpstream commits ({total})
\n\n" + "\n".join(commits) + "\n\n ")
parts.append(f"Upstream changes: {env['COMPARE_URL']}")
+ # publish-calls adds nothing to the text, so the footer is here.
+ parts.append(f"Prepared by the [roll workflow]({env['RUN_URL']}).")
Path(env["PATCH_DIR"], "pr-body.md").write_text("\n\n".join(parts) + "\n", encoding="utf-8")
- Path(env["PATCH_DIR"], "roll.json").write_text(json.dumps({"title": env["TITLE"]}) + "\n", encoding="utf-8")
EOF
{
echo '```'
@@ -215,9 +214,9 @@ jobs:
with:
name: roll-patch
path: ${{ runner.temp }}/roll
- # A roll changes only what a roll changes; publish-patch rejects only .github/. The checks are
+ # A roll changes only what a roll changes; publish-calls rejects only .github/. The checks are
# here and not in a script, because the roll could change the script. They apply the patch to
- # a separate index, so the checkout stays clean for publish-patch.
+ # a separate index, so the checkout stays clean for publish-calls.
- name: Check the changed files
env:
GIT_INDEX_FILE: ${{ runner.temp }}/roll.index
@@ -244,25 +243,29 @@ jobs:
echo "The roll adds a symbolic link or a submodule." >&2
exit 1
fi
- # Never execute code or scripts from the roll in the app job.
- - name: Validate, push and open draft
+ # This job writes the call, and not the roll job, so that nothing in the artifact can add a call
+ # or name a patch other than the one that the checks above read.
+ - name: Write the call
+ env:
+ BRANCH: roll/${{ needs.versions.outputs.new_short }}/${{ github.run_id }}-${{ github.run_attempt }}
+ TITLE: "chore: roll Playwright to ${{ needs.roll.outputs.version }} (${{ needs.versions.outputs.new_short }})"
+ run: |
+ jq -n --arg repo "$GITHUB_REPOSITORY" --arg branch "$BRANCH" --arg title "$TITLE" \
+ '[{call: "pull-request", repo: $repo, branch: $branch, title: $title, patch: "roll.patch", bodyFile: "pr-body.md"}]' \
+ > "$RUNNER_TEMP/roll/calls.json"
+ # Never execute code or scripts from the roll in the app job. The call is data.
+ - name: Check and make the call
id: publish
- uses: microsoft/playwright/.github/actions/publish-patch@main
+ uses: microsoft/playwright/.github/actions/publish-calls@main
with:
token: ${{ steps.app-token.outputs.token }}
dir: ${{ runner.temp }}/roll
- patch: roll.patch
- metadata: roll.json
- body-file: pr-body.md
- branch: roll/${{ needs.versions.outputs.new_short }}/${{ github.run_id }}-${{ github.run_attempt }}
- pull-request: true
- base: ${{ github.ref_name }}
- workflow-name: roll workflow
- # publish-patch opens a draft; a complete roll is ready for review.
+ scope-kinds: pull-request
+ # publish-calls opens a draft; a complete roll is ready for review.
- name: Mark the pull request as ready
if: needs.roll.outputs.complete == 'true'
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
GH_REPO: ${{ github.repository }}
- PR: ${{ steps.publish.outputs.number }}
+ PR: ${{ steps.publish.outputs.pull-request }}
run: gh pr ready "$PR"