Skip to content

Commit ca8b054

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

File tree

2 files changed

+114
-367
lines changed

2 files changed

+114
-367
lines changed

.github/workflows/benchmark.yml

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
name: Benchmark
2+
#on:
3+
# schedule:
4+
# - cron: "0 2 * * *"
5+
on: [push, pull_request]
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' || github.event_name == 'pull_request'
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 php-src
29+
uses: actions/checkout@v4
30+
with:
31+
repository: 'kocsismate/php-src'
32+
ref: '${{ github.ref }}'
33+
fetch-depth: 100
34+
path: 'php'
35+
- name: Checkout benchmark suite
36+
uses: actions/checkout@v4
37+
with:
38+
repository: 'kocsismate/php-version-benchmarks'
39+
ref: 'main'
40+
fetch-depth: 1
41+
path: 'php-version-benchmarks'
42+
- name: Setup benchmark config
43+
run: |
44+
set -e
45+
46+
#cp ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini.dist ./php-version-benchmarks/config/infra/aws/x86_64-metal.ini.dist
47+
cp ./php-version-benchmarks/config/infra/aws/x86_64.ini.dist ./php-version-benchmarks/config/infra/aws/x86_64.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.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/ && 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+
sed -i "s/PHP_COMMIT=/PHP_COMMIT=${{ github.sha }}/g" ./php-version-benchmarks/config/php/master2.ini
63+
cp ./php-version-benchmarks/config/php/master_jit.ini.dist ./php-version-benchmarks/config/php/master2_jit.ini
64+
sed -i "s/PHP_COMMIT=/PHP_COMMIT=${{ github.sha }}/g" ./php-version-benchmarks/config/php/master2_jit.ini
65+
66+
cp ./php-version-benchmarks/config/test/1_laravel.ini.dist ./php-version-benchmarks/config/test/1_laravel.ini
67+
cp ./php-version-benchmarks/config/test/2_symfony_main.ini.dist ./php-version-benchmarks/config/test/2_symfony_main.ini
68+
cp ./php-version-benchmarks/config/test/4_wordpress.ini.dist ./php-version-benchmarks/config/test/4_wordpress.ini
69+
cp ./php-version-benchmarks/config/test/5_bench.php.ini.dist ./php-version-benchmarks/config/test/5_bench.php.ini
70+
cp ./php-version-benchmarks/config/test/6_micro_bench.php.ini.dist ./php-version-benchmarks/config/test/6_micro_bench.php.ini
71+
72+
rm -rf ./php-version-benchmarks/docs/results
73+
- name: Git setup
74+
run: |
75+
git config --global user.name "Benchmark"
76+
git config --global user.email "benchmark@php.net"
77+
- name: Checkout benchmark results
78+
uses: actions/checkout@v4
79+
with:
80+
repository: kocsismate/php-version-benchmark-results
81+
ssh-key: ${{ secrets.PHP_VERSION_BENCHMARK_RESULTS_DEPLOY_KEY }}
82+
path: 'php-version-benchmarks/docs/results'
83+
- name: Run benchmark
84+
run: ./php-version-benchmarks/benchmark.sh run aws
85+
- name: Store results
86+
if: github.event_name == 'push'
87+
run: |
88+
set -ex
89+
90+
cd ./php-version-benchmarks/docs/results
91+
git pull --autostash
92+
if [ -e ".git/MERGE_HEAD" ]; then
93+
echo "Merging, can't proceed"
94+
exit 1
95+
fi
96+
git add .
97+
if git diff --cached --quiet; then
98+
exit 0
99+
fi
100+
git commit -m "Add result for ${{ github.repository }}@${{ github.sha }}"
101+
git push
102+
- name: Cleanup
103+
if: always()
104+
run: |
105+
set -ex
106+
107+
rm -rf ./php-version-benchmarks/tmp/
108+
rm -f ./php-version-benchmarks/build/infrastructure/config/*.tfvars
109+
rm -rf ./php-version-benchmarks/build/infrastructure/aws/.terraform/
110+
rm -rf ./php-version-benchmarks/build/infrastructure/aws/.terraform.lock.hcl
111+
rm -rf ./php-version-benchmarks/build/infrastructure/aws/aws.tfplan
112+
rm -rf ./php-version-benchmarks/build/infrastructure/aws/terraform.tfstate
113+
rm -rf ./php-version-benchmarks/build/infrastructure/aws/terraform.tfstate.backup
114+
rm -f ./php-version-benchmarks/config/infra/aws/*.ini

0 commit comments

Comments
 (0)