From ea74f8ed1530fd639cc6109b5b77eef51be830b0 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Tue, 9 Jun 2026 12:40:47 +0200 Subject: [PATCH 01/13] feat: add tag/attribute to add visibility of events send by the agent --- agent/src/Envelope.php | 4 +- agent/src/EnvelopeForwarder.php | 2 +- agent/src/EnvelopeItem.php | 70 ++++++++++++++----- agent/tests/AgentForwardingTest.php | 1 + agent/tests/EnvelopeTest.php | 105 +++++++++++++++++++++++----- 5 files changed, 144 insertions(+), 38 deletions(-) diff --git a/agent/src/Envelope.php b/agent/src/Envelope.php index 600f969..6990003 100644 --- a/agent/src/Envelope.php +++ b/agent/src/Envelope.php @@ -77,10 +77,10 @@ static function (EnvelopeItem $item) use ($callback) { ); } - public function appendIngestPath(string $version): void + public function prepareForForwarding(string $client): void { foreach ($this->items as $item) { - $item->appendIngestPath($version); + $item->prepareForForwarding($client); } } diff --git a/agent/src/EnvelopeForwarder.php b/agent/src/EnvelopeForwarder.php index 3f4a3fc..6f9a86f 100644 --- a/agent/src/EnvelopeForwarder.php +++ b/agent/src/EnvelopeForwarder.php @@ -92,7 +92,7 @@ public function forward(Envelope $envelope): PromiseInterface } $client = self::IDENTIFIER . '/' . self::VERSION; - $envelope->appendIngestPath($client); + $envelope->prepareForForwarding($client); $authHeader = [ 'sentry_version=' . self::PROTOCOL_VERSION, diff --git a/agent/src/EnvelopeItem.php b/agent/src/EnvelopeItem.php index 46f7b5f..28649dc 100644 --- a/agent/src/EnvelopeItem.php +++ b/agent/src/EnvelopeItem.php @@ -16,10 +16,8 @@ */ class EnvelopeItem { - private const EVENT_ITEM_TYPES_WITH_INGEST_PATH = [ - 'event' => true, - 'transaction' => true, - ]; + public const TRANSPORT_KEY = 'sentry.transport'; + public const TRANSPORT_VALUE = 'php-agent'; /** * @var EnvelopeItemHeader The envelope item header @@ -54,37 +52,75 @@ public function getData(): string return $this->data; } - public function appendIngestPath(string $version): void + public function prepareForForwarding(string $client): void { - if (!isset(self::EVENT_ITEM_TYPES_WITH_INGEST_PATH[$this->header['type']])) { + try { + switch ($this->header['type'] ?? '') { + case 'event': + case 'transaction': + $payload = self::addIngestPathAndTransportTag(JSON::decode($this->data), $client); + break; + case 'log': + case 'trace_metric': + $payload = self::addTransportAttributeToItems(JSON::decode($this->data)); + break; + default: + return; + } + + $data = JSON::encode($payload); + } catch (\Throwable $e) { return; } - $payload = json_decode($this->data, true); + $this->data = $data; - if (!\is_array($payload)) { - return; + if (isset($this->header['length'])) { + $this->header['length'] = \strlen($this->data); } + } + /** + * @param array $payload + * + * @return array + */ + private static function addIngestPathAndTransportTag(array $payload, string $client): array + { if (!isset($payload['ingest_path']) || !\is_array($payload['ingest_path'])) { $payload['ingest_path'] = []; } $payload['ingest_path'][] = [ - 'version' => $version, + 'version' => $client, ]; - try { - $data = JSON::encode($payload); - } catch (\Throwable $e) { - return; + if (!isset($payload['tags']) || !\is_array($payload['tags'])) { + $payload['tags'] = []; } - $this->data = $data; + $payload['tags'][self::TRANSPORT_KEY] = self::TRANSPORT_VALUE; - if (isset($this->header['length'])) { - $this->header['length'] = \strlen($this->data); + return $payload; + } + + /** + * @param array $payload + * + * @return array + */ + private static function addTransportAttributeToItems(array $payload): array + { + foreach ($payload['items'] ?? [] as $index => $item) { + $item['attributes'][self::TRANSPORT_KEY] = [ + 'type' => 'string', + 'value' => self::TRANSPORT_VALUE, + ]; + + $payload['items'][$index] = $item; } + + return $payload; } public function __toString() diff --git a/agent/tests/AgentForwardingTest.php b/agent/tests/AgentForwardingTest.php index f6c8083..759cce2 100644 --- a/agent/tests/AgentForwardingTest.php +++ b/agent/tests/AgentForwardingTest.php @@ -37,6 +37,7 @@ public function testAgentForwardsEnvelopeToUpstream(): void '"ingest_path":[{"version":"' . str_replace('/', '\/', EnvelopeForwarder::IDENTIFIER . '/' . EnvelopeForwarder::VERSION) . '"}]', $serverOutput['body'] ); + $this->assertStringContainsString('"sentry.transport":"php-agent"', $serverOutput['body']); // Verify the correct headers were sent $this->assertArrayHasKey('X-Sentry-Auth', $serverOutput['headers']); diff --git a/agent/tests/EnvelopeTest.php b/agent/tests/EnvelopeTest.php index 6ad6e14..0179db5 100644 --- a/agent/tests/EnvelopeTest.php +++ b/agent/tests/EnvelopeTest.php @@ -53,33 +53,34 @@ public function testCanParseEnvelopeWith2Items(): void $this->assertEquals($payload, (string) $envelope); } - public function testAppendIngestPathToEventItem(): void + public function testPrepareForForwardingAddsIngestPathAndTransportTagToEventItem(): void { $envelope = new Envelope( ['dsn' => 'http://public@example.com/1'], [new EnvelopeItem(['type' => 'event'], '{"message":"test"}')] ); - $envelope->appendIngestPath($this->getIngestPathVersion()); + $envelope->prepareForForwarding($this->getIngestPathVersion()); $payload = json_decode($envelope->getItems()[0]->getData(), true); $this->assertSame([['version' => $this->getIngestPathVersion()]], $payload['ingest_path']); + $this->assertSame(EnvelopeItem::TRANSPORT_VALUE, $payload['tags'][EnvelopeItem::TRANSPORT_KEY]); } - public function testAppendIngestPathPreservesExistingEntries(): void + public function testPrepareForForwardingPreservesExistingIngestPathAndTags(): void { $envelope = new Envelope( ['dsn' => 'http://public@example.com/1'], [ new EnvelopeItem( ['type' => 'transaction'], - '{"transaction":"/test","ingest_path":[{"version":"relay/1.0.0","public_key":"abc"}]}' + '{"transaction":"/test","ingest_path":[{"version":"relay/1.0.0","public_key":"abc"}],"tags":{"release_channel":"beta"}}' ), ] ); - $envelope->appendIngestPath($this->getIngestPathVersion()); + $envelope->prepareForForwarding($this->getIngestPathVersion()); $payload = json_decode($envelope->getItems()[0]->getData(), true); @@ -90,58 +91,126 @@ public function testAppendIngestPathPreservesExistingEntries(): void ], $payload['ingest_path'] ); + $this->assertSame( + [ + 'release_channel' => 'beta', + EnvelopeItem::TRANSPORT_KEY => EnvelopeItem::TRANSPORT_VALUE, + ], + $payload['tags'] + ); + } + + public function testPrepareForForwardingReplacesInvalidTags(): void + { + $envelope = new Envelope( + ['dsn' => 'http://public@example.com/1'], + [new EnvelopeItem(['type' => 'event'], '{"message":"test","ingest_path":"invalid","tags":"invalid"}')] + ); + + $envelope->prepareForForwarding($this->getIngestPathVersion()); + + $payload = json_decode($envelope->getItems()[0]->getData(), true); + + $this->assertSame([['version' => $this->getIngestPathVersion()]], $payload['ingest_path']); + $this->assertSame([EnvelopeItem::TRANSPORT_KEY => EnvelopeItem::TRANSPORT_VALUE], $payload['tags']); } - public function testAppendIngestPathUpdatesLengthHeader(): void + public function testPrepareForForwardingUpdatesLengthHeader(): void { $envelope = new Envelope( ['dsn' => 'http://public@example.com/1'], [new EnvelopeItem(['type' => 'event', 'length' => 18], '{"message":"test"}')] ); - $envelope->appendIngestPath($this->getIngestPathVersion()); + $envelope->prepareForForwarding($this->getIngestPathVersion()); $item = $envelope->getItems()[0]; $this->assertSame(\strlen($item->getData()), $item->getHeader()['length']); } - public function testAppendIngestPathReplacesInvalidExistingIngestPath(): void + public function testPrepareForForwardingAddsTransportAttributeToLogItems(): void { $envelope = new Envelope( ['dsn' => 'http://public@example.com/1'], - [new EnvelopeItem(['type' => 'event'], '{"message":"test","ingest_path":"invalid"}')] + [ + new EnvelopeItem( + ['type' => 'log'], + '{"items":[{"body":"first","attributes":{"sentry.environment":{"type":"string","value":"production"}}},{"body":"second","attributes":[]}]}' + ), + ] ); - $envelope->appendIngestPath($this->getIngestPathVersion()); + $envelope->prepareForForwarding($this->getIngestPathVersion()); $payload = json_decode($envelope->getItems()[0]->getData(), true); - $this->assertSame([['version' => $this->getIngestPathVersion()]], $payload['ingest_path']); + $this->assertSame('production', $payload['items'][0]['attributes']['sentry.environment']['value']); + $this->assertSame( + ['type' => 'string', 'value' => EnvelopeItem::TRANSPORT_VALUE], + $payload['items'][0]['attributes'][EnvelopeItem::TRANSPORT_KEY] + ); + $this->assertSame( + ['type' => 'string', 'value' => EnvelopeItem::TRANSPORT_VALUE], + $payload['items'][1]['attributes'][EnvelopeItem::TRANSPORT_KEY] + ); + } + + public function testPrepareForForwardingAddsTransportAttributeToTraceMetricItems(): void + { + $envelope = new Envelope( + ['dsn' => 'http://public@example.com/1'], + [ + new EnvelopeItem( + ['type' => 'trace_metric'], + '{"items":[{"name":"foo","attributes":{"unit":{"type":"string","value":"millisecond"}}}]}' + ), + ] + ); + + $envelope->prepareForForwarding($this->getIngestPathVersion()); + + $payload = json_decode($envelope->getItems()[0]->getData(), true); + + $this->assertSame('millisecond', $payload['items'][0]['attributes']['unit']['value']); + $this->assertSame( + ['type' => 'string', 'value' => EnvelopeItem::TRANSPORT_VALUE], + $payload['items'][0]['attributes'][EnvelopeItem::TRANSPORT_KEY] + ); } - public function testAppendIngestPathDoesNotMutateUnsupportedItems(): void + public function testPrepareForForwardingDoesNotMutateUnsupportedItems(): void { - foreach (['log', 'check_in', 'profile', 'attachment'] as $type) { + $payloads = [ + 'check_in' => '{"check_in_id":"abc","monitor_slug":"job","status":"ok"}', + 'profile' => '{"platform":"php","version":"1","client_sdk":{"name":"sentry.php","version":"4.0.0"}}', + 'client_report' => '{"timestamp":1746542641,"discarded_events":[]}', + 'session' => '{"sid":"abc","did":"x","started":"2025-01-01T00:00:00Z","status":"ok"}', + 'replay_event' => '{"platform":"php","sdk":{"name":"sentry.php","version":"4.0.0"},"tags":{"foo":"bar"}}', + 'replay_recording' => '{"items":[{"attributes":{"foo":{"type":"string","value":"bar"}}}]}', + 'feedback' => '{"platform":"php","sdk":{"name":"sentry.php","version":"4.0.0"},"tags":{"foo":"bar"}}', + ]; + + foreach ($payloads as $type => $data) { $envelope = new Envelope( ['dsn' => 'http://public@example.com/1'], - [new EnvelopeItem(['type' => $type], '{"message":"test"}')] + [new EnvelopeItem(['type' => $type], $data)] ); - $envelope->appendIngestPath($this->getIngestPathVersion()); + $envelope->prepareForForwarding($this->getIngestPathVersion()); - $this->assertSame('{"message":"test"}', $envelope->getItems()[0]->getData()); + $this->assertSame($data, $envelope->getItems()[0]->getData(), "Type {$type} should not be mutated"); } } - public function testAppendIngestPathDoesNotMutateMalformedJson(): void + public function testPrepareForForwardingDoesNotMutateMalformedJson(): void { $envelope = new Envelope( ['dsn' => 'http://public@example.com/1'], [new EnvelopeItem(['type' => 'event'], '{"message":')] ); - $envelope->appendIngestPath($this->getIngestPathVersion()); + $envelope->prepareForForwarding($this->getIngestPathVersion()); $this->assertSame('{"message":', $envelope->getItems()[0]->getData()); } From 18ff91acf470160505ed63454637e79142b7809f Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 10:41:51 +0000 Subject: [PATCH 02/13] Add PHAR artifact --- bin/sentry-agent | Bin 2059247 -> 2060446 bytes bin/sentry-agent.sig | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/sentry-agent b/bin/sentry-agent index 8d8ceb210e1cc82bd6b7145180019989a6bb93c6..4dd21670b8c1d6de3634225f25450fe36daeeeba 100755 GIT binary patch delta 10521 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 G{{IgIkOGMS delta 9960 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 diff --git a/bin/sentry-agent.sig b/bin/sentry-agent.sig index 6c22581..36b27e6 100644 --- a/bin/sentry-agent.sig +++ b/bin/sentry-agent.sig @@ -1 +1 @@ -E379EBD144ACB3491E2C112C2C4D4A782F3C5C87AE4209E06DE33C6A65315F9D13B83473D397E8773B122C84D80F0DB0E90E0E47C5B7BD3FDCB0A045D703B922 +9C1C4089F29DB120B8DF1E4FEF83449D84B1C16C988DFC4FA8A9EDB2AF6917A2B42507EE9A88BC7A81B4A672ACB4AC5C1729BB5E482B3E97E50146B04C618666 From 28a3032defff0dc983a8dfa73ba0b9dd0e45cf20 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Tue, 9 Jun 2026 12:44:48 +0200 Subject: [PATCH 03/13] CS --- agent/src/EnvelopeItem.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/agent/src/EnvelopeItem.php b/agent/src/EnvelopeItem.php index 28649dc..082a2ea 100644 --- a/agent/src/EnvelopeItem.php +++ b/agent/src/EnvelopeItem.php @@ -58,11 +58,15 @@ public function prepareForForwarding(string $client): void switch ($this->header['type'] ?? '') { case 'event': case 'transaction': - $payload = self::addIngestPathAndTransportTag(JSON::decode($this->data), $client); + /** @var array $payload */ + $payload = JSON::decode($this->data); + $payload = self::addIngestPathAndTransportTag($payload, $client); break; case 'log': case 'trace_metric': - $payload = self::addTransportAttributeToItems(JSON::decode($this->data)); + /** @var array $payload */ + $payload = JSON::decode($this->data); + $payload = self::addTransportAttributeToItems($payload); break; default: return; From 646ae9ecbba13e3357df3c4f5a8ac5e54a4a3e59 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 10:45:30 +0000 Subject: [PATCH 04/13] Add PHAR artifact --- bin/sentry-agent | Bin 2060446 -> 2060622 bytes bin/sentry-agent.sig | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/sentry-agent b/bin/sentry-agent index 4dd21670b8c1d6de3634225f25450fe36daeeeba..b01bffd34cc2c70621f958c729ffa3749d4c2dfe 100755 GIT binary patch delta 409 zcmbRDu=d=e+6}rq0_S-c7#gna$Ndd)u|Yk`3j%k%&?CQguqE+0&}j)F>Z zPUdvS96qt>6P}4FOkePa$$@Nhg{Ob{!z9H4Gkp5Sd|tij3mmwWr}=ZrPp>l&Vr!rK zmkEfOftUq|S%DZN#ty_BK+FlmTtLhX#5_RE3&eat%n!r@Kr9HvLO?7G#3Dc}3dCYS zEDppHKr9KwQa~&X#4%=}WVby~- zKTY2+<`MgIu642Mx&4zm-URNPAnI}X`}f<2cB&_)<;19j3m#%&VPIfzck*=t00oSz Ar~m)} delta 336 zcmX^2sCM4N+6}rq0`fcz3=P+IWPoVn#X1(vwmj{&JdE3Id6*u&pRQZY$1%O{50jdt zSFpdIl~qb=a(+sxhDu3BX0fhaN@7W(=JY*(m}=k(d8Tju%OoX%OZD`^$;=Yd1&sKF zr!V**rZ|0qp{(+B9YZ0GcHe(YK+FupEI`Z(#B4y!4#XfiP9Ww2Vs0Sj0b*Vt<^y7W zAQk{(K_C_aVqqW_0b)@g76W2&AeI1PNg$R2Vrd|j0b<$hzW?NQ7J1B(ap?Rscca3N z`*Qy8n_cF%Y&@7VqxX;hij{9Sts1RgGJg6|LE_CPrLycbtc|-Snr7 SZX0|O+tOGV7#Q50e4PMV@r* Date: Tue, 9 Jun 2026 12:47:41 +0200 Subject: [PATCH 05/13] CS --- agent/src/EnvelopeItem.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/src/EnvelopeItem.php b/agent/src/EnvelopeItem.php index 082a2ea..0e5654f 100644 --- a/agent/src/EnvelopeItem.php +++ b/agent/src/EnvelopeItem.php @@ -55,16 +55,16 @@ public function getData(): string public function prepareForForwarding(string $client): void { try { - switch ($this->header['type'] ?? '') { + switch ($this->header['type']) { case 'event': case 'transaction': - /** @var array $payload */ + /** @var array $payload */ $payload = JSON::decode($this->data); $payload = self::addIngestPathAndTransportTag($payload, $client); break; case 'log': case 'trace_metric': - /** @var array $payload */ + /** @var array $payload */ $payload = JSON::decode($this->data); $payload = self::addTransportAttributeToItems($payload); break; From fe0bb6a68a1a64d0c6c65d6140f300918b37ea56 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 10:48:22 +0000 Subject: [PATCH 06/13] Add PHAR artifact --- bin/sentry-agent | Bin 2060622 -> 2060652 bytes bin/sentry-agent.sig | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/sentry-agent b/bin/sentry-agent index b01bffd34cc2c70621f958c729ffa3749d4c2dfe..814c20a22bec797154d48443f616a091065f7e1c 100755 GIT binary patch delta 276 zcmX^2sP@gH+6}rq0&jU37#gna$N_s-f*!_ zzw?{PfBLt40io$R|Cu{n+zcD7~VG!_O126rc4CjgGAg>(P_ delta 309 zcmaF!sP^2W+6}rq0_S-c7#gna$NGrHSQLoGfLI)e zC4g8Gh^2s78i-|pSa$n_zj9NGJ^oDccH`fnBY8=mz1%}fB5um>p4N$dV#2BiZ+@D- xU(6%+=UnSz)pPqNb-W4OIYHFp^7rqz5A9S>Ov{N;2^T!X!otA7;O^w>1OT$dj7I Date: Tue, 9 Jun 2026 16:08:16 +0200 Subject: [PATCH 07/13] change to sentry.php.agent --- agent/src/EnvelopeItem.php | 9 ++++----- agent/src/sentry-agent.php | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/agent/src/EnvelopeItem.php b/agent/src/EnvelopeItem.php index 0e5654f..90824da 100644 --- a/agent/src/EnvelopeItem.php +++ b/agent/src/EnvelopeItem.php @@ -16,8 +16,7 @@ */ class EnvelopeItem { - public const TRANSPORT_KEY = 'sentry.transport'; - public const TRANSPORT_VALUE = 'php-agent'; + public const TRANSPORT_KEY = 'sentry.php.agent'; /** * @var EnvelopeItemHeader The envelope item header @@ -103,7 +102,7 @@ private static function addIngestPathAndTransportTag(array $payload, string $cli $payload['tags'] = []; } - $payload['tags'][self::TRANSPORT_KEY] = self::TRANSPORT_VALUE; + $payload['tags'][self::TRANSPORT_KEY] = true; return $payload; } @@ -117,8 +116,8 @@ private static function addTransportAttributeToItems(array $payload): array { foreach ($payload['items'] ?? [] as $index => $item) { $item['attributes'][self::TRANSPORT_KEY] = [ - 'type' => 'string', - 'value' => self::TRANSPORT_VALUE, + 'type' => 'bool', + 'value' => true, ]; $payload['items'][$index] = $item; diff --git a/agent/src/sentry-agent.php b/agent/src/sentry-agent.php index fa502bd..bbe8340 100755 --- a/agent/src/sentry-agent.php +++ b/agent/src/sentry-agent.php @@ -68,7 +68,7 @@ function printHelp(): void HELP; } -$options = getopt('h', ['listen::', 'upstream-timeout::', 'upstream-concurrency::', 'queue-limit::', 'drain-timeout::', 'control-server::', 'http-proxy::', 'http-proxy-authentication::', 'help']); +$options = getopt('hv', ['listen::', 'upstream-timeout::', 'upstream-concurrency::', 'queue-limit::', 'drain-timeout::', 'control-server::', 'http-proxy::', 'http-proxy-authentication::', 'help', 'verbose']); if ($options === false) { Log::error('Failed to parse command line options.'); From 52ff6e27013a6065db0d7a840b586b344bf6e36a Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 14:09:12 +0000 Subject: [PATCH 08/13] Add PHAR artifact --- bin/sentry-agent | Bin 2060652 -> 2060580 bytes bin/sentry-agent.sig | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/sentry-agent b/bin/sentry-agent index 814c20a22bec797154d48443f616a091065f7e1c..fb9077a6ce91bb65fc333bc80e96d2b31126faee 100755 GIT binary patch delta 332 zcmaF!sCLPt+6^bT1#&bP7#gna$Ntaq9MOQ9MeClGK+7& z%gCI@I9*JbnSZ*@1Wu0W_a(%+r>lGN2u)ufz$q|Yu7Z!NeF-x&5VHU=D-g2*F*^`* z05K;JgXFn^mcQ^n5 delta 413 zcmZ4TsP@gH+6^bT1rjtE7#gna$N#dUtiz&Qwc}~Im s?=QVVR{5JSdtLT=7INdUpQw{{-@=dm>Ws(Ewk({+!oa}b?&RwP0I6?`p#T5? diff --git a/bin/sentry-agent.sig b/bin/sentry-agent.sig index c30a794..9d01053 100644 --- a/bin/sentry-agent.sig +++ b/bin/sentry-agent.sig @@ -1 +1 @@ -1839262F3A4C704A117A0E90EA5E2E86B39731761A09732EAE1A565C71DCD39C70EFF7E94A54AA4F34034AD34AE654D8E34E15423B8EA1F18F2701C6CD84A196 +D81E86847499694EBB6AA446E8FA2623967C39FB8E2D2502E6D250F035A65DAA3865933B7225DD3D518831F05B97C9B8AF79E364EA640DB52B7490A4594CF641 From 27d2fc61b08f308b8583c542cc7f099857e189cf Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Tue, 9 Jun 2026 16:20:13 +0200 Subject: [PATCH 09/13] tests --- agent/tests/AgentForwardingTest.php | 2 +- agent/tests/EnvelopeTest.php | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/agent/tests/AgentForwardingTest.php b/agent/tests/AgentForwardingTest.php index 759cce2..bd775bb 100644 --- a/agent/tests/AgentForwardingTest.php +++ b/agent/tests/AgentForwardingTest.php @@ -37,7 +37,7 @@ public function testAgentForwardsEnvelopeToUpstream(): void '"ingest_path":[{"version":"' . str_replace('/', '\/', EnvelopeForwarder::IDENTIFIER . '/' . EnvelopeForwarder::VERSION) . '"}]', $serverOutput['body'] ); - $this->assertStringContainsString('"sentry.transport":"php-agent"', $serverOutput['body']); + $this->assertStringContainsString('"sentry.php.agent":true', $serverOutput['body']); // Verify the correct headers were sent $this->assertArrayHasKey('X-Sentry-Auth', $serverOutput['headers']); diff --git a/agent/tests/EnvelopeTest.php b/agent/tests/EnvelopeTest.php index 0179db5..7c8309b 100644 --- a/agent/tests/EnvelopeTest.php +++ b/agent/tests/EnvelopeTest.php @@ -65,7 +65,7 @@ public function testPrepareForForwardingAddsIngestPathAndTransportTagToEventItem $payload = json_decode($envelope->getItems()[0]->getData(), true); $this->assertSame([['version' => $this->getIngestPathVersion()]], $payload['ingest_path']); - $this->assertSame(EnvelopeItem::TRANSPORT_VALUE, $payload['tags'][EnvelopeItem::TRANSPORT_KEY]); + $this->assertSame(true, $payload['tags'][EnvelopeItem::TRANSPORT_KEY]); } public function testPrepareForForwardingPreservesExistingIngestPathAndTags(): void @@ -94,7 +94,7 @@ public function testPrepareForForwardingPreservesExistingIngestPathAndTags(): vo $this->assertSame( [ 'release_channel' => 'beta', - EnvelopeItem::TRANSPORT_KEY => EnvelopeItem::TRANSPORT_VALUE, + EnvelopeItem::TRANSPORT_KEY => true, ], $payload['tags'] ); @@ -112,7 +112,7 @@ public function testPrepareForForwardingReplacesInvalidTags(): void $payload = json_decode($envelope->getItems()[0]->getData(), true); $this->assertSame([['version' => $this->getIngestPathVersion()]], $payload['ingest_path']); - $this->assertSame([EnvelopeItem::TRANSPORT_KEY => EnvelopeItem::TRANSPORT_VALUE], $payload['tags']); + $this->assertSame([EnvelopeItem::TRANSPORT_KEY => true], $payload['tags']); } public function testPrepareForForwardingUpdatesLengthHeader(): void @@ -147,11 +147,11 @@ public function testPrepareForForwardingAddsTransportAttributeToLogItems(): void $this->assertSame('production', $payload['items'][0]['attributes']['sentry.environment']['value']); $this->assertSame( - ['type' => 'string', 'value' => EnvelopeItem::TRANSPORT_VALUE], + ['type' => 'bool', 'value' => true], $payload['items'][0]['attributes'][EnvelopeItem::TRANSPORT_KEY] ); $this->assertSame( - ['type' => 'string', 'value' => EnvelopeItem::TRANSPORT_VALUE], + ['type' => 'bool', 'value' => true], $payload['items'][1]['attributes'][EnvelopeItem::TRANSPORT_KEY] ); } @@ -174,7 +174,7 @@ public function testPrepareForForwardingAddsTransportAttributeToTraceMetricItems $this->assertSame('millisecond', $payload['items'][0]['attributes']['unit']['value']); $this->assertSame( - ['type' => 'string', 'value' => EnvelopeItem::TRANSPORT_VALUE], + ['type' => 'bool', 'value' => true], $payload['items'][0]['attributes'][EnvelopeItem::TRANSPORT_KEY] ); } From e23b707b1544c0d1119cd316b899766c12c82d46 Mon Sep 17 00:00:00 2001 From: Martin Linzmayer Date: Tue, 9 Jun 2026 16:31:42 +0200 Subject: [PATCH 10/13] tests --- agent/src/EnvelopeItem.php | 2 +- agent/tests/AgentForwardingTest.php | 2 +- agent/tests/EnvelopeTest.php | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/agent/src/EnvelopeItem.php b/agent/src/EnvelopeItem.php index 90824da..6c373d2 100644 --- a/agent/src/EnvelopeItem.php +++ b/agent/src/EnvelopeItem.php @@ -102,7 +102,7 @@ private static function addIngestPathAndTransportTag(array $payload, string $cli $payload['tags'] = []; } - $payload['tags'][self::TRANSPORT_KEY] = true; + $payload['tags'][self::TRANSPORT_KEY] = "true"; return $payload; } diff --git a/agent/tests/AgentForwardingTest.php b/agent/tests/AgentForwardingTest.php index bd775bb..f5f8741 100644 --- a/agent/tests/AgentForwardingTest.php +++ b/agent/tests/AgentForwardingTest.php @@ -37,7 +37,7 @@ public function testAgentForwardsEnvelopeToUpstream(): void '"ingest_path":[{"version":"' . str_replace('/', '\/', EnvelopeForwarder::IDENTIFIER . '/' . EnvelopeForwarder::VERSION) . '"}]', $serverOutput['body'] ); - $this->assertStringContainsString('"sentry.php.agent":true', $serverOutput['body']); + $this->assertStringContainsString('"sentry.php.agent":"true"', $serverOutput['body']); // Verify the correct headers were sent $this->assertArrayHasKey('X-Sentry-Auth', $serverOutput['headers']); diff --git a/agent/tests/EnvelopeTest.php b/agent/tests/EnvelopeTest.php index 7c8309b..73021f4 100644 --- a/agent/tests/EnvelopeTest.php +++ b/agent/tests/EnvelopeTest.php @@ -65,7 +65,7 @@ public function testPrepareForForwardingAddsIngestPathAndTransportTagToEventItem $payload = json_decode($envelope->getItems()[0]->getData(), true); $this->assertSame([['version' => $this->getIngestPathVersion()]], $payload['ingest_path']); - $this->assertSame(true, $payload['tags'][EnvelopeItem::TRANSPORT_KEY]); + $this->assertSame("true", $payload['tags'][EnvelopeItem::TRANSPORT_KEY]); } public function testPrepareForForwardingPreservesExistingIngestPathAndTags(): void @@ -94,7 +94,7 @@ public function testPrepareForForwardingPreservesExistingIngestPathAndTags(): vo $this->assertSame( [ 'release_channel' => 'beta', - EnvelopeItem::TRANSPORT_KEY => true, + EnvelopeItem::TRANSPORT_KEY => "true", ], $payload['tags'] ); @@ -112,7 +112,7 @@ public function testPrepareForForwardingReplacesInvalidTags(): void $payload = json_decode($envelope->getItems()[0]->getData(), true); $this->assertSame([['version' => $this->getIngestPathVersion()]], $payload['ingest_path']); - $this->assertSame([EnvelopeItem::TRANSPORT_KEY => true], $payload['tags']); + $this->assertSame([EnvelopeItem::TRANSPORT_KEY => "true"], $payload['tags']); } public function testPrepareForForwardingUpdatesLengthHeader(): void From 8f2cc4fb8ebc6d64efdfe4cb3fa70ef5907e5693 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 14:32:24 +0000 Subject: [PATCH 11/13] Add PHAR artifact --- bin/sentry-agent | Bin 2060580 -> 2060582 bytes bin/sentry-agent.sig | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/sentry-agent b/bin/sentry-agent index fb9077a6ce91bb65fc333bc80e96d2b31126faee..9dfea9067496d2308e9201f8bf0de26e89ae56ba 100755 GIT binary patch delta 267 zcmZ4TsCL<-+6}rq0<(D-7#gna$NV0Xo>0okHhpgw7x(mp|4gavE=_E%`#GF9P1;pGy z%mc){K+Ffk{6H)K#DYL91jNEXECR%$Kr9Bt;y^3`#F9WP1;o-oECa-{KrFZ2g-L!! zp2w}2*u)htQ?J_l9-7=UBV51XZtZ7lT`9kx8~0l`xQPYr)rg#x-c*|85MF<+yrAum dNR0OL1^?&F3)#Ld%#x?vj)j4N!QIK%2>|dWR^9*r delta 235 zcmZ4XsCLPt+6}rq0yB9S7#gna$NlBi6o>kr{|t zfS47C*?^cGh&h0m6NtHhm>Y=rH z0@}~J7H{{w{N@iyI?ao@__TrbC^0XSu-+j8OOwTR_d@x-W wyUHSUvUQQ_UE9D8!w=EZPwrS>`8efO3h!3!k_k&9eZD!eFfcH Date: Tue, 9 Jun 2026 16:36:43 +0200 Subject: [PATCH 12/13] CS --- agent/src/EnvelopeItem.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/src/EnvelopeItem.php b/agent/src/EnvelopeItem.php index 6c373d2..20485e0 100644 --- a/agent/src/EnvelopeItem.php +++ b/agent/src/EnvelopeItem.php @@ -102,7 +102,7 @@ private static function addIngestPathAndTransportTag(array $payload, string $cli $payload['tags'] = []; } - $payload['tags'][self::TRANSPORT_KEY] = "true"; + $payload['tags'][self::TRANSPORT_KEY] = 'true'; return $payload; } From 2576ffb55840d995fc97a4970b55b75bb841cdd1 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 14:37:36 +0000 Subject: [PATCH 13/13] Add PHAR artifact --- bin/sentry-agent | Bin 2060582 -> 2060582 bytes bin/sentry-agent.sig | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/sentry-agent b/bin/sentry-agent index 9dfea9067496d2308e9201f8bf0de26e89ae56ba..f988e2bf1fd9b93dbbaae30eaa2c4f25250d4eb5 100755 GIT binary patch delta 229 zcmZ4XsCL<-+6|UGEJr=nuQuEAwA=D9Znx!O3i-;aUQ$$=I{o27Ug7qYjLbmH0>rF9 z%m&2lK+FNeoIuP4#N0s41H`;Q%m>8$Kr8^nfA`xyZh9*bYWI;76t|ecPC#b0L9c)9smFU delta 230 zcmZ4XsCL<-+6|UGEX!Iay=%7RX}9HJ+-}Rm6!Mi#sidehRcZRh6h`6pRgBC)%mT!$ zK+Fcj>_E%`#GF9P1;pGy%mc){K+Ffk{6H)K#DYL91jHaSM1WWnh{b?d9Ec@=SQ3b( zfLI!cWq?=~h~>7gVw5+@_qY`ko4Dd->Q#H+Lz8=EgzGolt^I7RE9Lid<9_P~H?g3- t8j-Won@W=$!t1Y<7qtBmiP3((;QyR?A=}r5S@M+Iu`n<&xI6he0RTkfRXG3v diff --git a/bin/sentry-agent.sig b/bin/sentry-agent.sig index 95db4c0..81bf6e9 100644 --- a/bin/sentry-agent.sig +++ b/bin/sentry-agent.sig @@ -1 +1 @@ -DA5C5D61A8E965D53F4DC2938C98572F80DD7DF33B2D1A4EF9B1BF3B80461652BD28599A6782756240577FD6777086FC145C2BE7A0FF9C9E54B7AE56390C773E +18A7DD0A2B3B71C36EA79A0793D6EB491DB47F735D3851B22F989FA607DFB927F8D97093DEB66F29AD866C83C2C8FE2F11C1D37309247F9D8747955E67130517