Skip to content

Commit 63d0549

Browse files
committed
Test version benchmark
1 parent dc5f3b9 commit 63d0549

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

.github/workflows/benchmark.yml

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

0 commit comments

Comments
 (0)