Evgeniy Maslovskiy (@Spleshka)
Long term projects mantra
Local dev automation
Code quality
Automated Testing
Continuous Integration
Continuous Deployment
Development tips & tricks
Originally backend (PHP) based dev team
Shifted to Decoupled / Frontend 3 years ago
Work with enterprise clients
Deal with long term projects
Simplicity is the Holy Graal
Every routine not related to the project dev must be automated
Set up quality metrics in the beginning of the project
Any monkey should be able to deploy
The most obvious & most flexible local dev choice
Problems: devs need to learn Docker
Problems: real life is different from Hello World samples
Problems: too long commands / arguments
Old School Linux tool
Ships out of the box in Linux & Mac
One file to rule them all
One command project installation [make install]
One command code checks & fixes [make code:check]
Open source projects
Remove entrance complexity
https://github.com/systemseed/drupal_reactjs_boilerplate
Set up at the beginning of the project
Aim for simple make code:check and make code:fix
Make code check in Git pre-commit hook
Make code check first step in CI
Unit? NO
Functional? YES, when it has code & db connection to your app
Acceptance (End to end)? In most cases - NO
Unit? NO
Functional? IT DEPENDS
Acceptance (End to end)? YES
Runs the same commands as developers locally
Guarantees working commands at all times
Makes CI process transparent for the developers
Eventually has very positive efficiency boost
Runs the same set of tests as locally
Functional & API tests are invoked within CI container
Acceptance tests must be checked against real hosting env
First, [make install]
Then, [make code:check]
After that, [make tests:run api] and [make tests:run functional]
Fail fast (3-5 mins)
If all good, deploy to the clone of Production environment
Finally, [make tests:run acceptance]
Every feature is branched from stage branch
When feature is accepted, Pull Request gets merged into stage
Stage acts as hands-off dev environment
At the end of stage CI job, it opens PR to master & merge it
Master CI job makes backup & deploys code to Production
vs
instead of