Skip to content

[php] Add symfony framework#7193

Open
estringana wants to merge 16 commits into
mainfrom
estringana/symfony
Open

[php] Add symfony framework#7193
estringana wants to merge 16 commits into
mainfrom
estringana/symfony

Conversation

@estringana

@estringana estringana commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Motivation

Adds a new symfony7x PHP weblog built with Symfony's idiomatic patterns (security component, form-based login, Doctrine ORM). The app implements the standard system-tests endpoint surface including AppSec, login events, automated payment events, and user/session
tracking.

Updates manifests/php.yml with per-test declarations for symfony7x, marking unsupported scenarios as missing_feature where the weblog or tracer version doesn't yet cover them.

Changes

Workflow

  1. ⚠️ Create your PR as draft ⚠️
  2. Work on you PR until the CI passes
  3. Mark it as ready for review
    • Test logic is modified? -> Get a review from RFC owner.
    • Framework is modified, or non obvious usage of it -> get a review from R&P team

🚀 Once your PR is reviewed and the CI green, you can merge it!

🛟 #apm-shared-testing 🛟

Reviewer checklist

  • Anything but tests/ or manifests/ is modified ? I have the approval from R&P team
  • A docker base image is modified?
    • the relevant build-XXX-image label is present
  • A scenario is added, removed or renamed?

@github-actions

github-actions Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

CODEOWNERS have been resolved as:

utils/build/docker/php/symfony7x.Dockerfile                             @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/.apache.conf                   @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/Acme/composer.json             @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/Acme/src/Acme.php              @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/bin/console                    @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/bin/init-db.php                @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/composer.json                  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/config/bundles.php             @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/config/packages/doctrine.yaml  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/config/packages/framework.yaml  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/config/packages/security.yaml  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/config/routes.yaml             @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/config/services.yaml           @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/public/.htaccess               @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/public/index.php               @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Controller/AppController.php  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Controller/LoginController.php  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Entity/User.php            @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Kernel.php                 @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Repository/UserRepository.php  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Security/LoginFailureHandler.php  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Security/LoginSuccessHandler.php  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/src/Security/UserProvider.php  @DataDog/apm-php @DataDog/system-tests-core
utils/build/docker/php/weblogs/symfony7x/var/cache/.gitkeep             @DataDog/apm-php @DataDog/system-tests-core
docs/execute/build.md                                                   @DataDog/system-tests-core
manifests/php.yml                                                       @DataDog/apm-php @DataDog/asm-php
tests/appsec/test_automated_login_events.py                             @DataDog/asm-libraries @DataDog/system-tests-core

@datadog-system-tests-org

datadog-system-tests-org Bot commented Jun 22, 2026

Copy link
Copy Markdown

Pipelines

⚠️ Warnings

🚦 61 Pipeline jobs failed

Testing the test | System Tests (golang, prod) / parametric / parametric (1)   View in Datadog   GitHub Actions

Testing the test | System Tests (php, dev) / End-to-end #1 / apache-mod-7.2-zts 1   View in Datadog   GitHub Actions

Testing the test | System Tests (php, dev) / End-to-end #1 / laravel11x 1   View in Datadog   GitHub Actions

View all 61 failed jobs.

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 6c14076 | Docs | Give us feedback!

@datadog-datadog-prod-us1-2

datadog-datadog-prod-us1-2 Bot commented Jun 22, 2026

Copy link
Copy Markdown

Pipelines  Tests

Fix all issues with BitsAI

⚠️ Warnings

🚦 10 Pipeline jobs failed

Testing the test | System Tests (python, dev) / End-to-end #1 / uwsgi-poc 1   View in Datadog   GitHub Actions

🧪 1 Test failed

tests.appsec.iast.sink.test_unvalidated_redirect.TestUnvalidatedRedirect.test_secure[uwsgi-poc] from system_tests_suite   View in Datadog
ValueError: Unexpected vulnerability reported: UNVALIDATED_REDIRECT

self = <tests.appsec.iast.sink.test_unvalidated_redirect.TestUnvalidatedRedirect object at 0x7f59b8299550>

    def test_secure(self):
>       super().test_secure()

tests/appsec/iast/sink/test_unvalidated_redirect.py:47: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/appsec/iast/utils.py:186: in test_secure
...

Testing the test | System Tests (python, prod) / End-to-end #1 / django-poc 1   View in Datadog   GitHub Actions

🧪 1 Test failed

tests.otel.test_tracing_otlp.Test_Otel_Tracing_OTLP.test_128bit_trace_id_consistent_across_spans[django-poc] from system_tests_suite   View in Datadog
AssertionError: Found 16 span(s) in the same logical trace with a different 128-bit traceId than the server span (server traceId=6a510720000000008531e54519e7f1f8). Mismatched (span_id, trace_id_hex): [('ab2d19deed9de9a2', '00000000000000008531e54519e7f1f8'), ('779e90d91214e500', '00000000000000008531e54519e7f1f8'), ('ce84c0a2f6b269ec', '00000000000000008531e54519e7f1f8'), ('093b0915338dfa3e', '00000000000000008531e54519e7f1f8'), ('997fd338df520612', '00000000000000008531e54519e7f1f8'), ('ca0005a132994a95', '00000000000000008531e54519e7f1f8'), ('fda228a71a38204c', '00000000000000008531e54519e7f1f8'), ('bcd705db0cef5acf', '00000000000000008531e54519e7f1f8'), ('aabd163364028ad0', '00000000000000008531e54519e7f1f8'), ('ada870831f142d3d', '00000000000000008531e54519e7f1f8'), ('62dcd8f0265b9dbd', '00000000000000008531e54519e7f1f8'), ('b22337cfe81bbb05', '00000000000000008531e54519e7f1f8'), ('238e711ee2355d37', '00000000000000008531e54519e7f1f8'), ('519cb53e41470837', '00000000000000008531e54519e7f1f8'), ('cc992ad424bc2f47', '00000000000000008531e54519e7f1f8'), ('47aed0907d178ef6', '00000000000000008531e54519e7f1f8')]. This indicates the OTLP exporter is not propagating _dd.p.tid (high 64 bits) from the chunk root to the remaining chunk spans.
assert not [('ab2d19deed9de9a2', '00000000000000008531e54519e7f1f8'), ('779e90d91214e500', '00000000000000008531e54519e7f1f8'), (...'997fd338df520612', '00000000000000008531e54519e7f1f8'), ('ca0005a132994a95', '00000000000000008531e54519e7f1f8'), ...]

self = <tests.otel.test_tracing_otlp.Test_Otel_Tracing_OTLP object at 0x7f264ba5a540>

    def test_128bit_trace_id_consistent_across_spans(self):
        """Validates that every span in a trace carries the same full 128-bit OTLP traceId.
    
        DD tracers emit 128-bit trace IDs by default but the v04/v05 msgpack wire format only
        carries the lower 64 bits per span; the upper 64 bits live in the \`_dd.p.tid\` meta tag,
...

Testing the test | System Tests (python, prod) / End-to-end #1 / django-py3.13 1   View in Datadog   GitHub Actions

🧪 1 Test failed

tests.otel.test_tracing_otlp.Test_Otel_Tracing_OTLP.test_128bit_trace_id_consistent_across_spans[django-py3.13] from system_tests_suite   View in Datadog
AssertionError: Found 16 span(s) in the same logical trace with a different 128-bit traceId than the server span (server traceId=6a5106cf00000000571d980ba1447bc5). Mismatched (span_id, trace_id_hex): [('3bf514d331801235', '0000000000000000571d980ba1447bc5'), ('6463746ca54ac669', '0000000000000000571d980ba1447bc5'), ('58118e59a624390e', '0000000000000000571d980ba1447bc5'), ('c69f4044e44e1323', '0000000000000000571d980ba1447bc5'), ('c4c4d147cd46aad0', '0000000000000000571d980ba1447bc5'), ('a9aa9a1b607b90eb', '0000000000000000571d980ba1447bc5'), ('f272a10f4c3f9fbc', '0000000000000000571d980ba1447bc5'), ('c2c6a626b426a197', '0000000000000000571d980ba1447bc5'), ('fb7184f45e1a320d', '0000000000000000571d980ba1447bc5'), ('6f1408d712cde676', '0000000000000000571d980ba1447bc5'), ('6d2f9f624a0f15df', '0000000000000000571d980ba1447bc5'), ('fbbb310ee626e23d', '0000000000000000571d980ba1447bc5'), ('d64d23d160214eb8', '0000000000000000571d980ba1447bc5'), ('779ff8a62f5e6b70', '0000000000000000571d980ba1447bc5'), ('9345e7b61811bba2', '0000000000000000571d980ba1447bc5'), ('d62f8d69990b9a24', '0000000000000000571d980ba1447bc5')]. This indicates the OTLP exporter is not propagating _dd.p.tid (high 64 bits) from the chunk root to the remaining chunk spans.
assert not [('3bf514d331801235', '0000000000000000571d980ba1447bc5'), ('6463746ca54ac669', '0000000000000000571d980ba1447bc5'), (...'c4c4d147cd46aad0', '0000000000000000571d980ba1447bc5'), ('a9aa9a1b607b90eb', '0000000000000000571d980ba1447bc5'), ...]

self = <tests.otel.test_tracing_otlp.Test_Otel_Tracing_OTLP object at 0x7fc708788f20>

    def test_128bit_trace_id_consistent_across_spans(self):
        """Validates that every span in a trace carries the same full 128-bit OTLP traceId.
    
        DD tracers emit 128-bit trace IDs by default but the v04/v05 msgpack wire format only
        carries the lower 64 bits per span; the upper 64 bits live in the \`_dd.p.tid\` meta tag,
...

View all 10 failed jobs.

ℹ️ Info

No other issues found (see more)

❄️ No new flaky tests detected

🔄 Datadog auto-retried 2 jobs - 0 passed on retry View in Datadog

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 12d7ea8 | Docs | Datadog PR Page | Give us feedback!

@estringana estringana changed the title Estringana/symfony [php] Add symfony framework Jun 25, 2026
@estringana estringana force-pushed the estringana/symfony branch 2 times, most recently from 421f8d9 to acc6539 Compare June 25, 2026 13:31
@estringana estringana changed the base branch from main to estringana/add-laravel-weblog June 25, 2026 14:51
@estringana estringana force-pushed the estringana/add-laravel-weblog branch 2 times, most recently from 3c04eef to 8eb08bc Compare June 29, 2026 15:15
Base automatically changed from estringana/add-laravel-weblog to main June 30, 2026 08:57
@estringana estringana force-pushed the estringana/symfony branch 2 times, most recently from ac7cac8 to 4e373c0 Compare July 1, 2026 15:31
@estringana estringana force-pushed the estringana/symfony branch from faf23d9 to 27cdcbf Compare July 9, 2026 14:00
@estringana estringana marked this pull request as ready for review July 9, 2026 16:08
@estringana estringana requested a review from a team as a code owner July 9, 2026 16:08
@estringana estringana requested review from a team as code owners July 9, 2026 16:08

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 27cdcbf696

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread manifests/php.yml Outdated
tests/appsec/test_automated_payment_events.py: v1.17.0-dev
tests/appsec/test_automated_payment_events.py:
- weblog_declaration:
"*": missing_feature (Stripe endpoints not implemented)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep payment tests enabled for existing PHP weblogs

For non-symfony7x PHP weblogs this wildcard now marks the entire automated payment suite as missing_feature, replacing the previous file-level v1.17.0-dev activation. The existing PHP apps already expose the Stripe endpoints (utils/build/docker/php/common/rewrite-rules.conf maps them for plain, and utils/build/docker/php/weblogs/laravel11x/routes/web.php defines them for Laravel), so this silently stops exercising payment-event coverage for all existing PHP variants when their tracer version is new enough. Keep the default enabled and override only weblogs that truly lack the endpoints.

Useful? React with 👍 / 👎.

return new Response('Invalid status', 400, ['Content-Type' => 'text/plain']);
}

#[Route('/otel_drop_in_baggage_api_otel', name: 'otel_drop_in_baggage_api_otel', methods: ['GET'])]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Add the missing /otel_drop_in Symfony route

When WEBLOG_VARIANT=symfony7x runs the integrations scenario, manifests/php.yml leaves tests/integrations/test_otel_drop_in.py::Test_Otel_Drop_In enabled for PHP 8.2-style weblogs, and that test calls /otel_drop_in to instantiate CachedInstrumentation and emit otel.* telemetry. This controller only adds the baggage-specific OTel routes, so /otel_drop_in returns Symfony's 404 and never emits the telemetry the test waits for; add the route or mark symfony7x missing_feature for that test.

Useful? React with 👍 / 👎.

Comment thread utils/build/docker/php/symfony7x.Dockerfile
Comment thread tests/appsec/test_automated_login_events.py

@nccatoni nccatoni left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (for @DataDog/system-tests-core) but you should get a review from someone from PHP

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants