SlideShare a Scribd company logo
1 of 32
Download to read offline
Scaling up development of a modular code
base
Robert Munteanu, Adobe Systems
Prague, 19-20 October 2017
Robert Munteanu @rombert Prague, 19-20 October 2017
About me
Robert Munteanu @rombert Prague, 19-20 October 2017
Agenda
●
Modular development
●
Source control
●
Build tool and continuous integration
●
(Integrated) development environment
●
Communication
●
Demo
●
Wrap-up
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development
Robert Munteanu @rombert Prague, 19-20 October 2017
What is modular development?
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development vs modular deployment
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development vs modular deployment
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control: to split or not to split
Robert Munteanu @rombert Prague, 19-20 October 2017
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
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control: multiple repositories
Robert Munteanu @rombert Prague, 19-20 October 2017
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 ...'
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control: repo automation
#!/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>'
Robert Munteanu @rombert Prague, 19-20 October 2017
Source control: migrating 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
Robert Munteanu @rombert Prague, 19-20 October 2017
Build tool and continuous
integration
Robert Munteanu @rombert Prague, 19-20 October 2017
Build tool: the aggregate build
Robert Munteanu @rombert Prague, 19-20 October 2017
Build tool: repository
Robert Munteanu @rombert Prague, 19-20 October 2017
Build tool: automating creation 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 */
}
}
}
Robert Munteanu @rombert Prague, 19-20 October 2017
(Integrated) development
environment
Robert Munteanu @rombert Prague, 19-20 October 2017
IDE: provisioning and project discovery
Robert Munteanu @rombert Prague, 19-20 October 2017
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>
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication: single channel
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication: multiple channels
Robert Munteanu @rombert Prague, 19-20 October 2017
Communication: a split?
Robert Munteanu @rombert Prague, 19-20 October 2017
Demo
Robert Munteanu @rombert Prague, 19-20 October 2017
Wrap-up
Robert Munteanu @rombert Prague, 19-20 October 2017
Modular development - Sling
Robert Munteanu @rombert Prague, 19-20 October 2017
The big picture
Robert Munteanu @rombert Prague, 19-20 October 2017
The big picture
Robert Munteanu @rombert Prague, 19-20 October 2017
Supporting tools
●
https://github.com/jenkinsci/job-dsl-plugin
●
https://gerrit.googlesource.com/git-repo/
●
https://projects.eclipse.org/projects/tools.oomph
Robert Munteanu @rombert Prague, 19-20 October 2017
Examples of modular development
●
https://svn.apache.org/repos/asf/sling/trunk/tooling/jenkins/
●
https://github.com/wcm-io-devops/eclipse-maven-plugin
●
https://github.com/bdelacretaz/docker-jenkins-dsl-ready
●
https://wiki.openstack.org/wiki/MailingListEtiquette

More Related Content

Similar to Scaling up development of a modular code base

DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...DevDay Dresden
 
ICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceLetsConnect
 
Social Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open SourceSocial Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open SourcePaul Withers
 
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...apidays
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Horacio Gonzalez
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code baseRobert Munteanu
 
Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2Óscar Recio Soria
 
Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016Steve Hoffman
 
Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Pierre Joye
 
Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017Matt Raible
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOPaolo Cristofaro
 
Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer John Riviello
 
Streaming Visualization
Streaming VisualizationStreaming Visualization
Streaming VisualizationGuido Schmutz
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Matt Raible
 
Git - the stupid content tracker
Git - the stupid content trackerGit - the stupid content tracker
Git - the stupid content trackerEric Johnson
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with DancerDave Cross
 
Building cognitive apps with Watson Work Services
Building cognitive apps with Watson Work ServicesBuilding cognitive apps with Watson Work Services
Building cognitive apps with Watson Work ServicesLetsConnect
 
Using Ruby in Android Development
Using Ruby in Android DevelopmentUsing Ruby in Android Development
Using Ruby in Android DevelopmentAdam Blum
 
Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018Darío Kondratiuk
 

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

DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
 
ICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open SourceICS INtegration with Node-RED and Open Source
ICS INtegration with Node-RED and Open Source
 
Social Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open SourceSocial Connections 14 - ICS Integration with Node-RED and Open Source
Social Connections 14 - ICS Integration with Node-RED and Open Source
 
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
apidays LIVE Helsinki & North - 20 minutes to build a serverless COVID-19 RES...
 
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
Battle of Frameworks: Polymer - Meetup Paris Web Components - 2016-09
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
 
Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2Prepara tu entorno para Magento 2
Prepara tu entorno para Magento 2
 
Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016
 
Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and Php 7.x 8.0 and hhvm and
Php 7.x 8.0 and hhvm and
 
Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017Front End Development for Back End Developers - vJUG24 2017
Front End Development for Back End Developers - vJUG24 2017
 
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OOVirtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
Virtuoso RDF Triple Store Analysis Benchmark & mapping tools RDF / OO
 
ChainerUI v0.2, v0.3
ChainerUI v0.2, v0.3ChainerUI v0.2, v0.3
ChainerUI v0.2, v0.3
 
Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer
 
Streaming Visualization
Streaming VisualizationStreaming Visualization
Streaming Visualization
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
 
Git - the stupid content tracker
Git - the stupid content trackerGit - the stupid content tracker
Git - the stupid content tracker
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
 
Building cognitive apps with Watson Work Services
Building cognitive apps with Watson Work ServicesBuilding cognitive apps with Watson Work Services
Building cognitive apps with Watson Work Services
 
Using Ruby in Android Development
Using Ruby in Android DevelopmentUsing Ruby in Android Development
Using Ruby in Android Development
 
Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018Hacking the browser with puppeteer sharp .NET conf AR 2018
Hacking the browser with puppeteer sharp .NET conf AR 2018
 

More from Robert Munteanu

Secure by Default Web Applications
Secure by Default Web ApplicationsSecure by Default Web Applications
Secure by Default Web ApplicationsRobert Munteanu
 
Sling Applications - A DevOps perspective
Sling Applications - A DevOps perspectiveSling Applications - A DevOps perspective
Sling Applications - A DevOps perspectiveRobert Munteanu
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGiRobert Munteanu
 
Escape the defaults - Configure Sling like AEM as a Cloud Service
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
 
Crash course in Kubernetes monitoring
Crash course in Kubernetes monitoringCrash course in Kubernetes monitoring
Crash course in Kubernetes monitoringRobert Munteanu
 
Java agents for fun and (not so much) profit
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
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGiRobert Munteanu
 
Cloud-native legacy applications
Cloud-native legacy applicationsCloud-native legacy applications
Cloud-native legacy applicationsRobert 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...
From Monolith to Modules - breaking apart a one size fits all product into mo...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?
What's new in the Sling developer tooling?Robert Munteanu
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code baseRobert Munteanu
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code baseRobert Munteanu
 
Zero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using DockerZero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using DockerRobert Munteanu
 
Do you really want to go fully micro?
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
 
Effective web application development with Apache Sling
Effective web application development with Apache SlingEffective web application development with Apache Sling
Effective web application development with Apache SlingRobert Munteanu
 
Of microservices and microservices
Of microservices and microservicesOf microservices and microservices
Of microservices and microservicesRobert Munteanu
 
Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)Robert Munteanu
 
Secure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache SlingSecure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache SlingRobert Munteanu
 
Apache Sling as a Microservices Gateway
Apache Sling as a Microservices GatewayApache Sling as a Microservices Gateway
Apache Sling as a Microservices GatewayRobert Munteanu
 

More from Robert Munteanu (20)

Secure by Default Web Applications
Secure by Default Web ApplicationsSecure by Default Web Applications
Secure by Default Web Applications
 
Sling Applications - A DevOps perspective
Sling Applications - A DevOps perspectiveSling Applications - A DevOps perspective
Sling Applications - A DevOps perspective
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
 
Escape the defaults - Configure Sling like AEM as a Cloud Service
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
 
Crash course in Kubernetes monitoring
Crash course in Kubernetes monitoringCrash course in Kubernetes monitoring
Crash course in Kubernetes monitoring
 
Java agents for fun and (not so much) profit
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
 
Will it blend? Java agents and OSGi
Will it blend? Java agents and OSGiWill it blend? Java agents and OSGi
Will it blend? Java agents and OSGi
 
Cloud-native legacy applications
Cloud-native legacy applicationsCloud-native legacy applications
Cloud-native legacy applications
 
Cloud-Native Sling
Cloud-Native SlingCloud-Native Sling
Cloud-Native Sling
 
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...
From Monolith to Modules - breaking apart a one size fits all product into mo...
 
What's new in the Sling developer tooling?
What's new in the Sling developer tooling?What's new in the Sling developer tooling?
What's new in the Sling developer tooling?
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
 
Zero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using DockerZero downtime deployments for Sling application using Docker
Zero downtime deployments for Sling application using Docker
 
Do you really want to go fully micro?
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?
 
Effective web application development with Apache Sling
Effective web application development with Apache SlingEffective web application development with Apache Sling
Effective web application development with Apache Sling
 
Of microservices and microservices
Of microservices and microservicesOf microservices and microservices
Of microservices and microservices
 
Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)Slide IDE Tooling (adaptTo 2016)
Slide IDE Tooling (adaptTo 2016)
 
Secure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache SlingSecure by Default Web Applications with Apache Sling
Secure by Default Web Applications with Apache Sling
 
Apache Sling as a Microservices Gateway
Apache Sling as a Microservices GatewayApache Sling as a Microservices Gateway
Apache Sling as a Microservices Gateway
 

Recently uploaded

AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfAzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfryanfarris8
 
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationJuha-Pekka Tolvanen
 
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...WSO2
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and ApplicationsWSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and ApplicationsWSO2
 
WSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2
 
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2
 
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!WSO2
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
WSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in sowetomasabamasaba
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2
 

Recently uploaded (20)

AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfAzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
 
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
WSO2CON 2024 - IoT Needs CIAM: The Importance of Centralized IAM in a Growing...
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and ApplicationsWSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
 
WSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration Tooling
 
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next IntegrationWSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
WSO2CON2024 - Why Should You Consider Ballerina for Your Next Integration
 
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AI
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
 
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 

Scaling up development of a modular code base

  • 1. Scaling up development of a modular code base Robert Munteanu, Adobe Systems Prague, 19-20 October 2017
  • 2. Robert Munteanu @rombert Prague, 19-20 October 2017 About me
  • 3. Robert Munteanu @rombert Prague, 19-20 October 2017 Agenda ● Modular development ● Source control ● Build tool and continuous integration ● (Integrated) development environment ● Communication ● Demo ● Wrap-up
  • 4. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development
  • 5. Robert Munteanu @rombert Prague, 19-20 October 2017 What is modular development?
  • 6. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development vs modular deployment
  • 7. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development vs modular deployment
  • 8. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control
  • 9. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: to split or not to split
  • 10. Robert Munteanu @rombert Prague, 19-20 October 2017 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. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: multiple repositories
  • 12. Robert Munteanu @rombert Prague, 19-20 October 2017 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. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: repo automation #!/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. Robert Munteanu @rombert Prague, 19-20 October 2017 Source control: migrating 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. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool and continuous integration
  • 16. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: the aggregate build
  • 17. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: repository
  • 18. Robert Munteanu @rombert Prague, 19-20 October 2017 Build tool: automating creation 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 */ } } }
  • 19. Robert Munteanu @rombert Prague, 19-20 October 2017 (Integrated) development environment
  • 20. Robert Munteanu @rombert Prague, 19-20 October 2017 IDE: provisioning and project discovery
  • 21. Robert Munteanu @rombert Prague, 19-20 October 2017 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>
  • 22. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication
  • 23. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: single channel
  • 24. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: multiple channels
  • 25. Robert Munteanu @rombert Prague, 19-20 October 2017 Communication: a split?
  • 26. Robert Munteanu @rombert Prague, 19-20 October 2017 Demo
  • 27. Robert Munteanu @rombert Prague, 19-20 October 2017 Wrap-up
  • 28. Robert Munteanu @rombert Prague, 19-20 October 2017 Modular development - Sling
  • 29. Robert Munteanu @rombert Prague, 19-20 October 2017 The big picture
  • 30. Robert Munteanu @rombert Prague, 19-20 October 2017 The big picture
  • 31. Robert Munteanu @rombert Prague, 19-20 October 2017 Supporting tools ● https://github.com/jenkinsci/job-dsl-plugin ● https://gerrit.googlesource.com/git-repo/ ● https://projects.eclipse.org/projects/tools.oomph
  • 32. Robert Munteanu @rombert Prague, 19-20 October 2017 Examples of modular development ● https://svn.apache.org/repos/asf/sling/trunk/tooling/jenkins/ ● https://github.com/wcm-io-devops/eclipse-maven-plugin ● https://github.com/bdelacretaz/docker-jenkins-dsl-ready ● https://wiki.openstack.org/wiki/MailingListEtiquette