Author: Sergey Panteleev (saundefined)
Committer: GitHub (web-flow)
Pusher: saundefined
Date: 2026-04-06T11:31:30+03:00
Commit: Split preview CI (#1873) · php/web-php@7794d10 · GitHub
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