2424 options :
2525 - " 0"
2626 - " 1"
27- opcache :
28- description : ' Whether opcache is enabled for the benchmarked commit'
29- required : true
30- default : " 1"
31- type : choice
32- options :
33- - " 0"
34- - " 1"
35- - " 2"
36- baseline_opcache :
37- description : ' Whether opcache is enabled for the baseline commit'
38- required : true
39- default : " 1"
40- type : choice
41- options :
42- - " 0"
43- - " 1"
44- - " 2"
4527 run_micro_bench :
4628 description : ' Whether to run the micro_bench.php test'
4729 required : true
@@ -60,17 +42,15 @@ jobs:
6042 REAL_TIME_BENCHMARK :
6143 name : REAL_TIME_BENCHMARK
6244 if : github.repository == 'php/php-src' || github.event_name == 'workflow_dispatch'
63- runs-on : ubuntu-22 .04
45+ runs-on : ubuntu-24 .04
6446 env :
6547 REPOSITORY : ${{ github.repository }}
6648 BRANCH : " master"
6749 COMMIT : ${{ github.sha }}
6850 BASELINE_COMMIT : " d5f6e56610c729710073350af318c4ea1b292cfe"
6951 ID : " master"
70- OPCACHE : " 1"
71- BASELINE_OPCACHE : " 2"
7252 JIT : " 1"
73- INSTRUCTION_COUNT : " 1 "
53+ INSTRUCTION_COUNT : " 0 "
7454 RUN_MICRO_BENCH : " 0"
7555 YEAR : " "
7656 steps :
8262 echo "YEAR=$YEAR" >> $GITHUB_ENV
8363
8464 if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
85- PR_INFO=$(gh pr view ${{ inputs.pull_request }} --json headRepositoryOwner,headRepository,headRefName,headRefOid,baseRefOid --repo ${{ github.repository }} | jq -r '.headRepositoryOwner.login, .headRepository.name, .headRefName, .headRefOid, .baseRefOid ')
65+ PR_INFO=$(gh pr view ${{ inputs.pull_request }} --json headRepositoryOwner,headRepository,headRefName,headRefOid,baseRefName --repo ${{ github.repository }} | jq -r '.headRepositoryOwner.login, .headRepository.name, .headRefName, .headRefOid, .baseRefName ')
8666
8767 REPOSITORY="$(echo "$PR_INFO" | sed -n '1p')/$(echo "$PR_INFO" | sed -n '2p')"
8868 echo "REPOSITORY=$REPOSITORY" >> $GITHUB_ENV
@@ -93,13 +73,13 @@ jobs:
9373 COMMIT=$(echo "$PR_INFO" | sed -n '4p')
9474 echo "COMMIT=$COMMIT" >> $GITHUB_ENV
9575
96- BASELINE_COMMIT=$(echo "$PR_INFO" | sed -n '5p')
76+ BASELINE_BRANCH=$(echo "$PR_INFO" | sed -n '5p')
77+
78+ BASELINE_COMMIT=$(gh api /repos/${{ github.repository }}/compare/$BASELINE_BRANCH...$COMMIT --jq '.merge_base_commit.sha')
9779 echo "BASELINE_COMMIT=$BASELINE_COMMIT" >> $GITHUB_ENV
9880
9981 echo "ID=benchmarked" >> $GITHUB_ENV
10082
101- echo "OPCACHE=${{ inputs.opcache }}" >> $GITHUB_ENV
102- echo "BASELINE_OPCACHE=${{ inputs.baseline_opcache }}" >> $GITHUB_ENV
10383 echo "JIT=${{ inputs.jit }}" >> $GITHUB_ENV
10484 echo "INSTRUCTION_COUNT=${{ inputs.instruction_count }}" >> $GITHUB_ENV
10585 echo "RUN_MICRO_BENCH=${{ inputs.run_micro_bench }}" >> $GITHUB_ENV
@@ -151,18 +131,6 @@ jobs:
151131 repository : php/real-time-benchmark-data
152132 ssh-key : ${{ secrets.PHP_VERSION_BENCHMARK_RESULTS_DEPLOY_KEY }}
153133 path : ' php-version-benchmarks/docs/results'
154- - name : Setup infra config
155- run : |
156- set -e
157-
158- cp ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini.dist ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
159- ESCAPED_DOCKER_REGISTRY=$(printf '%s\n' "${{ secrets.PHP_VERSION_BENCHMARK_DOCKER_REGISTRY }}" | sed -e 's/[\/&]/\\&/g')
160- 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
161- sed -i "s/INFRA_MEASURE_INSTRUCTION_COUNT=0/INFRA_MEASURE_INSTRUCTION_COUNT=${{ env.INSTRUCTION_COUNT }}/g" ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
162- cp ./php-version-benchmarks/build/infrastructure/config/aws.tfvars.dist ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
163- sed -i 's/access_key = ""/access_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_ACCESS_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
164- sed -i 's/secret_key = ""/secret_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_SECRET_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
165- sed -i 's/github_token = ""/github_token = "${{ secrets.GITHUB_TOKEN }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
166134 - name : Setup PHP config - baseline PHP version
167135 run : |
168136 set -e
@@ -173,11 +141,10 @@ jobs:
173141 PHP_NAME="PHP - baseline@$BASELINE_SHORT_SHA"
174142 PHP_ID=php_baseline
175143
176- PHP_REPO=https:// github.com /${{ env.REPOSITORY }}.git
144+ PHP_REPO=${{ github.server_url }} /${{ env.REPOSITORY }}.git
177145 PHP_BRANCH=${{ env.BRANCH }}
178146 PHP_COMMIT=${{ env.BASELINE_COMMIT }}
179147
180- PHP_OPCACHE=${{ env.BASELINE_OPCACHE }}
181148 PHP_JIT=0
182149 EOF
183150 - name : Setup PHP config - baseline PHP version with JIT
@@ -191,11 +158,10 @@ jobs:
191158 PHP_NAME="PHP - baseline@$BASELINE_SHORT_SHA (JIT)"
192159 PHP_ID=php_baseline_jit
193160
194- PHP_REPO=https:// github.com /${{ env.REPOSITORY }}.git
161+ PHP_REPO=${{ github.server_url }} /${{ env.REPOSITORY }}.git
195162 PHP_BRANCH=${{ env.BRANCH }}
196163 PHP_COMMIT=${{ env.BASELINE_COMMIT }}
197164
198- PHP_OPCACHE=${{ env.BASELINE_OPCACHE }}
199165 PHP_JIT=${{ env.JIT }}
200166 EOF
201167
@@ -213,15 +179,16 @@ jobs:
213179 LAST_RESULT_SHA="$(cd ./php-version-benchmarks/tmp/php_${{ env.ID }}/ && git --no-pager log --until="$YESTERDAY" -n 1 --pretty='%H')"
214180 fi
215181
182+ echo "LAST_RESULT_SHA=$LAST_RESULT_SHA" >> $GITHUB_ENV
183+
216184 cat << EOF > ./php-version-benchmarks/config/php/previous.ini
217185 PHP_NAME="PHP - previous ${{ env.BRANCH }}"
218186 PHP_ID=php_previous
219187
220- PHP_REPO=https:// github.com /${{ env.REPOSITORY }}.git
188+ PHP_REPO=${{ github.server_url }} /${{ env.REPOSITORY }}.git
221189 PHP_BRANCH=${{ env.BRANCH }}
222190 PHP_COMMIT=$LAST_RESULT_SHA
223191
224- PHP_OPCACHE=1
225192 PHP_JIT=0
226193 EOF
227194 - name : Setup PHP config - benchmarked PHP version
@@ -232,11 +199,10 @@ jobs:
232199 PHP_NAME="PHP - ${{ env.BRANCH }}"
233200 PHP_ID=php_${{ env.ID }}
234201
235- PHP_REPO=https:// github.com /${{ env.REPOSITORY }}.git
202+ PHP_REPO=${{ github.server_url }} /${{ env.REPOSITORY }}.git
236203 PHP_BRANCH=${{ env.BRANCH }}
237204 PHP_COMMIT=${{ env.COMMIT }}
238205
239- PHP_OPCACHE=${{ env.OPCACHE }}
240206 PHP_JIT=0
241207 EOF
242208 - name : Setup PHP config - benchmarked PHP version with JIT
@@ -248,11 +214,10 @@ jobs:
248214 PHP_NAME="PHP - ${{ env.BRANCH }} (JIT)"
249215 PHP_ID=php_${{ env.ID }}_jit
250216
251- PHP_REPO=https:// github.com /${{ env.REPOSITORY }}.git
217+ PHP_REPO=${{ github.server_url }} /${{ env.REPOSITORY }}.git
252218 PHP_BRANCH=${{ env.BRANCH }}
253219 PHP_COMMIT=${{ env.COMMIT }}
254220
255- PHP_OPCACHE=${{ env.OPCACHE }}
256221 PHP_JIT=${{ env.JIT }}
257222 EOF
258223
@@ -269,6 +234,37 @@ jobs:
269234 if [ "${{ env.RUN_MICRO_BENCH }}" -eq "1" ]; then
270235 cp ./php-version-benchmarks/config/test/6_micro_bench.php.ini.dist ./php-version-benchmarks/config/test/6_micro_bench.php.ini
271236 fi
237+ - name : Setup infra config
238+ run : |
239+ set -e
240+
241+ if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
242+ WORKSPACE="manual"
243+ BASE_COMMIT="$(echo "${{ env.BASELINE_COMMIT }}" | cut -c 1-6)"
244+ else
245+ WORKSPACE="nightly"
246+ BASE_COMMIT="$(echo "${{ env.LAST_RESULT_SHA }}" | cut -c 1-6)"
247+ fi
248+ COMPARE_COMMIT="$(echo "${{ env.COMMIT }}" | cut -c 1-6)"
249+
250+ cp ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini.dist ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
251+ sed -i "s|INFRA_DOCKER_REGISTRY=public.ecr.aws/abcdefgh|INFRA_DOCKER_REGISTRY=${{ secrets.PHP_VERSION_BENCHMARK_DOCKER_REGISTRY }}|g" ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
252+ sed -i "s|INFRA_WORKSPACE=|INFRA_WORKSPACE=$WORKSPACE|g" ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
253+ sed -i "s/INFRA_MEASURE_INSTRUCTION_COUNT=0/INFRA_MEASURE_INSTRUCTION_COUNT=${{ env.INSTRUCTION_COUNT }}/g" ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
254+
255+ cp ./php-version-benchmarks/build/infrastructure/config/aws.tfvars.dist ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
256+ sed -i 's/access_key = ""/access_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_ACCESS_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
257+ sed -i 's/secret_key = ""/secret_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_SECRET_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
258+ sed -i 's/state_bucket = ""/state_bucket = "${{ secrets.PHP_VERSION_BENCHMARK_STATE_BUCKET }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
259+ sed -i 's/github_token = ""/github_token = "${{ secrets.GITHUB_TOKEN }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
260+
261+ WORKFLOW_RUN_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
262+ sed -i "s|log_url = \"\"|log_url = \"$WORKFLOW_RUN_URL\"|g" ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
263+ sed -i 's|artifact_url = ""|artifact_url = "#ARTIFACT_URL#"|g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
264+
265+ CHANGESET_URL="${{ github.server_url }}/${{ github.repository }}/compare/$BASE_COMMIT..$COMPARE_COMMIT"
266+ sed -i 's|extra_title = ""|extra_title = "Changeset"|g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
267+ sed -i "s|extra_text = \"\"|extra_text = \"$CHANGESET_URL\"|g" ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
272268 - name : Run benchmark
273269 run : ./php-version-benchmarks/benchmark.sh run aws
274270 - name : Store results
@@ -288,12 +284,13 @@ jobs:
288284 fi
289285 git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
290286 git push
291- - name : Upload artifact
292- if : github.event_name == 'workflow_dispatch'
287+ - name : Upload artifacts
288+ id : upload
293289 uses : actions/upload-artifact@v6
294290 with :
295291 name : results
296- path : ./php-version-benchmarks/docs/results/${{ env.YEAR }}
292+ path : |
293+ ./php-version-benchmarks/tmp/results/${{ env.YEAR }}/**/*
297294 retention-days : 30
298295 - name : Comment results
299296 if : github.event_name == 'workflow_dispatch'
@@ -302,6 +299,7 @@ jobs:
302299 run : |
303300 cd ./php-version-benchmarks/tmp/php_${{ env.ID }}
304301 NEWEST_RESULT_DIRECTORY=$(ls -td ${{ github.workspace }}/php-version-benchmarks/docs/results/${{ env.YEAR }}/*/ | head -1)
302+ sed -i "s|#ARTIFACT_URL#|${{ steps.upload.outputs.artifact-url }}|g" "${NEWEST_RESULT_DIRECTORY}result.md"
305303 gh pr comment ${{ inputs.pull_request }} --body-file "${NEWEST_RESULT_DIRECTORY}result.md" --repo ${{ github.repository }}
306304 - name : Cleanup
307305 if : always()
0 commit comments