Scaling up development of a modular code base

Robert Munteanu
Robert MunteanuSenior Software Developer at Adobe Systems Inc
APACHE SLING & FRIENDS TECH MEETUP
BERLIN, 25-27 SEPTEMBER 2017
Robert Munteanu – Adobe Systems Inc
Scaling up development of a modular code base
About me
Agenda
● Modular development
● Source control
● Build tool and continuous integration
● (Integrated) development environment
● Communication
● Wrap-up
Modular development
What is modular development?
Modular development vs modular deployment
Modular development vs modular deployment
Source control
Source control: to split or not to split
Source control: single repository
$ svn checkout
https://svn.apache.org↵
/repos/asf/sling/trunk sling
# change, commit atomically
$ svn ls https://svn.apache.org↵
/repos/asf/sling/tags | wc -l
1478
Source control: multple repositories
Source control: repo (Android)
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="origin" fetch=".." />
<default revision="master" remote="origin" />
<project path="api" name="api.git"/>
<project path="impl" name="impl.git"/>
</manifest>
$ repo init -u git@github.com:org/manifest.git
$ repo sync
$ repo start new-feature api/ impl/
$ repo forall -c 'git push ...'
Source control: repo automaton
#!/bin/sh
echo '<?xml version="1.0" encoding="UTF-8"?>'
echo "<!-- generated by $(basename $0) -->"
echo '<manifest>'
echo ' <remote name="origin" fetch="."/>'
echo ' <default revision="master" remote="origin"/>'
for repo in $(curl -s https://api.github.com/users/rombert/repos?sort=updated 
| jq '.[] | .name | match ("TMP-sling-org.apache.sling.*") | .string' | tr
-d '"' | sort); do
name=${repo#TMP-sling-}
echo " <project path="${name}" name="${repo}.git"/>"
done
echo '</manifest>'
Source control: migratng to individual repositories
$ git clone https://github.com/apache/sling.git sling
$ git clone sling org.apache.sling.engine
$ cd org.apache.sling.engine
$ git filter-branch --subdirectory-filter
bundles/engine
$ git for-each-ref --format="%(refname)"
refs/original/
| xargs -n1 git update-ref -d
$ ls # only data in bundles/engine
Build tool and continuous integration
Build tool: the aggregate build
Build tool: repository
Build tool: automatng creaton of module builds
def modules = [
[
location: 'bundles/api'
],
[
location: 'bundles/auth/core'
] /* many others skipped */
]
modules.each { module ->
jdks.each { jdkKey ->
mavenJob(jobName(module.location, jdkKey)) {
logRotator {
numToKeep(15)
}
triggers {
snapshotDependencies(true)
scm('H/15 * * * *')
}
goals("-U clean deploy")
/* other instructions skipped */
}
}
}
(Integrated) development environment
IDE: project discovery
IDE: shared preferences
<!-- package your preferences as a Maven artifact --->
<dependency>
<groupId>org.acme.tooling</groupId>
<artifactId>acme-eclipse-formatter</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>eclipse-formatter</packaging>
</dependency>
<!-- configure the plugin in your parent pom -->
<plugins>
<plugin>
<groupId>ro.lmn.maven.rip</groupId>
<artifactId>eclipse-preferences-maven-plugin</artifactId>
<version>0.0.2</version>
<extensions>true</extensions>
<configuration>
<repository>
<kind>jira</kind>
<url>https://issues.apache.org/jira</url>
</repository>
<commitTemplate>${task.key} - ${task.description}nn</commitTemplate>
</configuration>
</plugin>
</plugins>
Communication
Communicaton: single channel
Communicaton: multple channels
Communicaton: a split?
Wrap-up
Modular development - Sling
The big picture
The big picture
Supportng tools
● https://github.com/jenkinsci/job-dsl-plugin
● https://gerrit.googlesource.com/git-repo/
● https://projects.eclipse.org/projects/tools.o
omph
● http://www.catb.org/~esr/reposurgeon/repos
urgeon.html
Examples of modular development
● https://svn.apache.org/repos/asf/sling/trunk/
tooling/jenkins/
● https://github.com/wcm-io-devops/eclipse-m
aven-plugin
● https://github.com/bdelacretaz/docker-jenkin
s-dsl-ready
● https://wiki.openstack.org/wiki/MailingListEt
1 of 31

Recommended

Zero downtime deployments for Sling application using Docker by
Zero downtime deployments for Sling application using DockerZero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using DockerRobert Munteanu
1K views32 slides
Do you really want to go fully micro? by
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?Robert Munteanu
747 views45 slides
javerosmx-2015-marzo-groovy-java8-comparison by
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonDomingo Suarez Torres
1.3K views52 slides
Proxying DBI with DBD::Gofer and App::Staticperl by
Proxying DBI with DBD::Gofer and App::StaticperlProxying DBI with DBD::Gofer and App::Staticperl
Proxying DBI with DBD::Gofer and App::Staticperlnohuhu
2.2K views14 slides
Developing Rich Internet Applications with Perl and JavaScript by
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptnohuhu
3.4K views12 slides
Ansible, Idempotency, and Jenkins by
Ansible, Idempotency, and JenkinsAnsible, Idempotency, and Jenkins
Ansible, Idempotency, and Jenkinstylerturk
1.6K views14 slides

More Related Content

What's hot

Microservices in Golang by
Microservices in GolangMicroservices in Golang
Microservices in GolangMo'ath Qasim
1K views24 slides
WordPress 4.4 and Beyond by
WordPress 4.4 and BeyondWordPress 4.4 and Beyond
WordPress 4.4 and BeyondScott Taylor
58.2K views40 slides
Short-Training asp.net vNext by
Short-Training asp.net vNextShort-Training asp.net vNext
Short-Training asp.net vNextBetclic Everest Group Tech Team
1.8K views21 slides
Riak at Posterous by
Riak at PosterousRiak at Posterous
Riak at Posterouscapotej
13.8K views26 slides
Why use Go for web development? by
Why use Go for web development?Why use Go for web development?
Why use Go for web development?Weng Wei
3.6K views57 slides
Swift @ IBM by
Swift @ IBMSwift @ IBM
Swift @ IBMPushkar Kulkarni
105 views11 slides

What's hot(20)

Microservices in Golang by Mo'ath Qasim
Microservices in GolangMicroservices in Golang
Microservices in Golang
Mo'ath Qasim1K views
WordPress 4.4 and Beyond by Scott Taylor
WordPress 4.4 and BeyondWordPress 4.4 and Beyond
WordPress 4.4 and Beyond
Scott Taylor58.2K views
Riak at Posterous by capotej
Riak at PosterousRiak at Posterous
Riak at Posterous
capotej13.8K views
Why use Go for web development? by Weng Wei
Why use Go for web development?Why use Go for web development?
Why use Go for web development?
Weng Wei3.6K views
10/29 Austin Ansible MeetUp - AnsibleFest Talk & Extending Ansible by tylerturk
10/29 Austin Ansible MeetUp - AnsibleFest Talk & Extending Ansible10/29 Austin Ansible MeetUp - AnsibleFest Talk & Extending Ansible
10/29 Austin Ansible MeetUp - AnsibleFest Talk & Extending Ansible
tylerturk924 views
Isomorphic JavaScript with Node, WebPack, and React by Tyler Peterson
Isomorphic JavaScript with Node, WebPack, and ReactIsomorphic JavaScript with Node, WebPack, and React
Isomorphic JavaScript with Node, WebPack, and React
Tyler Peterson1.7K views
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta by VincitOy
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostustaVincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta
VincitOy562 views
Python to go by Weng Wei
Python to goPython to go
Python to go
Weng Wei8.5K views
[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ... by Srijan Technologies
[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ...[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ...
[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ...
Ignite Devops Fast Moving Software by SpamapS
Ignite Devops Fast Moving SoftwareIgnite Devops Fast Moving Software
Ignite Devops Fast Moving Software
SpamapS312 views
Mojolicious mvc by Arpad Szasz
Mojolicious mvcMojolicious mvc
Mojolicious mvc
Arpad Szasz1.2K views
Killer Docker Workflows for Development by Chris Tankersley
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for Development
Chris Tankersley159 views
They why behind php frameworks by Kirk Madera
They why behind php frameworksThey why behind php frameworks
They why behind php frameworks
Kirk Madera254 views
RubyMotion Inspect Conference - 2013. (With speaker notes.) by alloy020
RubyMotion Inspect Conference - 2013. (With speaker notes.)RubyMotion Inspect Conference - 2013. (With speaker notes.)
RubyMotion Inspect Conference - 2013. (With speaker notes.)
alloy0201.1K views
Trying Out Tomorrow’s WordPress Today by DrewAPicture
Trying Out Tomorrow’s WordPress TodayTrying Out Tomorrow’s WordPress Today
Trying Out Tomorrow’s WordPress Today
DrewAPicture13.4K views

Similar to Scaling up development of a modular code base

Scaling up development of a modular code base - R Munteanu by
Scaling up development of a modular code base - R MunteanuScaling up development of a modular code base - R Munteanu
Scaling up development of a modular code base - R Munteanumfrancis
223 views33 slides
Scaling up development of a modular code base by
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code baseRobert Munteanu
771 views33 slides
Scaling up development of a modular code base by
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code baseRobert Munteanu
127 views38 slides
Write php deploy everywhere tek11 by
Write php deploy everywhere   tek11Write php deploy everywhere   tek11
Write php deploy everywhere tek11Michelangelo van Dam
3.1K views53 slides
2018 the conf put git to work - increase the quality of your rails project... by
2018 the conf   put git to work -  increase the quality of your rails project...2018 the conf   put git to work -  increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...Rodrigo Urubatan
110 views39 slides
Burn down the silos! Helping dev and ops gel on high availability websites by
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesLindsay Holmwood
1.6K views177 slides

Similar to Scaling up development of a modular code base(20)

Scaling up development of a modular code base - R Munteanu by mfrancis
Scaling up development of a modular code base - R MunteanuScaling up development of a modular code base - R Munteanu
Scaling up development of a modular code base - R Munteanu
mfrancis223 views
Scaling up development of a modular code base by Robert Munteanu
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
Robert Munteanu771 views
Scaling up development of a modular code base by Robert Munteanu
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
Robert Munteanu127 views
2018 the conf put git to work - increase the quality of your rails project... by Rodrigo Urubatan
2018 the conf   put git to work -  increase the quality of your rails project...2018 the conf   put git to work -  increase the quality of your rails project...
2018 the conf put git to work - increase the quality of your rails project...
Rodrigo Urubatan110 views
Burn down the silos! Helping dev and ops gel on high availability websites by Lindsay Holmwood
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood1.6K views
Instrumentación de entrega continua con Gitlab by Software Guru
Instrumentación de entrega continua con GitlabInstrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con Gitlab
Software Guru429 views
Rapid Prototyping FTW!!! by cloudbring
Rapid Prototyping FTW!!!Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!
cloudbring991 views
Toolbox of a Ruby Team by Arto Artnik
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
Arto Artnik422 views
2018 RubyHACK: put git to work - increase the quality of your rails project... by Rodrigo Urubatan
2018 RubyHACK:  put git to work -  increase the quality of your rails project...2018 RubyHACK:  put git to work -  increase the quality of your rails project...
2018 RubyHACK: put git to work - increase the quality of your rails project...
Rodrigo Urubatan338 views
Plugin-based software design with Ruby and RubyGems by Sadayuki Furuhashi
Plugin-based software design with Ruby and RubyGemsPlugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGems
Sadayuki Furuhashi7.9K views
Deploying Symfony | symfony.cat by Pablo Godel
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
Pablo Godel2.8K views
Continous delivery with Jenkins and Chef by defrag2
Continous delivery with Jenkins and ChefContinous delivery with Jenkins and Chef
Continous delivery with Jenkins and Chef
defrag21.6K views
Deployment Tactics by Ian Barber
Deployment TacticsDeployment Tactics
Deployment Tactics
Ian Barber4.7K views
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk by PROIDEA
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
PROIDEA175 views
Continuous Security in DevOps by Maciej Lasyk
Continuous Security in DevOpsContinuous Security in DevOps
Continuous Security in DevOps
Maciej Lasyk5.6K views
Rails Engine | Modular application by mirrec
Rails Engine | Modular applicationRails Engine | Modular application
Rails Engine | Modular application
mirrec6.3K views
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview by Leo Lorieri
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
Leo Lorieri2K views
Introduction to PowerShell by Boulos Dib
Introduction to PowerShellIntroduction to PowerShell
Introduction to PowerShell
Boulos Dib2.6K views

More from Robert Munteanu

Secure by Default Web Applications by
Secure by Default Web ApplicationsSecure by Default Web Applications
Secure by Default Web ApplicationsRobert Munteanu
1 view42 slides
Sling Applications - A DevOps perspective by
Sling Applications - A DevOps perspectiveSling Applications - A DevOps perspective
Sling Applications - A DevOps perspectiveRobert Munteanu
1 view36 slides
Will it blend? Java agents and OSGi by
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGiRobert Munteanu
279 views30 slides
Escape the defaults - Configure Sling like AEM as a Cloud Service by
Escape the defaults - Configure Sling like AEM as a Cloud ServiceEscape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud ServiceRobert Munteanu
223 views35 slides
Crash course in Kubernetes monitoring by
Crash course in Kubernetes monitoringCrash course in Kubernetes monitoring
Crash course in Kubernetes monitoringRobert Munteanu
343 views41 slides
Java agents for fun and (not so much) profit by
Java agents for fun and (not so much) profitJava agents for fun and (not so much) profit
Java agents for fun and (not so much) profitRobert Munteanu
339 views29 slides

More from Robert Munteanu(20)

Sling Applications - A DevOps perspective by Robert Munteanu
Sling Applications - A DevOps perspectiveSling Applications - A DevOps perspective
Sling Applications - A DevOps perspective
Will it blend? Java agents and OSGi by Robert Munteanu
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
Robert Munteanu279 views
Escape the defaults - Configure Sling like AEM as a Cloud Service by Robert Munteanu
Escape the defaults - Configure Sling like AEM as a Cloud ServiceEscape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud Service
Robert Munteanu223 views
Crash course in Kubernetes monitoring by Robert Munteanu
Crash course in Kubernetes monitoringCrash course in Kubernetes monitoring
Crash course in Kubernetes monitoring
Robert Munteanu343 views
Java agents for fun and (not so much) profit by Robert Munteanu
Java agents for fun and (not so much) profitJava agents for fun and (not so much) profit
Java agents for fun and (not so much) profit
Robert Munteanu339 views
Will it blend? Java agents and OSGi by Robert Munteanu
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
Robert Munteanu393 views
Cloud-native legacy applications by Robert Munteanu
Cloud-native legacy applicationsCloud-native legacy applications
Cloud-native legacy applications
Robert Munteanu191 views
From Monolith to Modules - breaking apart a one size fits all product into mo... by Robert Munteanu
From Monolith to Modules - breaking apart a one size fits all product into mo...From Monolith to Modules - breaking apart a one size fits all product into mo...
From Monolith to Modules - breaking apart a one size fits all product into mo...
Robert Munteanu348 views
What's new in the Sling developer tooling? by Robert Munteanu
What's new in the Sling developer tooling?What's new in the Sling developer tooling?
What's new in the Sling developer tooling?
Robert Munteanu334 views
Scaling up development of a modular code base by Robert Munteanu
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
Robert Munteanu234 views
Effective web application development with Apache Sling by Robert Munteanu
Effective web application development with Apache SlingEffective web application development with Apache Sling
Effective web application development with Apache Sling
Robert Munteanu535 views
Of microservices and microservices by Robert Munteanu
Of microservices and microservicesOf microservices and microservices
Of microservices and microservices
Robert Munteanu600 views
Slide IDE Tooling (adaptTo 2016) by Robert Munteanu
Slide IDE Tooling (adaptTo 2016)Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)
Robert Munteanu311 views
Secure by Default Web Applications with Apache Sling by Robert Munteanu
Secure by Default Web Applications with Apache SlingSecure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache Sling
Robert Munteanu798 views
Apache Sling as a Microservices Gateway by Robert Munteanu
Apache Sling as a Microservices GatewayApache Sling as a Microservices Gateway
Apache Sling as a Microservices Gateway
Robert Munteanu2.1K views
Apache Sling as an OSGi-powered REST middleware by Robert Munteanu
Apache Sling as an OSGi-powered REST middlewareApache Sling as an OSGi-powered REST middleware
Apache Sling as an OSGi-powered REST middleware
Robert Munteanu1.6K views
Effective Web Application Development with Apache Sling by Robert Munteanu
Effective Web Application Development with Apache SlingEffective Web Application Development with Apache Sling
Effective Web Application Development with Apache Sling
Robert Munteanu953 views
Building domain-specific testing tools : lessons learned from the Apache Slin... by Robert Munteanu
Building domain-specific testing tools : lessons learned from the Apache Slin...Building domain-specific testing tools : lessons learned from the Apache Slin...
Building domain-specific testing tools : lessons learned from the Apache Slin...
Robert Munteanu519 views

Recently uploaded

[2023] Putting the R! in R&D.pdf by
[2023] Putting the R! in R&D.pdf[2023] Putting the R! in R&D.pdf
[2023] Putting the R! in R&D.pdfEleanor McHugh
38 views127 slides
Micron CXL product and architecture update by
Micron CXL product and architecture updateMicron CXL product and architecture update
Micron CXL product and architecture updateCXL Forum
27 views7 slides
Combining Orchestration and Choreography for a Clean Architecture by
Combining Orchestration and Choreography for a Clean ArchitectureCombining Orchestration and Choreography for a Clean Architecture
Combining Orchestration and Choreography for a Clean ArchitectureThomasHeinrichs1
68 views24 slides
Understanding GenAI/LLM and What is Google Offering - Felix Goh by
Understanding GenAI/LLM and What is Google Offering - Felix GohUnderstanding GenAI/LLM and What is Google Offering - Felix Goh
Understanding GenAI/LLM and What is Google Offering - Felix GohNUS-ISS
39 views33 slides
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ... by
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ..."Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ...
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ...Fwdays
33 views39 slides
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen... by
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...NUS-ISS
23 views70 slides

Recently uploaded(20)

[2023] Putting the R! in R&D.pdf by Eleanor McHugh
[2023] Putting the R! in R&D.pdf[2023] Putting the R! in R&D.pdf
[2023] Putting the R! in R&D.pdf
Eleanor McHugh38 views
Micron CXL product and architecture update by CXL Forum
Micron CXL product and architecture updateMicron CXL product and architecture update
Micron CXL product and architecture update
CXL Forum27 views
Combining Orchestration and Choreography for a Clean Architecture by ThomasHeinrichs1
Combining Orchestration and Choreography for a Clean ArchitectureCombining Orchestration and Choreography for a Clean Architecture
Combining Orchestration and Choreography for a Clean Architecture
ThomasHeinrichs168 views
Understanding GenAI/LLM and What is Google Offering - Felix Goh by NUS-ISS
Understanding GenAI/LLM and What is Google Offering - Felix GohUnderstanding GenAI/LLM and What is Google Offering - Felix Goh
Understanding GenAI/LLM and What is Google Offering - Felix Goh
NUS-ISS39 views
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ... by Fwdays
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ..."Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ...
"Quality Assurance: Achieving Excellence in startup without a Dedicated QA", ...
Fwdays33 views
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen... by NUS-ISS
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
Upskilling the Evolving Workforce with Digital Fluency for Tomorrow's Challen...
NUS-ISS23 views
Web Dev - 1 PPT.pdf by gdsczhcet
Web Dev - 1 PPT.pdfWeb Dev - 1 PPT.pdf
Web Dev - 1 PPT.pdf
gdsczhcet52 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi113 views
"Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad... by Fwdays
"Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad..."Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad...
"Ukrainian Mobile Banking Scaling in Practice. From 0 to 100 and beyond", Vad...
Fwdays40 views
Future of Learning - Khoong Chan Meng by NUS-ISS
Future of Learning - Khoong Chan MengFuture of Learning - Khoong Chan Meng
Future of Learning - Khoong Chan Meng
NUS-ISS31 views
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum... by NUS-ISS
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
NUS-ISS28 views
Microchip: CXL Use Cases and Enabling Ecosystem by CXL Forum
Microchip: CXL Use Cases and Enabling EcosystemMicrochip: CXL Use Cases and Enabling Ecosystem
Microchip: CXL Use Cases and Enabling Ecosystem
CXL Forum129 views
.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV by Splunk
.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV
.conf Go 2023 - How KPN drives Customer Satisfaction on IPTV
Splunk86 views
Spesifikasi Lengkap ASUS Vivobook Go 14 by Dot Semarang
Spesifikasi Lengkap ASUS Vivobook Go 14Spesifikasi Lengkap ASUS Vivobook Go 14
Spesifikasi Lengkap ASUS Vivobook Go 14
Dot Semarang35 views
TE Connectivity: Card Edge Interconnects by CXL Forum
TE Connectivity: Card Edge InterconnectsTE Connectivity: Card Edge Interconnects
TE Connectivity: Card Edge Interconnects
CXL Forum96 views
"AI Startup Growth from Idea to 1M ARR", Oleksandr Uspenskyi by Fwdays
"AI Startup Growth from Idea to 1M ARR", Oleksandr Uspenskyi"AI Startup Growth from Idea to 1M ARR", Oleksandr Uspenskyi
"AI Startup Growth from Idea to 1M ARR", Oleksandr Uspenskyi
Fwdays26 views
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor... by Vadym Kazulkin
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...
Vadym Kazulkin70 views

Scaling up development of a modular code base

  • 1. APACHE SLING & FRIENDS TECH MEETUP BERLIN, 25-27 SEPTEMBER 2017 Robert Munteanu – Adobe Systems Inc Scaling up development of a modular code base
  • 3. Agenda ● Modular development ● Source control ● Build tool and continuous integration ● (Integrated) development environment ● Communication ● Wrap-up
  • 5. What is modular development?
  • 6. Modular development vs modular deployment
  • 7. Modular development vs modular deployment
  • 9. Source control: to split or not to split
  • 10. Source control: single repository $ svn checkout https://svn.apache.org↵ /repos/asf/sling/trunk sling # change, commit atomically $ svn ls https://svn.apache.org↵ /repos/asf/sling/tags | wc -l 1478
  • 11. Source control: multple repositories
  • 12. Source control: repo (Android) <?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="origin" fetch=".." /> <default revision="master" remote="origin" /> <project path="api" name="api.git"/> <project path="impl" name="impl.git"/> </manifest> $ repo init -u git@github.com:org/manifest.git $ repo sync $ repo start new-feature api/ impl/ $ repo forall -c 'git push ...'
  • 13. Source control: repo automaton #!/bin/sh echo '<?xml version="1.0" encoding="UTF-8"?>' echo "<!-- generated by $(basename $0) -->" echo '<manifest>' echo ' <remote name="origin" fetch="."/>' echo ' <default revision="master" remote="origin"/>' for repo in $(curl -s https://api.github.com/users/rombert/repos?sort=updated | jq '.[] | .name | match ("TMP-sling-org.apache.sling.*") | .string' | tr -d '"' | sort); do name=${repo#TMP-sling-} echo " <project path="${name}" name="${repo}.git"/>" done echo '</manifest>'
  • 14. Source control: migratng to individual repositories $ git clone https://github.com/apache/sling.git sling $ git clone sling org.apache.sling.engine $ cd org.apache.sling.engine $ git filter-branch --subdirectory-filter bundles/engine $ git for-each-ref --format="%(refname)" refs/original/ | xargs -n1 git update-ref -d $ ls # only data in bundles/engine
  • 15. Build tool and continuous integration
  • 16. Build tool: the aggregate build
  • 18. Build tool: automatng creaton of module builds def modules = [ [ location: 'bundles/api' ], [ location: 'bundles/auth/core' ] /* many others skipped */ ] modules.each { module -> jdks.each { jdkKey -> mavenJob(jobName(module.location, jdkKey)) { logRotator { numToKeep(15) } triggers { snapshotDependencies(true) scm('H/15 * * * *') } goals("-U clean deploy") /* other instructions skipped */ } } }
  • 21. IDE: shared preferences <!-- package your preferences as a Maven artifact ---> <dependency> <groupId>org.acme.tooling</groupId> <artifactId>acme-eclipse-formatter</artifactId> <version>1.0-SNAPSHOT</version> <packaging>eclipse-formatter</packaging> </dependency> <!-- configure the plugin in your parent pom --> <plugins> <plugin> <groupId>ro.lmn.maven.rip</groupId> <artifactId>eclipse-preferences-maven-plugin</artifactId> <version>0.0.2</version> <extensions>true</extensions> <configuration> <repository> <kind>jira</kind> <url>https://issues.apache.org/jira</url> </repository> <commitTemplate>${task.key} - ${task.description}nn</commitTemplate> </configuration> </plugin> </plugins>
  • 30. Supportng tools ● https://github.com/jenkinsci/job-dsl-plugin ● https://gerrit.googlesource.com/git-repo/ ● https://projects.eclipse.org/projects/tools.o omph ● http://www.catb.org/~esr/reposurgeon/repos urgeon.html
  • 31. Examples of modular development ● https://svn.apache.org/repos/asf/sling/trunk/ tooling/jenkins/ ● https://github.com/wcm-io-devops/eclipse-m aven-plugin ● https://github.com/bdelacretaz/docker-jenkin s-dsl-ready ● https://wiki.openstack.org/wiki/MailingListEt