{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":307427036,"defaultBranch":"master","name":"PHPMailer","ownerLogin":"jrfnl","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2020-10-26T15:59:32.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/663378?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1726673103.0","currentOid":""},"activityList":{"items":[{"before":"473ec864d669df2f7a5b3949e0ab72b17fef9c0b","after":"6b2e692d45d8b0a44d5a199e5a11e8e5cc61b037","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-18T15:35:10.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"GH Actions: test with different sets of extensions\n\nPHP 8.4 removes the IMAP extension (moved to PECL).\n\nWith this in mind, I've reviewed how the tests are being run versus the extension requirements and recommendations.\n\nAs things are, the tests are currently run in the \"ideal\" environment, i.e. with all required and optional extensions available.\n\nHowever, the codebase also contains fall-backs for when certain extensions are **_not_** available and for at least some of those fallbacks, there are dedicated tests available, but in an ideal environment those tests will not run and the fall-backs are not tested, which is the case with the current CI setup.\n\nTo improve this situation, I'm proposing to keep running the tests against all PHP versions with the \"ideal\" extension set, but to also have additional test runs with a far more limited set of PHP extensions.\n\nTo determine which extensions should be in each set, I've looked at the following:\n* `@requires` tags found in the test suite and the conditions for calls to `markTestSkipped()`.\n This brought to light that the `openssl` extension was currently not listed in the \"ideal\" extension set. This has now been fixed.\n* The required extensions of PHPUnit - `dom, json, libxml, mbstring, tokenizer, xml, xmlwriter`.\n* The required extensions of PHPMailer itself - `ctype, filter, hash`.\n* Not strictly required, but more for convenience/workflow speed: `curl` for Composer.\n* And `xdebug` will still be enabled/disabled based on the `coverage` setting.\n\nNote: while some tests would benefit from being run _without_ the `mbstring` extension, that's unfortunately not an option as `mbstring` is a requirement of PHPUnit :shrug:\n\nAlso note, the tests with the \"minimal\" extension setup needs to run `composer install` with an `--ignore-platform-req` flag to prevent running into the following issue:\n```\nRunning update with --no-dev does not mean require-dev is ignored, it just means the packages will not be installed. If dev requirements are blocking the update you have to resolve those problems.\n```\n\nAs this extension \"requirement\" is for a dependency which is not used in the test run, the extension requirement can be safely ignored.","shortMessageHtmlLink":"GH Actions: test with different sets of extensions"}},{"before":"0e7ec40e0812a987ce6f039872e7eb1cd618f7c9","after":"473ec864d669df2f7a5b3949e0ab72b17fef9c0b","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-18T15:33:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"GH Actions: test with different sets of extensions\n\nPHP 8.4 removes the IMAP extension (moved to PECL).\n\nWith this in mind, I've reviewed how the tests are being run versus the extension requirements and recommendations.\n\nAs things are, the tests are currently run in the \"ideal\" environment, i.e. with all required and optional extensions available.\n\nHowever, the codebase also contains fall-backs for when certain extensions are **_not_** available and for at least some of those fallbacks, there are dedicated tests available, but in an ideal environment those tests will not run and the fall-backs are not tested, which is the case with the current CI setup.\n\nTo improve this situation, I'm proposing to keep running the tests against all PHP versions with the \"ideal\" extension set, but to also have additional test runs with a far more limited set of PHP extensions.\n\nTo determine which extensions should be in each set, I've looked at the following:\n* `@requires` tags found in the test suite and the conditions for calls to `markTestSkipped()`.\n This brought to light that the `openssl` extension was currently not listed in the \"ideal\" extension set. This has now been fixed.\n* The required extensions of PHPUnit - `dom, json, libxml, mbstring, tokenizer, xml, xmlwriter`.\n* The required extensions of PHPMailer itself - `ctype, filter, hash`.\n* Not strictly required, but more for convenience/workflow speed: `curl` for Composer.\n* And `xdebug` will still be enabled/disabled based on the `coverage` setting.\n\nNote: while some tests would benefit from being run _without_ the `mbstring` extension, that's unfortunately not an option as `mbstring` is a requirement of PHPUnit :shrug:\n\nAlso note, the tests with the \"minimal\" extension setup needs to run `composer install` with an `--ignore-platform-req` flag to prevent running into the following issue:\n```\nRunning update with --no-dev does not mean require-dev is ignored, it just means the packages will not be installed. If dev requirements are blocking the update you have to resolve those problems.\n```\n\nAs this extension \"requirement\" is for a dependency which is not used in the test run, the extension requirement can be safely ignored.","shortMessageHtmlLink":"GH Actions: test with different sets of extensions"}},{"before":"98e110e66f8fd3047cc0488c2ead8a2b740fdf0e","after":null,"ref":"refs/heads/feature/tests-solve-problem-with-faked-functions","pushedAt":"2024-09-18T15:25:03.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"}},{"before":"3338f27d35824d705c54b76549f204795c83f448","after":"0e7ec40e0812a987ce6f039872e7eb1cd618f7c9","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-18T15:24:25.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"MAYBE ? | GH Actions: don't run code coverage on fork\n\nForks cannot upload the coverage reports anyway as they don't have access to the token","shortMessageHtmlLink":"MAYBE ? | GH Actions: don't run code coverage on fork"}},{"before":"6028776a639ac7cc05a48e36d0f64163c8c30204","after":null,"ref":"refs/heads/feature/testGivenIdnAddress-set-requirements","pushedAt":"2024-09-18T14:52:05.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"}},{"before":"f79019bfe774a501616a3a09e1417dfd24ebc968","after":"3338f27d35824d705c54b76549f204795c83f448","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-12T07:26:55.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"TEMP/TESTING","shortMessageHtmlLink":"TEMP/TESTING"}},{"before":null,"after":"6028776a639ac7cc05a48e36d0f64163c8c30204","ref":"refs/heads/feature/testGivenIdnAddress-set-requirements","pushedAt":"2024-09-12T07:12:28.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"PHPMailerTest::testGivenIdnAddress...(): set test requirements\n\nAs per the discussion in 3092, this commit removes the `fakefunctions.php` file and adds explicit requirements for the `PHPMailerTest::testGivenIdnAddress_addAddress_returns_true()` test method.\n\nCloses 3092","shortMessageHtmlLink":"PHPMailerTest::testGivenIdnAddress...(): set test requirements"}},{"before":"78146fb172c80a44cb56e2ce6217d0a446b158bb","after":null,"ref":"refs/heads/feature/tests-fix-dkim-test","pushedAt":"2024-09-12T06:54:01.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"}},{"before":null,"after":"98e110e66f8fd3047cc0488c2ead8a2b740fdf0e","ref":"refs/heads/feature/tests-solve-problem-with-faked-functions","pushedAt":"2024-09-11T19:14:39.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"Tests: isolate test which fakes functions\n\nThe test suite contains a `fakefunctions.php` file which is loaded by one particular test.\n\nThis `fakefunctions.php` file makes sure that two functions - `idn_to_ascii()` and `mb_convert_encoding()` - will always be available, even when the `Intl` and/or `MbString` extensions are not loaded.\n\nThis is problematic for two reasons:\n\n**Incorrect return type**\n\nIn both cases, the return value for the faked function does not comply with the expected/documented return type, which can/will lead to unexpected behaviour of the code under test as the code under test (correctly) does not take this unexpected return type into account.\n* The faked `idn_to_ascii()` function always returns `true`, while the expected/documented return type of this method is `string|false`.\n* The faked `mb_convert_encoding()` function always returns `true`, while the expected/documented return type of this method is `array|string|false`.\n\nRefs:\n* https://www.php.net/manual/en/function.idn-to-ascii.php\n* https://www.php.net/manual/en/function.mb-convert-encoding.php\n\n**Test is not run in isolation**\n\nWhen this `fakefunctions.php` file is loaded and either the `Intl` or the `Mbstring` extension is unavailable, the functions are defined and stay in memory.\n\nIn practice, this means that depending on the _order_ in which tests are being run, this can screw up the expected test results for _other_ tests being run _after_ the test which loaded the fake functions, as a `@requires function idn_to_ascii` annotation will no longer work as expected (and skip the test), but will now assert that the function is available and _run_ the test, which will lead to test failures elsewhere as the function doesn't work as expected (because it is faked and returning an incorrect return type).\n\nTo address this problem, there are a couple of questions which need to be asked, assessed and possibly addressed in a follow up issue:\n1. What is this method really testing and does the test have actual value ? If not, remove the test.\n2. If the test has value: does faking the functions have real value ? Or would it be better for the test to be skipped when the required functionality is not available ?\n If faking the functions was a hack and has no real value, the `fakefunctions.php` file should be removed and the test should get `@requires extension mbstring` and `@requires function idn_to_ascii` annotations instead.\n3. If the test has value and faking the functions has value too: what would be a better return value for the faked functions ?\n At the very least, the return type of the faked functions should be made to comply with the PHP documented return type of the functions.\n\nHaving said all that and not having the answers to these questions, this commit implements a stop-gap solution to at least prevent the faked functions from influencing tests other than the test they are intended for.\n\nThe stop-gap solution isolates the test to be a) run in its own process and b) run last, so as not to influence other tests.\n\nThis is done by moving the test to its own TestClass, which then allows for moving the test from the \"main\" test suite to a separate test suite.\n\nWhy this solves the issue (for now):\n* Test suites are run in the order they are defined (at least they should be as long as the PHPUnit `--order-by` flag is not used).\n* (In my experience) Test suites are each run in their own PHP process, which means that the fake functions should now only be defined for the test they were intended for.\n\nWhile PHPUnit also offers `@run[Tests]InSeperateProcess` annotations, in my experience, using a separate test suite is more stable for tests which need to run on a large range of PHPUnit versions, especially when we're talking functions being redefined.","shortMessageHtmlLink":"Tests: isolate test which fakes functions"}},{"before":null,"after":"78146fb172c80a44cb56e2ce6217d0a446b158bb","ref":"refs/heads/feature/tests-fix-dkim-test","pushedAt":"2024-09-11T19:14:28.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"DKIMTest::testDKIMSignOpenSSLNotAvailable(): fix the test\n\nAs things were, the `DKIMTest::testDKIMSignOpenSSLNotAvailable()` could not pass as the `DKIMTest` class sets the `USE_EXCEPTIONS` class constant to `true`, which means the method would fail on an exception.\n\nAs this test is specifically about testing the behaviour when exceptions are _disabled_, the test needs to be in its own test class, which sets `USE_EXCEPTIONS` to `false`.\n\nThat should allow the test to run properly and to pass.","shortMessageHtmlLink":"DKIMTest::testDKIMSignOpenSSLNotAvailable(): fix the test"}},{"before":"9d321f38427d2311eff6d89e4bbe978449af264c","after":"f79019bfe774a501616a3a09e1417dfd24ebc968","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T19:09:09.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"TEMP/TESTING","shortMessageHtmlLink":"TEMP/TESTING"}},{"before":"3a8e00e4dcbd797c3f17906c7640ba38223f9b20","after":null,"ref":"refs/heads/feature/composer-no-lock","pushedAt":"2024-09-11T18:41:29.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"}},{"before":"b7e3dc9698aa4e84aff161dcbabda680e206c1f5","after":"9d321f38427d2311eff6d89e4bbe978449af264c","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T17:09:37.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"DEBUG step 2","shortMessageHtmlLink":"DEBUG step 2"}},{"before":"2e359f42918be6328100f0905124b699754cee4f","after":"b7e3dc9698aa4e84aff161dcbabda680e206c1f5","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T17:07:34.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"DEBUG step 1","shortMessageHtmlLink":"DEBUG step 1"}},{"before":"9eecbf49e8c7da9debccad423858dd19de2ed75f","after":"2e359f42918be6328100f0905124b699754cee4f","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T16:36:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"TEMP/TESTING","shortMessageHtmlLink":"TEMP/TESTING"}},{"before":"c816b12f0b42b083e868692249665ff960673599","after":"3a8e00e4dcbd797c3f17906c7640ba38223f9b20","ref":"refs/heads/feature/composer-no-lock","pushedAt":"2024-09-11T16:21:36.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"Composer: prevent a lock file from being created\n\nComposer 1.10.0 introduced a `lock` config option, which, when set to `false` will prevent a `composer.lock` file from being created and will ignore it when one exists.\n\nThis is a useful option for packages like PHPMailer where the `lock` file has no meaning.\n\nIt also makes life more straight-forward for contributors as they don't have to remember that for this repo they should use `composer update` instead of `composer install`. Both will now work the same.\n\nRefs:\nhttps://getcomposer.org/doc/06-config.md#lock","shortMessageHtmlLink":"Composer: prevent a lock file from being created"}},{"before":null,"after":"c816b12f0b42b083e868692249665ff960673599","ref":"refs/heads/feature/composer-no-lock","pushedAt":"2024-09-11T16:20:46.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"Composer: prevent a lock file from being created\n\nComposer 1.10.0 introduced a `lock` config option, which, when set to `false` will prevent a `composer.lock` file from being created and will ignore it when one exists.\n\nThis is a useful option for packages like WordPress where the `lock` file has no meaning.\n\nIt also makes life more straight-forward for contributors as they don't have to remember that for this repo they should use `composer update` instead of `composer install`. Both will now work the same.\n\nRefs:\nhttps://getcomposer.org/doc/06-config.md#lock","shortMessageHtmlLink":"Composer: prevent a lock file from being created"}},{"before":"9259ff73bd2ac1e5630e89413e85f29427cc21dc","after":"9eecbf49e8c7da9debccad423858dd19de2ed75f","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T16:15:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"TEMP/TESTING","shortMessageHtmlLink":"TEMP/TESTING"}},{"before":"fe511c91c8b96d14dde2ecc93904c67520eff15f","after":"9259ff73bd2ac1e5630e89413e85f29427cc21dc","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T16:14:12.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"DEBUG","shortMessageHtmlLink":"DEBUG"}},{"before":"77bae2c40b6a5e57ee34aac1d5dc77a5d6c79244","after":"fe511c91c8b96d14dde2ecc93904c67520eff15f","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T16:05:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"TESTING (may need to be added to workflow)","shortMessageHtmlLink":"TESTING (may need to be added to workflow)"}},{"before":"b4f25b277e84c527dce6b246d563ec1154eaf2d0","after":"77bae2c40b6a5e57ee34aac1d5dc77a5d6c79244","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T08:04:52.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"Updated list for PHPUnit / SQUASH - dom, json, libxml, mbstring, tokenizer, xml, xmlwriter","shortMessageHtmlLink":"Updated list for PHPUnit / SQUASH - dom, json, libxml, mbstring, toke…"}},{"before":"d77c637570d627839db8faec50f604633ec90f9c","after":"b4f25b277e84c527dce6b246d563ec1154eaf2d0","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T08:00:35.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"Step 2","shortMessageHtmlLink":"Step 2"}},{"before":"49bbd6097e03dfcb4d7feba5b6d1fdfba7aa79b1","after":"d77c637570d627839db8faec50f604633ec90f9c","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T07:53:09.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"This should be better...","shortMessageHtmlLink":"This should be better..."}},{"before":"cfc20df550718bf47671b5a8defe7876d580c36e","after":"49bbd6097e03dfcb4d7feba5b6d1fdfba7aa79b1","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T07:49:33.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"Try this","shortMessageHtmlLink":"Try this"}},{"before":null,"after":"cfc20df550718bf47671b5a8defe7876d580c36e","ref":"refs/heads/feature/ghactions-extension-variation-in-tests","pushedAt":"2024-09-11T07:36:25.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"TEMP/TESTING","shortMessageHtmlLink":"TEMP/TESTING"}},{"before":null,"after":"e0e6e6ec7f7b33f924efd34cf8453a7bc5648477","ref":"refs/heads/feature/ghactions-dont-run-codecoverage-on-forks","pushedAt":"2024-09-11T07:00:38.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"MAYBE ? | GH Actions: don't run code coverage on fork\n\nForks cannot upload the coverage reports anyway as they don't have access to the token","shortMessageHtmlLink":"MAYBE ? | GH Actions: don't run code coverage on fork"}},{"before":"49cd7ea3d2563f028d7811f06864a53b1f15ff55","after":"6acfa78df613d9ef34992d418eca477b2075c396","ref":"refs/heads/master","pushedAt":"2024-09-11T06:53:54.000Z","pushType":"push","commitsCount":177,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"Merge pull request #3083 from murongshaozong/master\n\nchore: fix some comments","shortMessageHtmlLink":"Merge pull request PHPMailer#3083 from murongshaozong/master"}},{"before":"e503535644196303b6282349788797f9c8e59325","after":null,"ref":"refs/heads/feature/ghactions-minor-tweaks","pushedAt":"2023-11-23T08:17:07.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"}},{"before":"23f8374f89740d5dd1401c007e289429fde0552d","after":null,"ref":"refs/heads/feature/ghactions-php-8.3-update","pushedAt":"2023-11-23T08:16:58.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"}},{"before":null,"after":"e503535644196303b6282349788797f9c8e59325","ref":"refs/heads/feature/ghactions-minor-tweaks","pushedAt":"2023-11-23T03:16:07.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jrfnl","name":"Juliette","path":"/jrfnl","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/663378?s=80&v=4"},"commit":{"message":"GH Actions: update a few links in inline comments\n\n... as the old URLs are no longer valid.","shortMessageHtmlLink":"GH Actions: update a few links in inline comments"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOFQxNTozNToxMC4wMDAwMDBazwAAAAS54B2r","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOFQxNTozNToxMC4wMDAwMDBazwAAAAS54B2r","endCursor":"Y3Vyc29yOnYyOpK7MjAyMy0xMS0yM1QwMzoxNjowNy4wMDAwMDBazwAAAAO1vPpo"}},"title":"Activity · jrfnl/PHPMailer"}