SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
Nebula:(Ne)lix's(OSS(Gradle(
Plugins
Rob$Spieldenner$@robspieldenner
@NebulaPlugins
h"p://ne(lix.github.io/
h"ps://github.com/nebula4plugins
Why$Open$Source
• Help&out&other&teams&using&gradle
• Contribu5ons
• Hiring
Current'Plugin'Build/Publish'
Infrastructure
• Github
• branch,per,gradle,release
• version,based,on,gradle,release,2.4.x,for,
gradle:2.4
• Cloudbees,(Jenkins),for,CI,and,release:,Job,DSL,to,
setup,a,snapshot,and,release,job,per,branch
• Bintray,(jcenter),as,host
New$Plugin$Build/Publish$
Infrastructure
• Github
• matrix,tes/ng,for,different,versions,of,gradle
• seman/c,versioning
• Travis,CI,for,CI,,release,on,github,tag
• Bintray,(jcenter),as,host
• Publish,with,gradle,plugin,portal
Support,(Issues,(etc.
• Github(issues
• We(love(pull(requests
• or(breaking(tests
• gi6er.im
Naming'Scheme
• nebula():)indicates)a)highly)opinionated)plugin
• gradle():)indicates)we)believe)everyone)would)
benefit)from)the)func;onality
nebula'test
h"ps://github.com/nebula4plugins/nebula4test
nebula'test
will$be$replaced$by$Gradle$TestKit
• ProjectSpec
• PluginProjectSpec
• Integra2onSpec
• Dependency6Genera2on
PluginProjectSpec
import nebula.test.PluginProjectSpec
class PluginExampleSpec extends PluginProjectSpec {
@Override
String getPluginName() { 'plugin-example' }
def ‘check task is setup’() {
when:
project.plugins.apply(PluginExample)
then:
def exampleTask = project.tasks.get(‘example’)
exampleTask.exampleProperty == 'myConfiguredValue'
}
}
Integra(onSpec
import nebula.test.IntegrationSpec
class MyExampleSpec extends IntegrationSpec {
def 'example test'() {
buildFile << """
apply plugin: 'java'
${applyPlugin(MyExamplePlugin)}
""".stripIndent()
when:
def results = runTasksSuccessfully('exampleTask')
then:
results.wasExecuted(':exampleTask')
results.wasUpToDate(':dependentTask')
results.standardOutput.contains 'Example task output'
fileExists('build/example/mycache.tmp')
}
}
Dependency(Genera,on
import nebula.test.dependencies.DependencyGraphBuilder
import nebula.test.dependencies.ModuleBuilder
// ...
def 'generate dependencies'() {
given:
def graph = new DependencyGraphBuilder().addModule('g0:a0:0.0.1')
.addModule('g1', 'a1', '1.0.1')
.addModule(new ModuleBuilder('g2:a2:2.0.1').build())
.addModule(new ModuleBuilder('g3:a3:3.0.1')
.addDependency('g4:a4:4.0.1')
.addDependency('g5', 'a5', '5.0.1').build()
).build()
def generator = new GradleDependencyGenerator(graph)
def mavenRepo = generator.generateTestMavenRepo()
// def ivyRepo = generator.generateTestIvyRepo()
// rest of test
}
nebula'core
h"ps://github.com/nebula4plugins/nebula4core
nebula'core
U"lity'tasks'for'other'plugins
• Download
• Unzip
• Untar
nebula'project'plugin
h"ps://github.com/nebula4plugins/nebula4project4
plugin
nebula'project'plugin
• Opinionated+about+what+a+responsible+project+
should+do
• Builds+Javadoc+and+Sources+jars
• Record+informa<on+about+the+build+and+stores+it+
in+the+.jar,+via+gradle@info@plugin
• Easy+specifica<on+of+people+involved+in+a+project+
via+gradle@contacts@plugin
• facets+to+ease+seDng+up+new+source+sets
gradle'ne)lixoss'project'
plugin
h"ps://github.com/nebula4plugins/gradle4ne7lixoss4
project4plugin
gradle'ne)lixoss'project'plugin
• Provide)release)process
• Configure)publishing
• Recommend)license)headers
• Add)some)error)handling)for)javadoc)in)jdk8
gradle'ospackage'plugin
h"ps://github.com/nebula4plugins/gradle4ospackage4
plugin
gradle'ospackage'plugin
apply plugin: 'nebula.ospackage'
ospackage {
installUtils file('scripts/utils.sh')
preInstall file('scripts/preInstall.sh')
postInstall file('scripts/postInstall.sh')
preUninstall 'touch /tmp/myfile'
postUninstall file('scripts/postUninstall.sh')
requires('qux')
into '/'
from 'root'
}
buildRpm {
requires('bar', '2.2', GREATER | EQUAL)
requires('baz', '1.0.1', LESS)
link('/etc/init.d/foo’, '/opt/foo/bin/foo.init')
}
buildDeb {
requires('bat', '1.0.1')
link('/etc/init.d/foo', '/opt/foo/bin/foo.upstart')
}
nebula'ospackage'plugin
h"ps://github.com/nebula4plugins/nebula4ospackage4
plugin
nebula'ospackage'plugin
• nebula.nebula-ospackage-daemon"#"Setup"
daemontools"in"a"system"package
• nebula.nebula-ospackage-application"#"
Put"contents"of"applica7on"zip"into"/opt/
$applica7onName
• nebula.nebula-ospackage-application-
daemon"#"Combine"the"above,"auto"setup"
daemontools"script"for"the"applica7on"plugin"
output
gradle'dependency'lock'
plugin
h"ps://github.com/nebula4plugins/gradle4
dependency4lock4plugin
gradle'dependency'lock'plugin
plugins {
id 'nebula.dependency-lock' version '3.0.0'
id 'groovy'
}
repositories { jcenter() }
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.+'
compile 'com.google.guava:guava:latest.release'
testCompile 'junit:junit:[4.0, 5.0)'
}
gradle'dependency'lock'plugin
./gradlew generateLock saveLock
{
"com.google.guava:guava": { "locked": "19.0-rc1", "requested": "latest.release" },
"junit:junit": { "locked": "4.12", "requested": "[4.0, 5.0)" },
"org.codehaus.groovy:groovy-all": { "locked": "2.4.4", "requested": "2.+" }
}
gradle'dependency'lock'plugin
plugins {
id 'nebula.dependency-lock' version '3.0.0'
id 'groovy'
}
dependencyLock {
includeTransitives = true
}
repositories { jcenter() }
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.+'
compile 'com.google.guava:guava:latest.release'
testCompile 'junit:junit:[4.0, 5.0)'
}
gradle'dependency'lock'plugin
./gradlew generateLock saveLock
{
"com.google.guava:guava": { "locked": "19.0-rc1", "requested": "latest.release" },
"junit:junit": { "locked": "4.12", "requested": "[4.0, 5.0)" },
"org.codehaus.groovy:groovy-all": { "locked": "2.4.4", "requested": "2.+" },
"org.hamcrest:hamcrest-core": { "locked": "1.3", "transitive": [ "junit:junit" ] }
}
gradle'extra'configura/ons'
plugin
h"ps://github.com/nebula4plugins/gradle4extra4
configura9ons4plugin
gradle'extra'configura/ons'plugin
apply plugin: 'nebula.provided-base'
dependencies {
provided 'example:providedlib:42.1.2'
}
// ------------------
apply plugin: 'nebula.optional-base'
dependencies {
compile 'example:optionallib:2.3.4', optional
}
nebula'publishing'plugin
h"ps://github.com/nebula4plugins/nebula4publishing4
plugin
nebula'publishing'plugin
• nebula.javadoc.jar
• nebula.source.jar
• nebula.test.jar
nebula'publishing'plugin
• nebula.maven+apache+license.proper3es
• nebula.maven+manifest.proper3es
• nebula.maven+base+publish.proper3es
• nebula.maven+dependencies.proper3es
• nebula.maven+resolved.proper3es
• nebula.maven+scm.proper3es
nebula'publishing'plugin
nebula.maven*publishing/nebula.ivy*publishing
• resolve(dynamic(versions(to(specific
• dependencies(for(war
• add(licenses
• add(manifest/informa6onal(proper6es
nebula'publishing'plugin
<name>gradle-dependency-lock-plugin</name>
<description>Gradle plugin to allow locking of dynamic dependency versions</description>
<properties>
<nebula_Manifest_Version>1.0</nebula_Manifest_Version>
<nebula_Implementation_Title>com.netflix.nebula#gradle-dependency-lock-plugin;2.2.3</nebula_Implementation_Title>
<nebula_Implementation_Version>2.2.3</nebula_Implementation_Version>
<nebula_Built_By>jenkins</nebula_Built_By>
<nebula_Build_Date>2015-04-02_10:02:13</nebula_Build_Date>
<nebula_Gradle_Version>2.2.1</nebula_Gradle_Version>
<nebula_Module_Origin>git@github.com:nebula-plugins/gradle-dependency-lock-plugin.git</nebula_Module_Origin>
<nebula_Change>f91b5ad</nebula_Change>
<nebula_Build_Id>2015-04-02_16-59-13</nebula_Build_Id>
<nebula_Created_By>1.7.0_60-b19 (Oracle Corporation)</nebula_Created_By>
<nebula_Build_Java_Version>1.7.0_60</nebula_Build_Java_Version>
<nebula_X_Compile_Target_JDK>1.7</nebula_X_Compile_Target_JDK>
<nebula_X_Compile_Source_JDK>1.7</nebula_X_Compile_Source_JDK>
</properties>
<scm>
<url>git@github.com:nebula-plugins/gradle-dependency-lock-plugin.git</url>
<connection>scm:git@github.com:nebula-plugins/gradle-dependency-lock-plugin.git</connection>
</scm>
<developers>
<developer>
<id>exampleuser</id>
<name>Example User</name>
<email>example@example.email</email>
</developer>
</developers>
gradle'metrics'plugin
h"ps://github.com/nebula4plugins/gradle4metrics4
plugin
gradle'metrics'plugin
• Stopped(development(in(favor(of(gradle.com
• Ela5csearch(index(of(each(build
• Info(<(Gradle(start(parameters,(system(proper5es(
and(environment(variables.(SCM(and(GIT(
informa5on(if(the(gradle<info<plugin(has(been(
applied
• Project(<(name(and(version
• Events(<(configura5on,(dependency(resolu5on,(
task(execu5on
gradle'override'plugin
h"ps://github.com/nebula4plugins/gradle4override4
plugin
gradle'override'plugin
apply plugin: 'nebula.nebula-override'
class MyExtension {
String myProp
}
example {
myProp = 'hello'
}
$ ./gradlew -Doverride.example.myProb=newValue <task>
$ ./gradlew -Doverride.sourceCompatibility=1.7 <task>
gradle'blacklist'plugin
h"ps://github.com/nebula4plugins/gradle4blacklist4
plugin
gradle'blacklist'plugin
blacklist {
translate {
map 'nebula', 'com.netflix.nebula'
map 'commons-lang:commons-lang:2.6', 'org.apache.commons:commons-lang3:3.3.2'
}
flag {
block 'org.foo:bar:3.4'
warn group: 'com.company', name: 'baz', version: '1.2'
}
}
Other&Plugins
• gradle(dependency(recommender(plugin
• nebula(clojure(plugin
• nebula(bintray(plugin
• gradle(stash(plugin
• gradle(contacts(plugin
• gradle(scm(plugin
• gradle(git(scm(plugin
Ques%ons
Ne#lix'is'Hiring
• Build'Tools'+'Full'Stack'Engineer
• h8ps://jobs.ne?lix.com/

Más contenido relacionado

La actualidad más candente

Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new build
Igor Khotin
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
James Williams
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
Gr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem RevisitedGr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem Revisited
Andres Almiray
 

La actualidad más candente (20)

Intro to Git for Drupal 7
Intro to Git for Drupal 7Intro to Git for Drupal 7
Intro to Git for Drupal 7
 
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
 
Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new build
 
Groovy in the Cloud
Groovy in the CloudGroovy in the Cloud
Groovy in the Cloud
 
High Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootHigh Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring Boot
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
 
Puppeteerのお話
Puppeteerのお話Puppeteerのお話
Puppeteerのお話
 
Desarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y AzureDesarrollo web backend: Spring Boot, MongoDB y Azure
Desarrollo web backend: Spring Boot, MongoDB y Azure
 
Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)Использование Docker в CI / Александр Акбашев (HERE Technologies)
Использование Docker в CI / Александр Акбашев (HERE Technologies)
 
Dockercon EU 2014
Dockercon EU 2014Dockercon EU 2014
Dockercon EU 2014
 
CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
 
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker imagesRootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
RootedCON 2017 - Docker might not be your friend. Trojanizing Docker images
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
FOSDEM 2017: GitLab CI
FOSDEM 2017:  GitLab CIFOSDEM 2017:  GitLab CI
FOSDEM 2017: GitLab CI
 
Gr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem RevisitedGr8conf - The Groovy Ecosystem Revisited
Gr8conf - The Groovy Ecosystem Revisited
 
GitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLabGitFlow, SourceTree and GitLab
GitFlow, SourceTree and GitLab
 
Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015Import golang; struct microservice - Codemotion Rome 2015
Import golang; struct microservice - Codemotion Rome 2015
 

Destacado

Assignment 3 Resubmit SD
Assignment 3 Resubmit SDAssignment 3 Resubmit SD
Assignment 3 Resubmit SD
Sarah Dixon
 

Destacado (11)

Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
 
Assignment 3 Resubmit SD
Assignment 3 Resubmit SDAssignment 3 Resubmit SD
Assignment 3 Resubmit SD
 
3
33
3
 
Presentació jornada entre iguals 18des
Presentació jornada entre iguals 18desPresentació jornada entre iguals 18des
Presentació jornada entre iguals 18des
 
CONOCIMIENTOS BASICOS DEL FUTBOL
CONOCIMIENTOS BASICOS DEL FUTBOLCONOCIMIENTOS BASICOS DEL FUTBOL
CONOCIMIENTOS BASICOS DEL FUTBOL
 
Online Teaching Best Practices
Online Teaching Best PracticesOnline Teaching Best Practices
Online Teaching Best Practices
 
Catch up
Catch upCatch up
Catch up
 
Web Analytics - WebTrends
Web Analytics - WebTrendsWeb Analytics - WebTrends
Web Analytics - WebTrends
 
Relaciones internacionales de la Gran Colombia
Relaciones internacionales de la Gran ColombiaRelaciones internacionales de la Gran Colombia
Relaciones internacionales de la Gran Colombia
 
Market and promotion
Market and promotionMarket and promotion
Market and promotion
 
Agile Economics: Budgets, Contracts, Capitalization
Agile Economics: Budgets, Contracts, CapitalizationAgile Economics: Budgets, Contracts, Capitalization
Agile Economics: Budgets, Contracts, Capitalization
 

Similar a Nebula: Netflix's OSS Gradle Plugins

10 Cool Facts about Gradle
10 Cool Facts about Gradle10 Cool Facts about Gradle
10 Cool Facts about Gradle
Evgeny Goldin
 

Similar a Nebula: Netflix's OSS Gradle Plugins (20)

Gradle
GradleGradle
Gradle
 
Gradle plugins, take it to the next level
Gradle plugins, take it to the next levelGradle plugins, take it to the next level
Gradle plugins, take it to the next level
 
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
 
Continuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPContinuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCP
 
ASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & dockerASP.NET 5 auf Raspberry PI & docker
ASP.NET 5 auf Raspberry PI & docker
 
Gdg cloud taipei ddt meetup #53 buildpack
Gdg cloud taipei ddt meetup #53 buildpackGdg cloud taipei ddt meetup #53 buildpack
Gdg cloud taipei ddt meetup #53 buildpack
 
Development Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP LibrariesDevelopment Workflow Tools for Open-Source PHP Libraries
Development Workflow Tools for Open-Source PHP Libraries
 
Gradle - Build system evolved
Gradle - Build system evolvedGradle - Build system evolved
Gradle - Build system evolved
 
Gradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 versionGradle in 45min - JBCN2-16 version
Gradle in 45min - JBCN2-16 version
 
GIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APPGIT, RVM, FIRST HEROKU APP
GIT, RVM, FIRST HEROKU APP
 
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginMastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
 
How to Build & Use OpenCL on OpenCV & Android NDK
How to Build & Use OpenCL on OpenCV & Android NDKHow to Build & Use OpenCL on OpenCV & Android NDK
How to Build & Use OpenCL on OpenCV & Android NDK
 
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshotsEclipse Buildship DemoCamp Hamburg (June 2015)  with additional screenshots
Eclipse Buildship DemoCamp Hamburg (June 2015) with additional screenshots
 
Gradle in 45min
Gradle in 45minGradle in 45min
Gradle in 45min
 
GitLab on OpenShift
GitLab on OpenShiftGitLab on OpenShift
GitLab on OpenShift
 
Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overview
 
SydJS.com
SydJS.comSydJS.com
SydJS.com
 
Job DSL Plugin for Jenkins
Job DSL Plugin for JenkinsJob DSL Plugin for Jenkins
Job DSL Plugin for Jenkins
 
Gradle how to's
Gradle how to'sGradle how to's
Gradle how to's
 

Último

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 

Último (20)

WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
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
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
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 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%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
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
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
 

Nebula: Netflix's OSS Gradle Plugins