Open Source: PHP
423 subscribers
4 photos
51 links
Помощь Open Source продуктам на PHP
Download Telegram
Forwarded from Mikhail Savin
Rector-правило для соблюдения AAA паттерна в тестах

По результатам моего опроса почти половина разработчиков пользуются этим паттерном при написании тестов, но я лично периодически забываю "отбивать" секции комментами

Теперь можно делегировать это Rector'у - добавил правило EnforceAaaPatternRector.
Оно просто вставляет комментарии (и удаляет старые, если они неверно расположены), например:


public function testFoo(): void
{
// Arrange
$date = new DateTimeImmutable('2025-01-01');

// Act
$formatted = $date->format('Y-m-d');

// Assert
self::assertEquals('2025-01-01', $formatted);
}


Если же ваши тесты изначально не структурированы под это, то будут мисплейсы. Например, если вы делаете запрос, ассерты на него, потом новый запрос и новые ассерты (так часто тестят валидацию/авторизацию).
Надеюсь, правило поможет сделать такие нарушения более явными на кодревью
🤔3👍2👎1
Forwarded from gh
Релизик в хату, господа программисты 🎧

https://github.com/wayofdev/laravel-cycle-orm-adapter/releases/tag/v5.0.0

возможно вам будет интересно посмотреть коммит под капотом релиза:
https://github.com/wayofdev/laravel-cycle-orm-adapter/pull/759

Из хайлайтов:
🔧 пофикшены все ci/cd:
• починил psalm
• починил SQL Server тестирование с правильными ODBC драйверами

🗄️ для cycle'истов будет интересен этот файл:
https://github.com/wayofdev/laravel-cycle-orm-adapter/blob/master/.github/workflows/testing-mssql.yml
(тут я сделал полную настройку SQL Server в GitHub Actions с ODBC драйверами, правильными health checks, и совместимостью с ubuntu-latest)

📦 апгрейд зависимостей:
• orchestra/testbench до ^10.0 для Laravel 12 поддержки
• поддержка Laravel 12.x наряду с 10.x и 11.x

🐛 пофикшен баг #752:
• контейнер Laravel теперь возвращает одинаковый инстанс для ORM::class и ORMInterface::class
• больше никаких "duplicate key value violation" ошибок при апдейтах entities

📚 будет интересно для тех кто в PDD и CDD:
• https://github.com/wayofdev/laravel-cycle-orm-adapter/blob/master/.cursor/development-guidelines.md - гайдлайны для AI-assisted разработки с реальными примерами
• https://github.com/wayofdev/laravel-cycle-orm-adapter/blob/master/.cursor/testing-guidelines.md - гайдлайны для агентного тестирования

(эти файлы дают готовые паттерны для эффективной разработки с AI ассистентами, TDD подходы для багфиксов, Docker workflows, multi-database тестирование, и best practices из реального опыта проекта)

cc: @roxblnfk @butschster

cc: https://github.com/wayofdev/laravel-cycle-orm-adapter
может ли автор выпустить релиз с laravel 12 фиксом?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1
Forwarded from PHP Fart Time (Алексей roxblnfk)
Начался Hacktoberfest 2025

Если выполнить задачи в числе первых 10_000 участников, то можно выиграть футболку. Но в РФ её всё-равно не доставят.

Однако, пофиг на футболку. Давайте просто делать Open Source вместе, хотя бы в этот месяц.

Пара советов:

Советую любой вклад в репозиторий начинать с обсуждения:
- Написать в Issue, что собираетесь взять задачу на себя и уточнить, есть ли вещи, на которые стоит обратить внимание.
- Найти ответственного и пнуть в чате.
- Обсудить объём работ, чтобы не делать всё или не попасть в ситуацию, когда часть работы уже сделана где-то ещё.

По Pull Request советую:
- Не делать то, что выходит за рамки Issue, не изменять левые файлы.
- Не делать Force Push, особенно после ревью.
- Не делать большие PR. Это в продуктовых проектах большие изменения проходят с меньшими замечаниями. В опенсорсе большой PR == больше работы для ревьювера.

Вот пара направлений сходу:

1. @terabytesoftw из Yiisoft докладывает: сейчас Yii2 покрыт тестами на 75%. Давайте добьём до 100%.
PR is welcome

2. Подгон от @butschster: ишуи с тегом Good First Issue в репозитории CTX и for-contributors в Buggregator.
3. Ну а я буду просто очень счастлив, если кто-то доделает этот PR (можно прыгнуть на ветку автора, запушить её в свой форк, доделать и затем сделать новый PR)

В PHP сообществе есть ещё пара мест:

- Общий канал по пыховому опенсорсу, в который можно прийти и как мейнтейнер (хранитель кодовой базы), и как контрибьютор (участник, вкладчик).
- Тема опенсорса в нашем чатике, где можно полулзить или обсудить что-то посложнее, чем Good first issue.

———

Кстати, открытое ПО тесно связано со свободными лицензиями.
И тут возникли мысли, а не пора ли нам с Павлом везде внедрять эту лицензию?

PS: Спасибо Владу Шашкову, который следовал этой лицензии и угощал меня пивом на ПыхКонф'2025 🍻
🔥4👍2
📣 Infection – библиотека для мутационных тестов

Infection довольно круто инструменты для проведения мутационных тестов: если тесты проходят, то библиотека меняет исходных код и запускает ваши тесты заново.

Работает здорово, становится всё быстрее, но нет поддержки в IDE.
Я сделал плагин для запуска Infection и раскраски текста в редакторе в красный с обозначением что за тест упал.
Однако, более логичным было бы сделать инструменты как для запуска PHPUnit/Codeception.

Они не делают отдельных интеграций, а используют формат TeamCity для логирования в stdout. Этот лог кушает IDEA, вырезает (для удобства чтения) и строит по нему дерево тестов и их ошибки.

Вот для Infection такого логгера сейчас нет.
Автор сделает, но ближе к концу недели скорее всего.
Если у вас есть силы и желание законтрибьютить в Infection, то переходим по ссылке и хватаем тикет.
https://github.com/infection/infection/issues/2446

TeamCity: https://www.jetbrains.com/help/teamcity/2025.07/service-messages.html#Nested+Test+Reporting
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4
Forwarded from Пых (Валентин Удальцов)
🤎 Драйвер для NATS от Thesis!

Каждый, кто пишет на Golang, наверняка слышал про NATS. Это платформа для обмена сообщениями, состоящая из двух основных частей: Core NATS (publish-subscribe с at-most-once гарантией и request-reply) и JetStream (персистентные стримы а-ля Kafka).

Мы написали новый неблокирующий драйвер для NATS под PHP, который поддерживает все основные возможности платформы:

• publish-subscribe,
• request-reply,
• jetstream,
• key-value хранилище,
• объектное хранилище,
• атомарные счётчики на основе CRDT,
• пакетная публикация,
• планировка сообщений.


composer require thesis/nats



$nats = new Nats\Client(Nats\Config::default());

$nats->subscribe('foo.*', static function (Nats\Delivery $delivery): void {
dump("Received message: {$delivery->message->payload}");
});

$nats->publish('foo.bar', new Nats\Message('Hello World!'));


Текущий релиз — 0.2.0, но некоторые уже используют драйвер в продакшне! К мажору шлифанём по мелочи и добавим поддержку NATS Service. А ещё после статьи на Reddit нам поставил звезду Ocramius. 😅

GitHub | Thesis Community | nats.io
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤨2❤1
Forwarded from Danil Shutsky
Сегодня состоялся релиз open-source админки MoonShine v4!
Вкратце по нововведениям рассказывается (и показывается) в этом промо-ролике:
https://youtu.be/3BXkf6WYEJ8

А вечером в 19:00 (мск) будет прямой эфир, где автор (Данил Щуцкий) всё подробно расскажет! Из основного:
- новый дизайн и вёрстка
- генератор палитр для MoonShine - создавать цветовые схемы теперь просто
- TailwindCSS обновлён до версии 4
- новая архитектура
- FortyFive - AI-powered инструмент для быстрой разработки админок на базе MoonShine
- и многое другое!

11 ноября в 19:00 (мск) на CutCode!
https://www.youtube.com/live/ynKqr9zxDzk?si=1aulrPoZ_hpH-clI
🔥17
True Async PHP

Edmond Dantes призывает всех к обсуждению особенностей реализации нашумевшего True Async RFC.

Если вы делаете фреймворки или библиотеки, которые работают (или хотелось бы) с асинхронностью; пишите на других языках с поддержкой асинхронности и параллелизма или просто хотите что-то добавить дельного, то заходите в обсуждение.

Чем быстрее закроются все вопросы, опасения и корнер кейсы, тем быстрее PHP начнет нагинать Go!

Цитата Edmond’а:
Итак господа все желающие, приглашаю вас к обсуждению. На текущем этапе считаем, что никакого RFC не было. В теме ключевой вопрос. Он видимо и будет обсуждаться ближайшее время.



👩‍💻 https://github.com/true-async/php-true-async-rfc/discussions/8
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍6❤1👾1
Простая задача, чтобы вкатиться в ряды контрибьюторов Testo

https://github.com/php-testo/testo/issues/341

- отписать в ишуе по ссылке, что берёте задачу
- делаете задачу
- ...
- Profit
🔥4👀2❤1👌1
Forwarded from Vaso Kamrashvili
Всем привет! Нужен фидбек по проекту.

Это сервер приложений на PHP (ZTS), заточенный под работу в Docker и Kubernetes и двигающийся в этом направлении.

Буду очень признателен, если вы попробуете его и поделитесь фидбеком. Особенно интересны мнения о самом проекте, архитектуре, документации и сайте.

Приветствуются любые отзывы - позитивные и не очень. Фидбек от ваших AI-агентов тоже приветствуются. 😁 Писать можно в личку, email, комментарии или создавать ишью на GitHub.

Весь код написан с помощью LLM, а архитектура и технические решения - мои. Большое спасибо.

https://github.com/oxphp/oxphp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Forwarded from Danil Shutsky
Всем привет!

Работа над MoonShine 5/V уже на финишной прямой. Если всё пойдёт по плану, в начале ноября зарелизим!

Знаете, я тут поймал себя на мысли, что вообще не понимаю, откуда у меня брались силы на все предыдущие версии MoonShine. Видимо, где-то напрямую из вселенной черпал 😁

Со стороны кажется: ну вышла новая версия, круто. А за этим стоят сотни часов работы, бесконечные правки, решения, сомнения и постоянное желание сделать ещё лучше.

И всё это нужно не просто однажды написать, а годами поддерживать и развивать.

Не буду скрывать, сейчас у меня уже нет того количества энергии, что было раньше. Иногда хочется просто выдохнуть и ничего не делать. Но бросать всё это я точно не собираюсь. Всё-таки MoonShine для меня давно стал чем-то большим, чем просто опенсорс-проект.

В общем, стараюсь как могу. Иногда чуть медленнее, чем хотелось бы, но продолжаю двигаться вперёд.

Скоро увидимся на пятёрке! ❤️
👍22