Skip to content

Commit ad7192a

Browse files
committed
Add version benchmark to CI
1 parent 4dc7795 commit ad7192a

File tree

2 files changed

+117
-367
lines changed

2 files changed

+117
-367
lines changed

.github/workflows/benchmark.yml

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

0 commit comments

Comments
 (0)