@@ -2,13 +2,44 @@ name: Real-time Benchmark
22on :
33 schedule :
44 - cron : " 30 0 * * *"
5+ workflow_dispatch :
6+ inputs :
7+ repository :
8+ description : ' Repository name that is going to be benchmarked (e.g. "johndoe/php-src")'
9+ required : true
10+ type : string
11+ branch :
12+ description : ' Branch name that is going to be benchmarked (e.g. "my-branch")'
13+ required : true
14+ type : string
15+ commit :
16+ description : ' Commit SHA that is going to be benchmarked (e.g. "123456789a")'
17+ required : true
18+ type : string
19+ baseline_commit :
20+ description : ' A commit SHA that is compared against the one provided by the "commit" input (e.g. "abcdef123456")'
21+ required : true
22+ type : string
23+ jit :
24+ description : ' Whether JIT is benchmarked'
25+ required : false
26+ type : choice
27+ options :
28+ - " 0"
29+ - " 1"
530permissions :
631 contents : read
732jobs :
833 REAL_TIME_BENCHMARK :
934 name : REAL_TIME_BENCHMARK
10- if : github.repository == 'php/php-src'
35+ if : github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch'
1136 runs-on : ubuntu-22.04
37+ env :
38+ REPOSITORY : ${{ inputs.repository || 'php/php-src' }}
39+ BRANCH : ${{ inputs.branch || 'master' }}
40+ COMMIT : ${{ inputs.commit || github.sha }}
41+ BASELINE_COMMIT : ${{ inputs.baseline_commit || 'd5f6e56610c729710073350af318c4ea1b292cfe' }}
42+ JIT : ${{ inputs.jit || '1' }}
1243 steps :
1344 - name : Install dependencies
1445 run : |
@@ -29,71 +60,143 @@ jobs:
2960 ref : ' main'
3061 fetch-depth : 1
3162 path : ' php-version-benchmarks'
32- - name : Checkout php-src
63+ - name : Checkout php-src (benchmarked version)
3364 uses : actions/checkout@v4
3465 with :
35- repository : ' php/php-src '
36- ref : ' ${{ github.sha }}'
66+ repository : ' ${{ env.REPOSITORY }} '
67+ ref : ' ${{ env.COMMIT }}'
3768 fetch-depth : 100
38- path : ' php-version-benchmarks/tmp/php_master'
69+ path : ' php-version-benchmarks/tmp/php_${{ env.BRANCH }}'
70+ - name : Checkout php-src (baseline version)
71+ uses : actions/checkout@v4
72+ with :
73+ repository : ' ${{ env.REPOSITORY }}'
74+ ref : ' ${{ env.BASELINE_COMMIT }}'
75+ fetch-depth : 100
76+ path : ' php-version-benchmarks/tmp/php_baseline'
3977 - name : Setup benchmark results
4078 run : |
4179 git config --global user.name "Benchmark"
4280 git config --global user.email "[email protected] " 43-
81+
4482 rm -rf ./php-version-benchmarks/docs/results
4583 - name : Checkout benchmark data
84+ if : github.repository == 'php/php-src' && github.event_name != 'workflow_dispatch'
4685 uses : actions/checkout@v4
4786 with :
4887 repository : php/real-time-benchmark-data
4988 ssh-key : ${{ secrets.PHP_VERSION_BENCHMARK_RESULTS_DEPLOY_KEY }}
5089 path : ' php-version-benchmarks/docs/results'
51- - name : Set benchmark config
90+ - name : Setup infra config
5291 run : |
5392 set -e
5493
55- # Set infrastructure config
5694 cp ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini.dist ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
5795 ESCAPED_DOCKER_REGISTRY=$(printf '%s\n' "${{ secrets.PHP_VERSION_BENCHMARK_DOCKER_REGISTRY }}" | sed -e 's/[\/&]/\\&/g')
5896 sed -i "s/INFRA_DOCKER_REGISTRY=public.ecr.aws\/abcdefgh/INFRA_DOCKER_REGISTRY=$ESCAPED_DOCKER_REGISTRY/g" ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
5997 cp ./php-version-benchmarks/build/infrastructure/config/aws.tfvars.dist ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
6098 sed -i 's/access_key = ""/access_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_ACCESS_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
6199 sed -i 's/secret_key = ""/secret_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_SECRET_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
100+ - name : Setup PHP config - baseline PHP version
101+ if : github.repository == 'php/php-src' && github.event_name != 'workflow_dispatch'
102+ run : |
103+ set -e
104+
105+ BASELINE_SHORT_SHA="$(echo "${{ env.BASELINE_COMMIT }}" | cut -c1-4)"
106+
107+ cat << EOF > /php-version-benchmarks/config/php/baseline.ini
108+ PHP_NAME="PHP - baseline@$BASELINE_SHORT_SHA"
109+ PHP_ID=php_baseline
110+
111+ PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
112+ PHP_BRANCH=${{ env.BRANCH }}
113+ PHP_COMMIT=${{ env.BASELINE_COMMIT }}
114+
115+ PHP_OPCACHE=1
116+ PHP_JIT=0
117+ EOF
118+ - name : Setup PHP config - baseline PHP version with JIT (manual only)
119+ if : github.repository == 'php/php-src' && github.event_name == 'workflow_dispatch' && inputs.jit == '1'
120+ run : |
121+ set -e
122+
123+ BASELINE_SHORT_SHA="$(echo "${{ env.BASELINE_COMMIT }}" | cut -c1-4)"
124+
125+ cat << EOF > /php-version-benchmarks/config/php/baseline.ini
126+ PHP_NAME="PHP - baseline@$BASELINE_SHORT_SHA (JIT)"
127+ PHP_ID=php_baseline_jit
128+
129+ PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
130+ PHP_BRANCH=${{ env.BRANCH }}
131+ PHP_COMMIT=${{ env.BASELINE_COMMIT }}
132+
133+ PHP_OPCACHE=1
134+ PHP_JIT=${{ env.JIT }}
135+ EOF
136+
137+ git clone ./php-version-benchmarks/tmp/php_baseline/ ./php-version-benchmarks/tmp/php_baseline_jit
138+ - name : Setup PHP config - previous PHP version (scheduled only)
139+ if : github.repository == 'php/php-src' && github.event_name != 'workflow_dispatch'
140+ run : |
141+ set -e
62142
63143 YEAR="$(date '+%Y')"
64144 DATABASE="./php-version-benchmarks/docs/results/$YEAR/database.tsv"
65145 if [ -f "$DATABASE" ]; then
66146 LAST_RESULT_SHA="$(tail -n 2 "$DATABASE" | head -n 1 | cut -f 6)"
67147 else
68148 YESTERDAY="$(date -d "-2 day 23:59:59" '+%Y-%m-%d %H:%M:%S')"
69- LAST_RESULT_SHA="$(cd ./php-version-benchmarks/tmp/php_master / && git --no-pager log --until="$YESTERDAY" -n 1 --pretty='%H')"
149+ LAST_RESULT_SHA="$(cd ./php-version-benchmarks/tmp/php_${{ env.BRANCH }} / && git --no-pager log --until="$YESTERDAY" -n 1 --pretty='%H')"
70150 fi
71151
72- BASELINE_SHA="d5f6e56610c729710073350af318c4ea1b292cfe"
73- BASELINE_SHORT_SHA="$(echo "$BASELINE_SHA" | cut -c1-4)"
152+ cat << EOF > /php-version-benchmarks/config/php/previous.ini
153+ PHP_NAME="PHP - previous ${{ env.BRANCH }}"
154+ PHP_ID=php_${{ env.BRANCH }}_previous
155+
156+ PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
157+ PHP_BRANCH=${{ env.BRANCH }}
158+ PHP_COMMIT=$LAST_RESULT_SHA
159+
160+ PHP_OPCACHE=1
161+ PHP_JIT=0
162+ EOF
163+ - name : Setup PHP config - benchmarked PHP version
164+ run : |
165+ set -e
166+
167+ cat << EOF > /php-version-benchmarks/config/php/this.ini
168+ PHP_NAME="PHP - ${{ env.BRANCH }}"
169+ PHP_ID=php_${{ env.BRANCH }}
170+
171+ PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
172+ PHP_BRANCH=${{ env.BRANCH }}
173+ PHP_COMMIT=${{ env.COMMIT }}
174+
175+ PHP_OPCACHE=1
176+ PHP_JIT=0
177+ EOF
178+ - name : Setup PHP config - benchmarked PHP version with JIT
179+ if : env.JIT == '1'
180+ run : |
181+ set -e
74182
75- # Set config for the baseline PHP version
76- cp ./php-version-benchmarks/config/php/master.ini.dist ./php-version-benchmarks/config/php/master_baseline.ini
77- sed -i 's/PHP_NAME="PHP - master"/PHP_NAME="PHP - baseline@'"$BASELINE_SHORT_SHA"'"/g' ./php-version-benchmarks/config/php/master_baseline.ini
78- sed -i "s/PHP_ID=php_master/PHP_ID=php_master_baseline/g" ./php-version-benchmarks/config/php/master_baseline.ini
79- sed -i "s/PHP_COMMIT=/PHP_COMMIT=$BASELINE_SHA/g" ./php-version-benchmarks/config/php/master_baseline.ini
183+ cat << EOF > /php-version-benchmarks/config/php/this_jit.ini
184+ PHP_NAME="PHP - ${{ env.BRANCH }} (JIT)"
185+ PHP_ID=php_${{ env.BRANCH }}_jit
80186
81- # Set config for the previous PHP version
82- cp ./php-version-benchmarks/config/php/master.ini.dist ./php-version-benchmarks/config/php/master_last.ini
83- sed -i 's/PHP_NAME="PHP - master"/PHP_NAME="PHP - previous master"/g' ./php-version-benchmarks/config/php/master_last.ini
84- sed -i "s/PHP_ID=php_master/PHP_ID=php_master_previous/g" ./php-version-benchmarks/config/php/master_last.ini
85- sed -i "s/PHP_COMMIT=/PHP_COMMIT=$LAST_RESULT_SHA/g" ./php-version-benchmarks/config/php/master_last.ini
187+ PHP_REPO=https://github.com/${{ env.REPOSITORY }}.git
188+ PHP_BRANCH=${{ env.BRANCH }}
189+ PHP_COMMIT=${{ env.COMMIT }}
86190
87- # Set config for the current PHP version
88- cp ./php-version-benchmarks/config/php/master.ini.dist ./php-version-benchmarks/config/php/master_now.ini
89- sed -i "s/PHP_COMMIT=/PHP_COMMIT=${{ github.sha }}/g" ./php-version-benchmarks/config/php/master_now.ini
191+ PHP_OPCACHE=1
192+ PHP_JIT=${{ env.JIT }}
193+ EOF
90194
91- # Set config for current PHP version with JIT
92- git clone ./php-version-benchmarks/tmp/php_master/ ./php-version-benchmarks/tmp/php_master_jit
93- cp ./php-version-benchmarks/config/php/master_jit.ini.dist ./php-version-benchmarks/config/php/master_now_jit.ini
94- sed -i "s/PHP_COMMIT=/PHP_COMMIT=${{ github.sha }}/g" ./php-version-benchmarks/config/php/master_now_jit.ini
195+ git clone ./php-version-benchmarks/tmp/php_${{ env.BRANCH }}/ ./php- version-benchmarks/tmp/php_${{ env.BRANCH }}_jit
196+ - name : Setup test config
197+ run : |
198+ set -e
95199
96- # Set test configs
97200 cp ./php-version-benchmarks/config/test/1_laravel.ini.dist ./php-version-benchmarks/config/test/1_laravel.ini
98201 cp ./php-version-benchmarks/config/test/2_symfony_main.ini.dist ./php-version-benchmarks/config/test/2_symfony_main.ini
99202 cp ./php-version-benchmarks/config/test/4_wordpress.ini.dist ./php-version-benchmarks/config/test/4_wordpress.ini
@@ -102,6 +205,7 @@ jobs:
102205 - name : Run benchmark
103206 run : ./php-version-benchmarks/benchmark.sh run aws
104207 - name : Store results
208+ if : github.repository == 'php/php-src' && github.event_name != 'workflow_dispatch'
105209 run : |
106210 set -ex
107211
@@ -117,6 +221,17 @@ jobs:
117221 fi
118222 git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
119223 git push
224+ - name : Comment results
225+ if : github.repository != 'php/php-src' && github.event_name == 'workflow_dispatch'
226+ env :
227+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
228+ run : |
229+ PR_NUMBER=$(gh pr list --head "${{ inputs.branch }}" --state open --json number --jq '.[0].number')
230+ if [ ! -z "$PR_NUMBER" ]; then
231+ YEAR="$(date '+%Y')"
232+ NEWEST_RESULT_DIRECTORY=$(ls -td ./php-version-benchmarks/docs/results/$YEAR/*/ | head -1)
233+ gh pr comment $PR_NUMBER --body-file "$NEWEST_RESULT_DIRECTORY/result.md"
234+ fi
120235 - name : Cleanup
121236 if : always()
122237 run : |
0 commit comments