Repo always available • Specific release date given by devops – Merge & wait for target • Only merge if 100% tests ok or specific approval • QA Regression & manual tests • Fix possible integration problems ASAP
3 releases per week – DevOps goal: All weekdays • Latest stable changeset from Integration taken previous working day morning • Release doc, pre-release meetings • Staging servers to test with live data
First code push: 8 AM – DevOps Goal: single push + release closed • Release window: 1-2 h – DevOps goal: < 30 minutes • Error stabilization or release rollback • Representatives from all involved teams
old system) • Easy API to plug our plugins and hooks • Cross-platform • Tuenti Addons: – Commit hooks to check syntax, push ticket #... • Problems: – Push/pulls through VPN are slow – Handling multiple repos still slow – Only one level of rollback!
‘works’ – PHP process spawning PHP tests • Tuenti Addons: – Vastly improved mocking framework – Shell scripts that isolate test batteries – Better integration with Selenium • Problems: – Our current FEFW does not cope perfectly with PHPUnit/Selenium
and IE • Tuenti Addons: –Custom build with some fixes • Problems: –Javascript handling/detection not perfect –AJAX far from optimal –IE runner is an iframe • Planned migration to Webdriver
• Dev. env. storage – 1 DB per user (to run tests) – 1 shared DB (common faked data) • Clusters of master/slave DBs • Problems: – Slow when running tests – Shared dev DB has old-time inconsistencies
Dev. Behaviour == live behaviour • Tuenti Addons (https://github.com/tuenti): – UDP + multi-ports • Problems: – 32GB RAM / machine practical limit – Remember to warm-up data or MC will kill the DB!
+ Bundling + Versioning • Statics deployment to CDNs • Fast: 2-3 minutes full build – Multithreading + parallelization • Allows partial, component based builds • Problems: – Under heavy CPU load, build time goes up :(
– Line breaks each # characters (easier IE debugging) – CDNs handling • Problems: – Change in JS requires rebuilding even in dev. – Requires small migrations/changes in existing JS