chore: add supported-configurations v2 #8484
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Profiling correctness | |
| on: | |
| pull_request: | |
| schedule: | |
| - cron: '0 0 * * *' | |
| jobs: | |
| prof-correctness: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| php-version: ['8.0', '8.1', '8.2', '8.3', '8.4', '8.5'] | |
| phpts: [nts, zts] | |
| include: | |
| - phpts: zts | |
| extensions: parallel-krakjoe/parallel@v1.2.7 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| fetch-depth: 1 | |
| submodules: true | |
| - name: Setup PHP | |
| uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5 | |
| with: | |
| php-version: ${{ matrix.php-version }} | |
| coverage: none | |
| extensions: ${{ matrix.extensions }} | |
| env: | |
| phpts: ${{ matrix.phpts }} | |
| fail-fast: true | |
| - name: Restore build cache | |
| uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.php-version }}-${{ matrix.phpts }} | |
| - name: Build profiler | |
| run: | | |
| echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" | sudo tee -a /etc/apt/sources.list | |
| echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" | sudo tee -a /etc/apt/sources.list | |
| curl https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - | |
| curl https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc | |
| sudo apt remove -y clang-* | |
| sudo apt-get update | |
| sudo apt install -y clang-17 | |
| cd profiling | |
| version_number=$(awk -F' = ' '$1 == "channel" { gsub(/"/, "", $2); print $2 }' rust-toolchain.toml) | |
| curl https://sh.rustup.rs -sSf | sh -s -- --profile minimal -y --default-toolchain "$version_number" | |
| cargo rustc --features="trigger_time_sample" --profile profiler-release --crate-type=cdylib | |
| - name: Cache build dependencies | |
| uses: actions/cache/save@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 | |
| with: | |
| path: | | |
| ~/.cargo/bin/ | |
| ~/.cargo/registry/index/ | |
| ~/.cargo/registry/cache/ | |
| ~/.cargo/git/db/ | |
| target/ | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}-${{ matrix.php-version }}-${{ matrix.phpts }} | |
| - name: Run no profile test | |
| run: | | |
| export DD_PROFILING_ENABLED=Off | |
| export DD_PROFILING_EXPERIMENTAL_FEATURES_ENABLED=1 | |
| export DD_PROFILING_EXCEPTION_MESSAGE_ENABLED=1 | |
| php -v | |
| php -d extension=target/profiler-release/libdatadog_php_profiling.so --ri datadog-profiling | |
| for test_case in "allocations" "time" "strange_frames" "timeline" "exceptions"; do | |
| mkdir -p profiling/tests/correctness/"$test_case"/ | |
| export DD_PROFILING_OUTPUT_PPROF=$PWD/profiling/tests/correctness/"$test_case"/test.pprof | |
| php -d extension="${PWD}/target/profiler-release/libdatadog_php_profiling.so" "profiling/tests/correctness/${test_case}.php" | |
| if [ -f "$DD_PROFILING_OUTPUT_PPROF".1.lz4 ]; then | |
| echo "File $DD_PROFILING_OUTPUT_PPROF.1.lz4 should not exist!" | |
| exit 1; | |
| fi | |
| done | |
| - name: Run tests | |
| run: | | |
| export DD_PROFILING_LOG_LEVEL=trace | |
| export DD_PROFILING_EXPERIMENTAL_FEATURES_ENABLED=1 | |
| export DD_PROFILING_EXPERIMENTAL_EXCEPTION_SAMPLING_DISTANCE=1 | |
| export DD_PROFILING_EXCEPTION_MESSAGE_ENABLED=1 | |
| php -v | |
| php -d extension=target/profiler-release/libdatadog_php_profiling.so --ri datadog-profiling | |
| for test_case in "allocations" "time" "strange_frames" "timeline" "exceptions"; do | |
| mkdir -p profiling/tests/correctness/"$test_case"/ | |
| export DD_PROFILING_OUTPUT_PPROF=$PWD/profiling/tests/correctness/"$test_case"/test.pprof | |
| php -d extension=$PWD/target/profiler-release/libdatadog_php_profiling.so profiling/tests/correctness/"$test_case".php | |
| done | |
| mkdir -p profiling/tests/correctness/allocations_1byte/ | |
| export DD_PROFILING_OUTPUT_PPROF=$PWD/profiling/tests/correctness/allocations_1byte/test.pprof | |
| export DD_PROFILING_ALLOCATION_SAMPLING_DISTANCE=1 | |
| php -d extension=$PWD/target/profiler-release/libdatadog_php_profiling.so profiling/tests/correctness/allocations.php | |
| mkdir -p profiling/tests/correctness/allocations_1byte_no_zend_alloc/ | |
| export DD_PROFILING_OUTPUT_PPROF=$PWD/profiling/tests/correctness/allocations_1byte_no_zend_alloc/test.pprof | |
| export DD_PROFILING_ALLOCATION_SAMPLING_DISTANCE=1 | |
| USE_ZEND_ALLOC=0 php -d extension=$PWD/target/profiler-release/libdatadog_php_profiling.so profiling/tests/correctness/allocations.php | |
| unset DD_PROFILING_ALLOCATION_SAMPLING_DISTANCE | |
| - name: Run allocation_time_combined test (PHP 8.4+) | |
| if: fromJSON(matrix.php-version) >= 8.4 | |
| run: | | |
| export DD_PROFILING_LOG_LEVEL=trace | |
| export DD_PROFILING_EXPERIMENTAL_FEATURES_ENABLED=1 | |
| export DD_PROFILING_EXPERIMENTAL_EXCEPTION_SAMPLING_DISTANCE=1 | |
| export DD_PROFILING_EXCEPTION_MESSAGE_ENABLED=1 | |
| php -v | |
| php -d extension=target/profiler-release/libdatadog_php_profiling.so --ri datadog-profiling | |
| mkdir -p profiling/tests/correctness/allocation_time_combined/ | |
| export DD_PROFILING_OUTPUT_PPROF=$PWD/profiling/tests/correctness/allocation_time_combined/test.pprof | |
| export DD_PROFILING_ALLOCATION_ENABLED=yes | |
| export DD_PROFILING_ALLOCATION_SAMPLING_DISTANCE=1 | |
| export DD_PROFILING_WALL_TIME_ENABLED=yes | |
| export DD_PROFILING_EXPERIMENTAL_CPU_TIME_ENABLED=no | |
| export DD_PROFILING_ENDPOINT_COLLECTION_ENABLED=no | |
| export EXECUTION_TIME=5 | |
| php -d extension=$PWD/target/profiler-release/libdatadog_php_profiling.so profiling/tests/correctness/allocation_time_combined.php | |
| unset DD_PROFILING_ALLOCATION_ENABLED DD_PROFILING_ALLOCATION_SAMPLING_DISTANCE DD_PROFILING_WALL_TIME_ENABLED DD_PROFILING_EXPERIMENTAL_CPU_TIME_ENABLED DD_PROFILING_ENDPOINT_COLLECTION_ENABLED EXECUTION_TIME | |
| - name: Run ZTS tests | |
| if: matrix.phpts == 'zts' | |
| run: | | |
| export DD_PROFILING_LOG_LEVEL=trace | |
| export DD_PROFILING_EXPERIMENTAL_FEATURES_ENABLED=1 | |
| export DD_PROFILING_EXPERIMENTAL_EXCEPTION_SAMPLING_DISTANCE=1 | |
| export DD_PROFILING_EXCEPTION_MESSAGE_ENABLED=1 | |
| php -v | |
| php -d extension=target/profiler-release/libdatadog_php_profiling.so --ri datadog-profiling | |
| for test_case in "exceptions_zts"; do | |
| mkdir -p profiling/tests/correctness/"$test_case"/ | |
| export DD_PROFILING_OUTPUT_PPROF=$PWD/profiling/tests/correctness/"$test_case"/test.pprof | |
| php -d extension=$PWD/target/profiler-release/libdatadog_php_profiling.so profiling/tests/correctness/"$test_case".php | |
| done | |
| - name: Check profiler correctness for allocations | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/allocations.json | |
| pprof_path: profiling/tests/correctness/allocations/ | |
| - name: Check profiler correctness for allocations with 1 byte sampling distance | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/allocations.json | |
| pprof_path: profiling/tests/correctness/allocations_1byte/ | |
| - name: Check profiler correctness for allocations with 1 byte sampling distance and `USE_ZEND_ALLOC=0` | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/allocations.json | |
| pprof_path: profiling/tests/correctness/allocations_1byte_no_zend_alloc/ | |
| - name: Check profiler correctness for time | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/time.json | |
| pprof_path: profiling/tests/correctness/time/ | |
| - name: Check profiler correctness for strange frames | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/strange_frames.json | |
| pprof_path: profiling/tests/correctness/strange_frames/ | |
| - name: Check profiler correctness for timeline | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/timeline.json | |
| pprof_path: profiling/tests/correctness/timeline/ | |
| - name: Check profiler correctness for allocation_time_combined | |
| if: fromJSON(matrix.php-version) >= 8.4 | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/allocation_time_combined.json | |
| pprof_path: profiling/tests/correctness/allocation_time_combined/ | |
| - name: Check profiler correctness for exceptions ZTS | |
| if: matrix.phpts == 'zts' | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/exceptions_zts.json | |
| pprof_path: profiling/tests/correctness/exceptions_zts/ | |
| - name: Check profiler correctness for exceptions | |
| uses: Datadog/prof-correctness/analyze@main | |
| with: | |
| expected_json: profiling/tests/correctness/exceptions.json | |
| pprof_path: profiling/tests/correctness/exceptions/ | |
| - name: Notify Slack | |
| if: failure() && github.ref == 'refs/heads/master' | |
| run: | | |
| curl -X POST "${{ secrets.SLACK_WEBHOOK }}" \ | |
| -H 'Content-Type: application/json' \ | |
| -d "{'scenarios': 'PHP', 'failed_run_url': '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'}" |