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