SlideShare a Scribd company logo
KISS OMG FTW 
Vi er hurtige til at hive nye værktøjer ind men nogle gange gør 
de vores liv mere kompliceret end godt er. 
OMG (One Massive Git repository) dropper Drush Make
WTF? 
● Some history about how we managed code 
in the past 
● Some reasoning about pros and cons 
● What we ended up doing 
● Some talk and examples (Fini on 
Deployotron) 
● Some more talk and more examples (Mads 
on Bandaid)
Partners in crime 
Arne Jørgensen 
- Twitter: @arnejoergensen 
- Drupal.org: arnested 
Thomas Fini Hansen 
- Twitter: @xendk 
- Drupal.org: Xen 
Mads Høgstedt Danquah 
- Twitter: @danquah 
- Drupal.org: danquah
Back in the old days... 
● We threw everything in one Git repos 
● Upgrading was troublesome 
● Because patches and hacks got lost 
● So we started using drush make... 
● And we were happy
Until we realized that... 
● Although it was an improvement... 
● It Drush Make comes with its own bag of problem 
● We started thinking (OMG!)
So what do we actually want 
● Use a branching workflow (i.e. git-flow) 
● Fast builds and deploys 
● Not too many points of failure 
● Avoid Not-Invented-Here
Four approaches to repos structures 
● Git submodules 
● Composer 
● Drush Make 
● Everything in one monolithic git repos
Git submodule 
● Proven technology 
● No way to build a Drupal Core with modules inside 
● No way to handle patches
Git submodule Composer 
● Proven technology 
● No way to build a Drupal Core with modules inside 
● No way to handle patches
Git submodule Composer 
● Proven technology 
● No way to build a Drupal Core with modules inside 
● No way to handle patches 
● Extend via Composer plugins 
● Used by Symfony2
Drush Make 
● Good tracking of: 
○ modules 
○ versions 
○ patches 
● Branching is troublesome 
● Multiple failure points 
● What did I change? Re-make? 
● Less than perfect error handling 
● Large make files and recursive make files 
● Problems don’t fit on one slide
One monolithic git repos 
Pros 
● Branching is easy 
● Build times are fast 
● No need for tools other than git 
Cons 
● Tracking of modules, versions, and patches 
● Upgrades? 
● Doesn’t feel right...
But let’s remember… 
Employees at Reload are:
But let’s remember… 
Employees at Reload are: 
Skilled,
But let’s remember… 
Employees at Reload are: 
Skilled, responsible
But let’s remember… 
Employees at Reload are: 
Skilled, responsible grownups
But let’s remember… 
Employees at Reload are: 
Skilled, responsible grownups 
If you fit the description we are hiring...
80% 
● Unpatched, stable Drupal.org modules have 
all info in the .info file 
● Upgrades is just a “drush up” away 
● Let’s just document the remaining 20%
Kilroy patched this! 
Arne added the patch from http://drupal.org/files/secure_permissions-duplicate_ 
role_exception-1744274-4.patch' so that we ignore exceptions related to 
attempts to create roles that are already present on the site. 
There is an upstream issue with more details at https://drupal.org/node/1744274
Kilroy patched this! 
Or a bit more structured: 
patch: 'http://drupal.org/files/secure_permissions-duplicate_role_exception 
-1744274-4.patch' 
home: 'https://drupal.org/node/1744274' 
reason: 'Ignores exception related to attempts to create roles that are 
already present on the site'
Kilroy patched this! 
Or a bit more structured: 
patch: 'http://drupal.org/files/secure_permissions-duplicate_role_exception 
-1744274-4.patch' 
home: 'https://drupal.org/node/1744274' 
reason: 'Ignores exception related to attempts to create roles that are 
already present on the site' 
OMG - That’s YAML! 
sites/all/modules/secure_permissions.yml
Basically that’s OMG 
● One Massivi Git repository 
● Document the stuff that differs in YAML 
● Act like a grown up 
● No need for any tools
Deployotron
https://asciinema.org/a/12775
Some features 
● Verbose 
● Maintainance mode 
● Dumping database 
● Fast
Cowboy coding
More features 
● Restart Apache2/Varnish 
● VERSION.txt 
● New Relic/Flowdock 
● Install in sites/all/drush 
● OMG command
reload.aliases.drushrc.php 
reload.aliases.drushrc.php
Current limitations 
● One server deployments 
● No D8 support yet 
● No submodules
Links 
http://reload.github.io/deployotron/ 
https://github.com/reload/deployotron
Bandaid
Why we <3 patches 
● They let us contribute the change we had to 
make anyways back to the community. 
● They gives us access to others fixes right 
away without having to wait on releases. 
● But - we have to keep the process of using 
patches quick and easy or we just won’t 
bother
Patching in OMG 
Make did all the work for us, now we have to 
● Keep track of our patches 
● Be able to reapply after a module-upgrade 
● Remember why we applied the patch in the 
first place 
Drush-make have make-files, we have YAML
all YAML all the way 
● We place a .yml file next to the module 
● It contains 
○ The patch URL 
○ A “home” url (issue link) 
○ A description of why we need it 
● Yaml - because then we can script the 
modification of the file.
Sample yml-file 
- 
patch: 'http://drupal.org/files/secure_permissions-duplicate_role_exception 
-1744274-4.patch' 
home: 'https://drupal.org/node/1744274' 
reason: 'Ignores exception related to attempts to create roles that are 
already present on the site' 
- 
patch: 'http://drupal.org/files/secure_permissions-permissions-not-set-bug 
-1406892-d7-7.patch' 
home: 'https://drupal.org/node/1406892' 
reason: 'Fixes an issue where empty roles blocks other roles from getting 
permissions. Committed to dev so can be skipped when 1.6 is 
released.' 
… Great, but really - who wants to 
maintain yaml-files by hand?
Bandaid to the rescue 
● Bandaid - a drush command that 
○ Applies patches 
○ Keeps the .yml updated 
○ Detects unauthorized changes 
○ Makes it as easy as possible to 
upgrade and re-patch modules 
○ And it does it all by using enough git 
internally to qualify as actual magic!
Live Demotime 
● bandaid-patch 
● bandaid-apply 
● bandaid-diff 
● bandaid-tearoff 
….what can possible go wrong?
Wrapup - status 
● Current status 
○ Module patching is fully supported 
○ Core patching is a work-in-progress (patch+apply 
works) 
● We (reload) use bandaid. 
● A “large danish media-house” is currently 
converting from make to OMG and bandaid
Wrapup near-furture stuff 
● We’re considering a “scan all my modules 
and detect modifications” command 
● Full(er) core support 
● Support for custom content in the .yml files 
● We welcome issues and pull-requests 
against https://github.com/xendk/bandaid

More Related Content

What's hot

Bgoug 2019.11 building free, open-source, plsql products in cloud
Bgoug 2019.11   building free, open-source, plsql products in cloudBgoug 2019.11   building free, open-source, plsql products in cloud
Bgoug 2019.11 building free, open-source, plsql products in cloudJacek Gebal
 
NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6Kostas Saidis
 
Dependency management in golang
Dependency management in golangDependency management in golang
Dependency management in golangRamit Surana
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersChang W. Doh
 
POUG2019 - Test your PL/SQL - your database will love you
POUG2019 - Test your PL/SQL - your database will love youPOUG2019 - Test your PL/SQL - your database will love you
POUG2019 - Test your PL/SQL - your database will love youJacek Gebal
 
Super powered Drupal development with docker
Super powered Drupal development with dockerSuper powered Drupal development with docker
Super powered Drupal development with dockerMaciej Lukianski
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 
10 Cool Facts about Gradle
10 Cool Facts about Gradle10 Cool Facts about Gradle
10 Cool Facts about GradleEvgeny Goldin
 
Jenkins Shared Libraries
Jenkins Shared LibrariesJenkins Shared Libraries
Jenkins Shared LibrariesXPeppers
 
Docker in everyday development
Docker in everyday developmentDocker in everyday development
Docker in everyday developmentJustyna Ilczuk
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8DrupalDay
 

What's hot (17)

Bgoug 2019.11 building free, open-source, plsql products in cloud
Bgoug 2019.11   building free, open-source, plsql products in cloudBgoug 2019.11   building free, open-source, plsql products in cloud
Bgoug 2019.11 building free, open-source, plsql products in cloud
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6NetBeans Support for EcmaScript 6
NetBeans Support for EcmaScript 6
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
Dependency management in golang
Dependency management in golangDependency management in golang
Dependency management in golang
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for Beginners
 
POUG2019 - Test your PL/SQL - your database will love you
POUG2019 - Test your PL/SQL - your database will love youPOUG2019 - Test your PL/SQL - your database will love you
POUG2019 - Test your PL/SQL - your database will love you
 
5.node js
5.node js5.node js
5.node js
 
Super powered Drupal development with docker
Super powered Drupal development with dockerSuper powered Drupal development with docker
Super powered Drupal development with docker
 
Docker & ci
Docker & ciDocker & ci
Docker & ci
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
10 Cool Facts about Gradle
10 Cool Facts about Gradle10 Cool Facts about Gradle
10 Cool Facts about Gradle
 
Jenkins Shared Libraries
Jenkins Shared LibrariesJenkins Shared Libraries
Jenkins Shared Libraries
 
Docker in everyday development
Docker in everyday developmentDocker in everyday development
Docker in everyday development
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
 
groovy & grails - lecture 10
groovy & grails - lecture 10groovy & grails - lecture 10
groovy & grails - lecture 10
 

Similar to Drupalhagen 2014 kiss omg ftw

Drupal and contribution (2010 - 2011 / 2)
Drupal and contribution (2010 - 2011 / 2)Drupal and contribution (2010 - 2011 / 2)
Drupal and contribution (2010 - 2011 / 2)Peter Arato
 
Drupal + composer = new love !?
Drupal + composer = new love !?Drupal + composer = new love !?
Drupal + composer = new love !?nuppla
 
Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016
Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016
Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016Paul McKibben
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master BuilderPhilip Norton
 
Friction Logging and Internal Advocacy, DevRel/Asia 2020
Friction Logging and Internal Advocacy, DevRel/Asia 2020Friction Logging and Internal Advocacy, DevRel/Asia 2020
Friction Logging and Internal Advocacy, DevRel/Asia 2020Emma Haruka Iwao
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composernuppla
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsGR8Conf
 
Modernize Your Drupal Development
Modernize Your Drupal DevelopmentModernize Your Drupal Development
Modernize Your Drupal DevelopmentChris Tankersley
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composernuppla
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Mandi Walls
 
[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GIT[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GITWong Hoi Sing Edison
 
Pentester++
Pentester++Pentester++
Pentester++CTruncer
 
Pilot Tech Talk #10 — Practical automation by Kamil Cholewiński
Pilot Tech Talk #10 — Practical automation by Kamil CholewińskiPilot Tech Talk #10 — Practical automation by Kamil Cholewiński
Pilot Tech Talk #10 — Practical automation by Kamil CholewińskiPilot
 
Drupal 8 improvements for developer productivity php symfony and more
Drupal 8 improvements for developer productivity  php symfony and moreDrupal 8 improvements for developer productivity  php symfony and more
Drupal 8 improvements for developer productivity php symfony and moreAcquia
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Jérôme Petazzoni
 
Django best practices
Django best practicesDjango best practices
Django best practicesAdam Haney
 

Similar to Drupalhagen 2014 kiss omg ftw (20)

Drupal and contribution (2010 - 2011 / 2)
Drupal and contribution (2010 - 2011 / 2)Drupal and contribution (2010 - 2011 / 2)
Drupal and contribution (2010 - 2011 / 2)
 
Drupal + composer = new love !?
Drupal + composer = new love !?Drupal + composer = new love !?
Drupal + composer = new love !?
 
Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016
Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016
Help! I inherited a Drupal Site! - DrupalCamp Atlanta 2016
 
Becoming A Drupal Master Builder
Becoming A Drupal Master BuilderBecoming A Drupal Master Builder
Becoming A Drupal Master Builder
 
Friction Logging and Internal Advocacy, DevRel/Asia 2020
Friction Logging and Internal Advocacy, DevRel/Asia 2020Friction Logging and Internal Advocacy, DevRel/Asia 2020
Friction Logging and Internal Advocacy, DevRel/Asia 2020
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails Projects
 
Modernize Your Drupal Development
Modernize Your Drupal DevelopmentModernize Your Drupal Development
Modernize Your Drupal Development
 
Mono Repo
Mono RepoMono Repo
Mono Repo
 
Forensic Theming - DrupalCon London
Forensic Theming - DrupalCon LondonForensic Theming - DrupalCon London
Forensic Theming - DrupalCon London
 
Deployer
DeployerDeployer
Deployer
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014
 
[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GIT[HKDUG] #20180512 - Fix Hacked Drupal with GIT
[HKDUG] #20180512 - Fix Hacked Drupal with GIT
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
 
Pentester++
Pentester++Pentester++
Pentester++
 
Pilot Tech Talk #10 — Practical automation by Kamil Cholewiński
Pilot Tech Talk #10 — Practical automation by Kamil CholewińskiPilot Tech Talk #10 — Practical automation by Kamil Cholewiński
Pilot Tech Talk #10 — Practical automation by Kamil Cholewiński
 
Drupal 8 improvements for developer productivity php symfony and more
Drupal 8 improvements for developer productivity  php symfony and moreDrupal 8 improvements for developer productivity  php symfony and more
Drupal 8 improvements for developer productivity php symfony and more
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?
 
Django best practices
Django best practicesDjango best practices
Django best practices
 

More from Arne Jørgensen

HTTPS - this time it is not optional!
HTTPS - this time it is not optional!HTTPS - this time it is not optional!
HTTPS - this time it is not optional!Arne Jørgensen
 
Drupal Experiences and Considerations
Drupal Experiences and ConsiderationsDrupal Experiences and Considerations
Drupal Experiences and ConsiderationsArne Jørgensen
 
LaTeX for viderekommende
LaTeX for viderekommendeLaTeX for viderekommende
LaTeX for viderekommendeArne Jørgensen
 
Kom godt i gang med LaTeX
Kom godt i gang med LaTeXKom godt i gang med LaTeX
Kom godt i gang med LaTeXArne Jørgensen
 
Kom godt i gang med LaTeX
Kom godt i gang med LaTeXKom godt i gang med LaTeX
Kom godt i gang med LaTeXArne Jørgensen
 

More from Arne Jørgensen (9)

HTTPS - this time it is not optional!
HTTPS - this time it is not optional!HTTPS - this time it is not optional!
HTTPS - this time it is not optional!
 
Drupal making news
Drupal making newsDrupal making news
Drupal making news
 
Drupal Experiences and Considerations
Drupal Experiences and ConsiderationsDrupal Experiences and Considerations
Drupal Experiences and Considerations
 
Præsentationer i LaTeX
Præsentationer i LaTeXPræsentationer i LaTeX
Præsentationer i LaTeX
 
LaTeX for viderekommende
LaTeX for viderekommendeLaTeX for viderekommende
LaTeX for viderekommende
 
Kom godt i gang med LaTeX
Kom godt i gang med LaTeXKom godt i gang med LaTeX
Kom godt i gang med LaTeX
 
Kom godt i gang med LaTeX
Kom godt i gang med LaTeXKom godt i gang med LaTeX
Kom godt i gang med LaTeX
 
Introduktion til LaTeX
Introduktion til LaTeXIntroduktion til LaTeX
Introduktion til LaTeX
 
LaTeX for begyndere
LaTeX for begyndereLaTeX for begyndere
LaTeX for begyndere
 

Recently uploaded

How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...Product School
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityScyllaDB
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeCzechDreamin
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...CzechDreamin
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutesconfluent
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1DianaGray10
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backElena Simperl
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Product School
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...Product School
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoTAnalytics
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekCzechDreamin
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupCatarinaPereira64715
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka DoktorováCzechDreamin
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀DianaGray10
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Thierry Lestable
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxAbida Shariff
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...Product School
 

Recently uploaded (20)

How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 

Drupalhagen 2014 kiss omg ftw

  • 1. KISS OMG FTW Vi er hurtige til at hive nye værktøjer ind men nogle gange gør de vores liv mere kompliceret end godt er. OMG (One Massive Git repository) dropper Drush Make
  • 2. WTF? ● Some history about how we managed code in the past ● Some reasoning about pros and cons ● What we ended up doing ● Some talk and examples (Fini on Deployotron) ● Some more talk and more examples (Mads on Bandaid)
  • 3. Partners in crime Arne Jørgensen - Twitter: @arnejoergensen - Drupal.org: arnested Thomas Fini Hansen - Twitter: @xendk - Drupal.org: Xen Mads Høgstedt Danquah - Twitter: @danquah - Drupal.org: danquah
  • 4. Back in the old days... ● We threw everything in one Git repos ● Upgrading was troublesome ● Because patches and hacks got lost ● So we started using drush make... ● And we were happy
  • 5. Until we realized that... ● Although it was an improvement... ● It Drush Make comes with its own bag of problem ● We started thinking (OMG!)
  • 6. So what do we actually want ● Use a branching workflow (i.e. git-flow) ● Fast builds and deploys ● Not too many points of failure ● Avoid Not-Invented-Here
  • 7. Four approaches to repos structures ● Git submodules ● Composer ● Drush Make ● Everything in one monolithic git repos
  • 8. Git submodule ● Proven technology ● No way to build a Drupal Core with modules inside ● No way to handle patches
  • 9. Git submodule Composer ● Proven technology ● No way to build a Drupal Core with modules inside ● No way to handle patches
  • 10. Git submodule Composer ● Proven technology ● No way to build a Drupal Core with modules inside ● No way to handle patches ● Extend via Composer plugins ● Used by Symfony2
  • 11. Drush Make ● Good tracking of: ○ modules ○ versions ○ patches ● Branching is troublesome ● Multiple failure points ● What did I change? Re-make? ● Less than perfect error handling ● Large make files and recursive make files ● Problems don’t fit on one slide
  • 12. One monolithic git repos Pros ● Branching is easy ● Build times are fast ● No need for tools other than git Cons ● Tracking of modules, versions, and patches ● Upgrades? ● Doesn’t feel right...
  • 13. But let’s remember… Employees at Reload are:
  • 14. But let’s remember… Employees at Reload are: Skilled,
  • 15. But let’s remember… Employees at Reload are: Skilled, responsible
  • 16. But let’s remember… Employees at Reload are: Skilled, responsible grownups
  • 17. But let’s remember… Employees at Reload are: Skilled, responsible grownups If you fit the description we are hiring...
  • 18. 80% ● Unpatched, stable Drupal.org modules have all info in the .info file ● Upgrades is just a “drush up” away ● Let’s just document the remaining 20%
  • 19. Kilroy patched this! Arne added the patch from http://drupal.org/files/secure_permissions-duplicate_ role_exception-1744274-4.patch' so that we ignore exceptions related to attempts to create roles that are already present on the site. There is an upstream issue with more details at https://drupal.org/node/1744274
  • 20. Kilroy patched this! Or a bit more structured: patch: 'http://drupal.org/files/secure_permissions-duplicate_role_exception -1744274-4.patch' home: 'https://drupal.org/node/1744274' reason: 'Ignores exception related to attempts to create roles that are already present on the site'
  • 21. Kilroy patched this! Or a bit more structured: patch: 'http://drupal.org/files/secure_permissions-duplicate_role_exception -1744274-4.patch' home: 'https://drupal.org/node/1744274' reason: 'Ignores exception related to attempts to create roles that are already present on the site' OMG - That’s YAML! sites/all/modules/secure_permissions.yml
  • 22. Basically that’s OMG ● One Massivi Git repository ● Document the stuff that differs in YAML ● Act like a grown up ● No need for any tools
  • 25. Some features ● Verbose ● Maintainance mode ● Dumping database ● Fast
  • 27. More features ● Restart Apache2/Varnish ● VERSION.txt ● New Relic/Flowdock ● Install in sites/all/drush ● OMG command
  • 29. Current limitations ● One server deployments ● No D8 support yet ● No submodules
  • 32. Why we <3 patches ● They let us contribute the change we had to make anyways back to the community. ● They gives us access to others fixes right away without having to wait on releases. ● But - we have to keep the process of using patches quick and easy or we just won’t bother
  • 33. Patching in OMG Make did all the work for us, now we have to ● Keep track of our patches ● Be able to reapply after a module-upgrade ● Remember why we applied the patch in the first place Drush-make have make-files, we have YAML
  • 34. all YAML all the way ● We place a .yml file next to the module ● It contains ○ The patch URL ○ A “home” url (issue link) ○ A description of why we need it ● Yaml - because then we can script the modification of the file.
  • 35. Sample yml-file - patch: 'http://drupal.org/files/secure_permissions-duplicate_role_exception -1744274-4.patch' home: 'https://drupal.org/node/1744274' reason: 'Ignores exception related to attempts to create roles that are already present on the site' - patch: 'http://drupal.org/files/secure_permissions-permissions-not-set-bug -1406892-d7-7.patch' home: 'https://drupal.org/node/1406892' reason: 'Fixes an issue where empty roles blocks other roles from getting permissions. Committed to dev so can be skipped when 1.6 is released.' … Great, but really - who wants to maintain yaml-files by hand?
  • 36. Bandaid to the rescue ● Bandaid - a drush command that ○ Applies patches ○ Keeps the .yml updated ○ Detects unauthorized changes ○ Makes it as easy as possible to upgrade and re-patch modules ○ And it does it all by using enough git internally to qualify as actual magic!
  • 37. Live Demotime ● bandaid-patch ● bandaid-apply ● bandaid-diff ● bandaid-tearoff ….what can possible go wrong?
  • 38. Wrapup - status ● Current status ○ Module patching is fully supported ○ Core patching is a work-in-progress (patch+apply works) ● We (reload) use bandaid. ● A “large danish media-house” is currently converting from make to OMG and bandaid
  • 39. Wrapup near-furture stuff ● We’re considering a “scan all my modules and detect modifications” command ● Full(er) core support ● Support for custom content in the .yml files ● We welcome issues and pull-requests against https://github.com/xendk/bandaid