shipsaas / dev-flag
Dev Flag implementation for Laravel Applications
Requires
- php: ^8.1|^8.2
- laravel/framework: ^9|^10
Requires (Dev)
- fakerphp/faker: ^v1.20.0
- mockery/mockery: ^1.5.1
- orchestra/testbench: ^7|^8
- phpunit/php-code-coverage: ^9.2.17
- phpunit/phpunit: ^9.5.25
- symfony/console: ^6.0.9
- symfony/error-handler: ^6.0
- symfony/finder: ^6.0
- symfony/http-foundation: ^6.0
- symfony/http-kernel: ^6.0
- symfony/mailer: ^6.0
- symfony/mime: ^6.0
- symfony/process: ^6.0
- symfony/routing: ^6.0
- symfony/uid: ^6.0
- symfony/var-dumper: ^6.0
README
DevFlag (aka Feature Flag) enabling your Application Development to follow the CI/CD best practices.
Support
- PHP 8.0+
- Laravel 9.x & 10.x
Install
composer require shipsaas/dev-flag
Then hit this to get the devflag.php
to your codebase:
php artisan vendor:publish --tag=devflag
Deep dive
Problems
IRL projects, it is inevitable for PRs that contains a lot of changes (thousands of lines, 50+ files).
For those PRs, even you have 10 people to review, they still won't cover everything 100%. Simply because it is too much.
Everybody loves small PRs and that is the undeniable fact. But how can we achieve it?
Welcome to DevFlag!
Solutions
DevFlag will help you to achieve that. Not only the tool, but also require a bit of your critical thinking.
Before starting development, you need to ensure:
- The scope, the changes that you will do (aka Technical Breakdown)
- This is the most important phase, you need to finalize the:
- Schema changes: avoid updating too much
- Code
- This is the most important phase, you need to finalize the:
- Create a DevFlag
- Start the development
Further reading for the PROs:
Usage
Add a new Flag
Open the app/devflag.php
, prepare your application's environments. Add your flag into all envs:
return [ 'local' => [ 'useNewFeature' => true, ], 'testing' => [ 'useNewFeature' => true, ], 'staging' => [ 'useNewFeature' => false, ], 'production' => [ 'useNewFeature' => false, ], ];
Check
Func-way:
function transfer(): ?Transaction { $useNewFeature = useDevFlag('useNewFeature'); if (!$useNewFeature) { return null; } // doing awesome things return $transaction; }
OOP/DI-way:
use ShipSaaS\DevFlag\Contracts\DevFlagInterface; public function __construct(private DevFlagInterface $devFlag) {} public function transfer(): mixed { if (!$this->devFlag->can('useNewFeature')) { return null; } // handle new things }
IRL Use cases
Check out WIKI: https://github.com/shipsaas/dev-flag/wiki
Contribution rules
- Follow PSR-1 & PSR-12 coding conventions
- TDD is a must
Feel free to open a PR 😉
Maintainer
- @sethsandaru
License
MIT License