|
| 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