Author: Sergey Panteleev (saundefined)
Committer: GitHub (web-flow)
Pusher: saundefined
Date: 2026-04-06T11:31:30+03:00

Commit: 
https://github.com/php/web-php/commit/7794d1016cc0187160d465b642d264de4f436fe4
Raw diff: 
https://github.com/php/web-php/commit/7794d1016cc0187160d465b642d264de4f436fe4.diff

Split preview CI (#1873)

Changed paths:
  A  .github/workflows/preview-deploy.yml
  A  .github/workflows/preview-tests.yml
  D  .github/workflows/pr-preview.yml


Diff:

diff --git a/.github/workflows/pr-preview.yml b/.github/workflows/pr-preview.yml
deleted file mode 100644
index b955abb3c9..0000000000
--- a/.github/workflows/pr-preview.yml
+++ /dev/null
@@ -1,131 +0,0 @@
-name: Preview PR
-on:
-  pull_request_target:
-    types: [ labeled ]
-
-jobs:
-  build:
-    runs-on: "ubuntu-22.04"
-    if: "github.repository_owner == 'php' && github.event.label.name == 
'Status: Preview Allowed'"
-    steps:
-      - uses: actions/checkout@v6
-        with:
-          ref: "refs/pull/${{ github.event.number }}/merge"
-
-      - uses: easingthemes/ssh-deploy@main
-        with:
-          REMOTE_HOST: ${{ secrets.PREVIEW_REMOTE_HOST }}
-          REMOTE_USER: ${{ secrets.PREVIEW_REMOTE_USER }}
-          SSH_PRIVATE_KEY: ${{ secrets.PREVIEW_SSH_KEY }}
-          TARGET: "/home/thephpfoundation/preview/web-php-pr-${{ 
github.event.number }}/public"
-          SCRIPT_BEFORE: bash /home/thephpfoundation/scripts/pr_created_pre.sh 
web-php ${{ github.event.number }}
-          SCRIPT_AFTER: bash /home/thephpfoundation/scripts/pr_created.sh 
web-php ${{ github.event.number }}
-
-      - uses: peter-evans/find-comment@v4
-        id: fc
-        with:
-          issue-number: ${{ github.event.number }}
-          comment-author: 'github-actions[bot]'
-          body-includes: 'Preview for commit'
-
-      - uses: peter-evans/create-or-update-comment@v5
-        with:
-          issue-number: ${{ github.event.number }}
-          comment-id: ${{ steps.fc.outputs.comment-id }}
-          edit-mode: 'replace'
-          body: |
-            🚀 Preview for commit ${{ github.sha }} can be found at 
https://web-php-pr-${{ github.event.number }}.preview.thephp.foundation
-
-  tests_visual:
-    name: "Visual Tests"
-
-    runs-on: "ubuntu-latest"
-    if: "github.repository_owner == 'php' && github.event.label.name == 
'Status: Preview Allowed'"
-
-    strategy:
-      matrix:
-        php-version:
-          - "8.2"
-        node-version:
-          - "22.x"
-
-    env:
-      HTTP_HOST: "localhost:8080"
-
-    steps:
-      - uses: actions/checkout@v6
-        with:
-          ref: "refs/pull/${{ github.event.number }}/merge"
-
-      - uses: shivammathur/setup-php@v2
-        with:
-          coverage: "none"
-          extensions: "none, curl, dom, json, mbstring, tokenizer, xml, 
xmlwriter, iconv"
-          php-version: "${{ matrix.php-version }}"
-
-      - name: Use Node.js ${{ matrix.node-version }}
-        uses: actions/setup-node@v6
-        with:
-          node-version: ${{ matrix.node-version }}
-
-      - name: "Set up problem matchers for PHP"
-        run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\""
-
-      - name: "Set up problem matchers for phpunit/phpunit"
-        run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\""
-
-      - name: "Determine composer cache directory"
-        run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> 
$GITHUB_ENV"
-
-      - name: "Cache dependencies installed with composer"
-        uses: actions/cache@v5
-        with:
-          path: "${{ env.COMPOSER_CACHE_DIR }}"
-          key: "php-${{ matrix.php-version }}-composer-${{ 
hashFiles('composer.lock') }}"
-          restore-keys: "php-${{ matrix.php-version }}-composer-"
-
-      - name: "Install dependencies with composer"
-        run: "composer install --ansi --no-interaction --no-progress"
-
-      - name: "Install dependencies"
-        run: "yarn install"
-
-      - name: "Install Playwright"
-        run: "npx playwright install"
-
-      - name: "Run visual tests"
-        run: "make tests_visual"
-
-      - uses: actions/upload-artifact@v7
-        if: ${{ !cancelled() }}
-        with:
-          name: playwright-report
-          path: playwright-report/
-          retention-days: 30
-
-      - uses: easingthemes/ssh-deploy@main
-        if: ${{ !cancelled() }}
-        with:
-          REMOTE_HOST: ${{ secrets.PREVIEW_REMOTE_HOST }}
-          REMOTE_USER: ${{ secrets.PREVIEW_REMOTE_USER }}
-          SSH_PRIVATE_KEY: ${{ secrets.PREVIEW_SSH_KEY }}
-          SOURCE: "playwright-report/"
-          TARGET: 
"/home/thephpfoundation/preview/web-php-regression-report-pr-${{ 
github.event.number }}/public"
-          SCRIPT_BEFORE: bash /home/thephpfoundation/scripts/pr_created_pre.sh 
web-php-regression-report ${{ github.event.number }}
-
-      - uses: peter-evans/find-comment@v4
-        if: ${{ !cancelled() }}
-        id: snapshot
-        with:
-          issue-number: ${{ github.event.number }}
-          comment-author: 'github-actions[bot]'
-          body-includes: 'Regression report for commit'
-
-      - uses: peter-evans/create-or-update-comment@v5
-        if: ${{ !cancelled() }}
-        with:
-          issue-number: ${{ github.event.number }}
-          comment-id: ${{ steps.snapshot.outputs.comment-id }}
-          edit-mode: 'replace'
-          body: |
-            🚀 Regression report for commit ${{ github.sha }} is at 
https://web-php-regression-report-pr-${{ github.event.number 
}}.preview.thephp.foundation
diff --git a/.github/workflows/preview-deploy.yml 
b/.github/workflows/preview-deploy.yml
new file mode 100644
index 0000000000..afcf72fee5
--- /dev/null
+++ b/.github/workflows/preview-deploy.yml
@@ -0,0 +1,130 @@
+name: Preview Deploy
+on:
+  workflow_run:
+    workflows: ["Preview Tests"]
+    types:
+      - completed
+
+jobs:
+  deploy:
+    runs-on: "ubuntu-22.04"
+    if: >
+      github.repository_owner == 'php' &&
+      github.event.workflow_run.event == 'pull_request' &&
+      github.event.workflow_run.conclusion == 'success'
+
+    steps:
+      - uses: actions/checkout@v6
+        with:
+          ref: ${{ github.event.workflow_run.head_branch }}
+
+      - name: Download PR number
+        uses: actions/download-artifact@v8
+        with:
+          name: pr-number.txt
+          path: ./pr-number-artifact/
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          run-id: ${{ github.event.workflow_run.id }}
+
+      - name: Set PR number
+        id: pr-number
+        run: |
+          PR_NUMBER=$(cat ./pr-number-artifact/pr-number.txt)
+          echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
+
+      - name: Download PR code as artifact
+        uses: actions/download-artifact@v8
+        with:
+          name: pr-code
+          path: ./
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          run-id: ${{ github.event.workflow_run.id }}
+
+      - name: Deploy preview
+        uses: easingthemes/ssh-deploy@main
+        with:
+          REMOTE_HOST: ${{ secrets.PREVIEW_REMOTE_HOST }}
+          REMOTE_USER: ${{ secrets.PREVIEW_REMOTE_USER }}
+          SSH_PRIVATE_KEY: ${{ secrets.PREVIEW_SSH_KEY }}
+          SOURCE: "./"
+          TARGET: "/home/thephpfoundation/preview/web-php-pr-${{ 
steps.pr-number.outputs.pr_number }}/public"
+          SCRIPT_BEFORE: bash /home/thephpfoundation/scripts/pr_created_pre.sh 
web-php ${{ steps.pr-number.outputs.pr_number }}
+          SCRIPT_AFTER: bash /home/thephpfoundation/scripts/pr_created.sh 
web-php ${{ steps.pr-number.outputs.pr_number }}
+
+      - name: Find existing preview comment
+        uses: peter-evans/find-comment@v4
+        id: fc
+        with:
+          issue-number: ${{ steps.pr-number.outputs.pr_number }}
+          comment-author: 'github-actions[bot]'
+          body-includes: 'Preview for commit'
+
+      - name: Create or update preview comment
+        uses: peter-evans/create-or-update-comment@v5
+        with:
+          issue-number: ${{ steps.pr-number.outputs.pr_number }}
+          comment-id: ${{ steps.fc.outputs.comment-id }}
+          edit-mode: 'replace'
+          body: |
+            🚀 Preview for commit ${{ github.event.workflow_run.head_sha }} is 
available at https://web-php-pr-${{ steps.pr-number.outputs.pr_number 
}}.preview.thephp.foundation
+
+  deploy-regression-report:
+    runs-on: "ubuntu-22.04"
+    if: >
+      github.repository_owner == 'php' &&
+      github.event.workflow_run.event == 'pull_request' &&
+      github.event.workflow_run.conclusion == 'success'
+
+    steps:
+      - uses: actions/checkout@v6
+        with:
+          ref: ${{ github.event.workflow_run.head_branch }}
+
+      - name: Download PR number
+        uses: actions/download-artifact@v8
+        with:
+          name: pr-number.txt
+          path: ./pr-number-artifact/
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          run-id: ${{ github.event.workflow_run.id }}
+
+      - name: Set PR number
+        id: pr-number
+        run: |
+          PR_NUMBER=$(cat ./pr-number-artifact/pr-number.txt)
+          echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
+
+      - name: Download regression report
+        uses: actions/download-artifact@v8
+        with:
+          name: playwright-report
+          path: ./playwright-report/
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          run-id: ${{ github.event.workflow_run.id }}
+
+      - name: Deploy regression report
+        uses: easingthemes/ssh-deploy@main
+        with:
+          REMOTE_HOST: ${{ secrets.PREVIEW_REMOTE_HOST }}
+          REMOTE_USER: ${{ secrets.PREVIEW_REMOTE_USER }}
+          SSH_PRIVATE_KEY: ${{ secrets.PREVIEW_SSH_KEY }}
+          SOURCE: "./playwright-report/"
+          TARGET: 
"/home/thephpfoundation/preview/web-php-regression-report-pr-${{ 
steps.pr-number.outputs.pr_number }}/public"
+          SCRIPT_BEFORE: bash /home/thephpfoundation/scripts/pr_created_pre.sh 
web-php-regression-report ${{ steps.pr-number.outputs.pr_number }}
+
+      - name: Find regression report comment
+        uses: peter-evans/find-comment@v4
+        id: snapshot
+        with:
+          issue-number: ${{ steps.pr-number.outputs.pr_number }}
+          comment-author: 'github-actions[bot]'
+          body-includes: 'Regression report for commit'
+
+      - name: Create or update regression report comment
+        uses: peter-evans/create-or-update-comment@v5
+        with:
+          issue-number: ${{ steps.pr-number.outputs.pr_number }}
+          comment-id: ${{ steps.snapshot.outputs.comment-id }}
+          edit-mode: 'replace'
+          body: |
+            📊 Regression report for commit ${{ 
github.event.workflow_run.head_sha }} is at 
https://web-php-regression-report-pr-${{ steps.pr-number.outputs.pr_number 
}}.preview.thephp.foundation
diff --git a/.github/workflows/preview-tests.yml 
b/.github/workflows/preview-tests.yml
new file mode 100644
index 0000000000..a9e69c6e0b
--- /dev/null
+++ b/.github/workflows/preview-tests.yml
@@ -0,0 +1,89 @@
+name: Preview Tests
+on:
+  pull_request:
+    types: [ labeled ]
+
+jobs:
+  tests_visual:
+    name: "Visual Tests"
+    runs-on: "ubuntu-latest"
+    if: "github.repository_owner == 'php' && 
contains(github.event.pull_request.labels.*.name, 'Status: Preview Allowed')"
+
+    strategy:
+      matrix:
+        php-version:
+          - "8.2"
+        node-version:
+          - "22.x"
+
+    env:
+      HTTP_HOST: "localhost:8080"
+
+    steps:
+      - uses: actions/checkout@v6
+        with:
+          ref: "refs/pull/${{ github.event.number }}/merge"
+
+      - name: Save PR number
+        run: echo ${{ github.event.number }} > pr-number.txt
+
+      - name: Upload PR code as artifact
+        uses: actions/upload-artifact@v7
+        with:
+          name: pr-code
+          path: ./
+          retention-days: 1
+
+      - name: Upload PR number artifact
+        uses: actions/upload-artifact@v7
+        with:
+          name: pr-number.txt
+          path: ./pr-number.txt
+          retention-days: 1
+
+      - uses: shivammathur/setup-php@v2
+        with:
+          coverage: "none"
+          extensions: "none, curl, dom, json, mbstring, tokenizer, xml, 
xmlwriter, iconv"
+          php-version: "${{ matrix.php-version }}"
+
+      - name: Use Node.js ${{ matrix.node-version }}
+        uses: actions/setup-node@v6
+        with:
+          node-version: ${{ matrix.node-version }}
+
+      - name: "Set up problem matchers for PHP"
+        run: "echo \"::add-matcher::${{ runner.tool_cache }}/php.json\""
+
+      - name: "Set up problem matchers for phpunit/phpunit"
+        run: "echo \"::add-matcher::${{ runner.tool_cache }}/phpunit.json\""
+
+      - name: "Determine composer cache directory"
+        run: "echo \"COMPOSER_CACHE_DIR=$(composer config cache-dir)\" >> 
$GITHUB_ENV"
+
+      - name: "Cache dependencies installed with composer"
+        uses: actions/cache@v5
+        with:
+          path: "${{ env.COMPOSER_CACHE_DIR }}"
+          key: "php-${{ matrix.php-version }}-composer-${{ 
hashFiles('composer.lock') }}"
+          restore-keys: "php-${{ matrix.php-version }}-composer-"
+
+      - name: "Install dependencies with composer"
+        run: "composer install --ansi --no-interaction --no-progress"
+
+      - name: "Install dependencies"
+        run: "yarn install"
+
+      - name: "Install Playwright"
+        run: "npx playwright install"
+
+      - name: "Run visual tests"
+        run: "make tests_visual"
+
+      - name: Upload playwright report
+        uses: actions/upload-artifact@v7
+        if: ${{ !cancelled() }}
+        with:
+          name: playwright-report
+          path: ./playwright-report/
+          retention-days: 7

Reply via email to