Skip to content

Commit 4e0559a

Browse files
committed
Add version benchmark to CI
1 parent 7dfbf4d commit 4e0559a

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

.github/workflows/benchmark.yml

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
name: Benchmark
2+
on:
3+
schedule:
4+
- cron: "0 2 * * *"
5+
permissions:
6+
contents: read
7+
jobs:
8+
BENCHMARK:
9+
name: BENCHMARK
10+
if: github.repository == 'php/php-src'
11+
runs-on: ubuntu-22.04
12+
steps:
13+
- name: Install dependencies
14+
run: |
15+
set -ex
16+
sudo apt-get update
17+
sudo apt-get install gpg
18+
19+
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
20+
gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint
21+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
22+
sudo apt update
23+
sudo apt install terraform=1.5.7-*
24+
- name: Checkout benchmark suite
25+
uses: actions/checkout@v4
26+
with:
27+
repository: 'kocsismate/php-version-benchmarks'
28+
ref: 'main'
29+
fetch-depth: 1
30+
path: 'php-version-benchmarks'
31+
- name: Checkout php-src
32+
uses: actions/checkout@v4
33+
with:
34+
repository: 'php/php-src'
35+
ref: 'master'
36+
fetch-depth: 100
37+
path: 'php-version-benchmarks/tmp/php_master'
38+
- name: Copy-paste the same repo content for benchmarking JIT
39+
run: |
40+
set -e
41+
42+
cp -r "php-version-benchmarks/tmp/php_master/" "php-version-benchmarks/tmp/php_master_jit"
43+
- name: Setup benchmark config
44+
run: |
45+
set -e
46+
47+
cp ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini.dist ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini
48+
ESCAPED_DOCKER_REGISTRY=$(printf '%s\n' "${{ secrets.PHP_VERSION_BENCHMARK_DOCKER_REGISTRY }}" | sed -e 's/[\/&]/\\&/g')
49+
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
50+
51+
cp ./php-version-benchmarks/build/infrastructure/config/aws.tfvars.dist ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
52+
sed -i 's/access_key = ""/access_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_ACCESS_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
53+
sed -i 's/secret_key = ""/secret_key = "${{ secrets.PHP_VERSION_BENCHMARK_AWS_SECRET_KEY }}"/g' ./php-version-benchmarks/build/infrastructure/config/aws.tfvars
54+
55+
cp ./php-version-benchmarks/config/php/master.ini.dist ./php-version-benchmarks/config/php/master1.ini
56+
YESTERDAY="$(date -d "-2 day 13:00" '+%Y-%m-%d')"
57+
YESTERDAY_SHA="$(cd ./php-version-benchmarks/tmp/php_master/ && git --no-pager log --until="$YESTERDAY 23:59:59" -n 1 --pretty='%H')"
58+
sed -i 's/PHP_NAME="PHP - master"/PHP_NAME="PHP - previous master"/g' ./php-version-benchmarks/config/php/master1.ini
59+
sed -i "s/PHP_ID=php_master/PHP_ID=php_master_previous/g" ./php-version-benchmarks/config/php/master1.ini
60+
sed -i "s/PHP_COMMIT=/PHP_COMMIT=$YESTERDAY_SHA/g" ./php-version-benchmarks/config/php/master1.ini
61+
cp ./php-version-benchmarks/config/php/master.ini.dist ./php-version-benchmarks/config/php/master2.ini
62+
cp ./php-version-benchmarks/config/php/master_jit.ini.dist ./php-version-benchmarks/config/php/master2_jit.ini
63+
64+
cp ./php-version-benchmarks/config/test/1_laravel.ini.dist ./php-version-benchmarks/config/test/1_laravel.ini
65+
cp ./php-version-benchmarks/config/test/2_symfony_main.ini.dist ./php-version-benchmarks/config/test/2_symfony_main.ini
66+
cp ./php-version-benchmarks/config/test/4_wordpress.ini.dist ./php-version-benchmarks/config/test/4_wordpress.ini
67+
cp ./php-version-benchmarks/config/test/5_bench.php.ini.dist ./php-version-benchmarks/config/test/5_bench.php.ini
68+
cp ./php-version-benchmarks/config/test/6_micro_bench.php.ini.dist ./php-version-benchmarks/config/test/6_micro_bench.php.ini
69+
70+
rm -rf ./php-version-benchmarks/docs/results
71+
- name: Git setup
72+
run: |
73+
git config --global user.name "Benchmark"
74+
git config --global user.email "[email protected]"
75+
- name: Checkout benchmark results
76+
uses: actions/checkout@v4
77+
with:
78+
repository: kocsismate/php-version-benchmark-results
79+
ssh-key: ${{ secrets.PHP_VERSION_BENCHMARK_RESULTS_DEPLOY_KEY }}
80+
path: 'php-version-benchmarks/docs/results'
81+
- name: Run benchmark
82+
run: ./php-version-benchmarks/benchmark.sh run aws
83+
- name: Store results
84+
run: |
85+
set -ex
86+
87+
cd ./php-version-benchmarks/docs/results
88+
git pull --autostash
89+
if [ -e ".git/MERGE_HEAD" ]; then
90+
echo "Merging, can't proceed"
91+
exit 1
92+
fi
93+
git add .
94+
if git diff --cached --quiet; then
95+
exit 0
96+
fi
97+
git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
98+
git push
99+
- name: Cleanup
100+
if: always()
101+
run: |
102+
set -ex
103+
104+
rm -rf ./php-version-benchmarks/tmp/
105+
rm -f ./php-version-benchmarks/build/infrastructure/config/*.tfvars
106+
rm -rf ./php-version-benchmarks/build/infrastructure/aws/.terraform/
107+
rm -f ./php-version-benchmarks/build/infrastructure/aws/.terraform.lock.hcl
108+
rm -f ./php-version-benchmarks/build/infrastructure/aws/aws.tfplan
109+
rm -f ./php-version-benchmarks/build/infrastructure/aws/terraform.tfstate
110+
rm -f ./php-version-benchmarks/build/infrastructure/aws/terraform.tfstate.backup
111+
rm -f ./php-version-benchmarks/config/infra/aws/*.ini

0 commit comments

Comments
 (0)