Skip to content

Commit 8a7c8fb

Browse files
authored
chore: migrate upload repository to maven-central from jcenter (#364)
1 parent 219200f commit 8a7c8fb

File tree

8 files changed

+180
-308
lines changed

8 files changed

+180
-308
lines changed

.travis.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ before_script:
4747
script:
4848
- ./gradlew cleanAllModules
4949
- ./gradlew testAllModulesTravis
50-
- if [[ -n $TRAVIS_TAG ]]; then ./gradlew ship; fi
5150

5251
# Integration tests need to run first to reset the PR build status to pending
5352
stages:
5453
- 'Source Clear'
5554
- 'Lint markdown files'
5655
- 'Integration tests'
5756
- 'Test'
57+
- 'Publish'
5858

5959
jobs:
6060
include:
@@ -94,3 +94,10 @@ jobs:
9494
script: skip
9595
after_script: skip
9696
after_success: skip
97+
98+
- stage: 'Publish'
99+
if: tag IS present
100+
script:
101+
- ./gradlew ship
102+
after_script: skip
103+
after_success: skip

android-sdk/build.gradle

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@
1717
apply plugin: 'com.android.library'
1818
apply plugin: 'kotlin-android'
1919
apply plugin: 'kotlin-android-extensions'
20-
apply plugin: 'maven'
21-
apply plugin: 'maven-publish'
22-
23-
version = version_name
24-
group = group_id
2520

2621
android {
2722
compileSdkVersion compile_sdk_version
@@ -91,56 +86,4 @@ dependencies {
9186
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
9287
}
9388

94-
uploadArchives {
95-
dependsOn = [':android-sdk:releaseJavadocJar', ':android-sdk:releaseSourcesJar']
96-
shouldRunAfter = [':android-sdk:clean', ':datafile-handler:uploadArchives', ':event-handler:uploadArchives', ':user-profile:uploadArchives']
97-
repositories {
98-
mavenDeployer {
99-
repository(url: "https://api.bintray.com/maven/optimizely/optimizely/optimizely-sdk-android") {
100-
authentication(userName: bintray_user, password: bintray_api_key)
101-
}
102-
pom.artifactId = "android-sdk"
103-
}
104-
}
105-
}
106-
107-
android.libraryVariants.all { variant ->
108-
task("${variant.name}Javadoc", type: Javadoc, dependsOn: "assemble${variant.name.capitalize()}") {
109-
source = variant.javaCompile.source
110-
111-
title = "Optimizely X Android SDK"
112-
113-
options.links("http://docs.oracle.com/javase/8/docs/api/");
114-
options.linksOffline("http://d.android.com/reference", "${android.sdkDirectory}/docs/reference");
115-
116-
doFirst {
117-
// First add all of your dependencies to the classpath, then add the android jars
118-
classpath += files(variant.javaCompileProvider.get().classpath.files)
119-
classpath += files(android.getBootClasspath())
120-
}
121-
// We're excluding these generated files
122-
exclude '**/BuildConfig.java'
123-
exclude '**/R.java'
124-
125-
options.tags = ["hide"]
126-
}
127-
}
128-
129-
android.libraryVariants.all { variant ->
130-
task("${variant.name}JavadocJar", type: Jar, dependsOn: "${variant.name}Javadoc") {
131-
classifier = 'javadoc'
132-
from tasks["${variant.name}Javadoc"].destinationDir
133-
}
134-
135-
// Add the Javadoc jar to the project's artifacts. This will allow us to upload it easily later
136-
project.artifacts.add("archives", tasks["${variant.name}JavadocJar"]);
137-
}
138-
139-
android.libraryVariants.all { variant ->
140-
task("${variant.name}SourcesJar", type: Jar) {
141-
classifier = 'sources'
142-
from variant.javaCompile.source
143-
}
144-
project.artifacts.add("archives", tasks["${variant.name}SourcesJar"]);
145-
}
14689

build.gradle

Lines changed: 171 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,11 @@
1818

1919
buildscript {
2020
ext.kotlin_version = '1.4.0'
21-
def bintray_user = System.getenv('BINTRAY_USER')
22-
def bintray_api_key = System.getenv('BINTRAY_API_KEY')
21+
2322
def version_name = System.getenv('TRAVIS_TAG')
24-
if (bintray_user != null && bintray_api_key != null && version_name != null) {
25-
rootProject.ext.bintray_user = bintray_user
26-
rootProject.ext.bintray_api_key = bintray_api_key
23+
if (version_name != null) {
2724
rootProject.ext.version_name = version_name
2825
} else {
29-
rootProject.ext.bintray_user = ''
30-
rootProject.ext.bintray_api_key = ''
3126
rootProject.ext.version_name= 'debugVersion'
3227
}
3328
repositories {
@@ -58,7 +53,7 @@ ext {
5853
build_tools_version = "29.0.3"
5954
min_sdk_version = 14
6055
target_sdk_version = 29
61-
java_core_ver = "3.8.0"
56+
java_core_ver = "3.8.1"
6257
android_logger_ver = "1.3.6"
6358
jacksonversion= "2.11.2"
6459
annotations_ver = "1.0.0"
@@ -75,13 +70,7 @@ ext {
7570
}
7671

7772
task clean(type: Delete) {
78-
delete rootProject.buildDir
79-
}
80-
81-
task ship() {
82-
dependsOn(':android-sdk:uploadArchives', ':shared:uploadArchives',
83-
'event-handler:uploadArchives', 'user-profile:uploadArchives',
84-
'datafile-handler:uploadArchives')
73+
dependsOn('cleanAllModules')
8574
}
8675

8776
task cleanAllModules () {
@@ -105,3 +94,170 @@ testAllModulesTravis.dependsOn(':android-sdk:connectedAndroidTest', ':android-sd
10594
':user-profile:connectedAndroidTest', ':shared:connectedAndroidTest')
10695

10796
testAllModules.dependsOn('testAllModulesTravis', ':test-app:connectedAndroidTest')
97+
98+
// Publish to MavenCentral
99+
100+
task ship() {
101+
dependsOn(':android-sdk:ship', ':shared:ship', ':event-handler:ship', ':user-profile:ship', ':datafile-handler:ship')
102+
}
103+
104+
def publishedProjects = subprojects.findAll { it.name != 'test-app' }
105+
configure(publishedProjects) {
106+
apply plugin: 'com.android.library'
107+
apply plugin: 'kotlin-android'
108+
apply plugin: 'kotlin-android-extensions'
109+
apply plugin: 'maven-publish'
110+
apply plugin: 'signing'
111+
112+
def artifactName = "android-sdk"
113+
def docTitle = "Optimizely Android SDK"
114+
switch(name){
115+
case 'android-sdk':
116+
artifactName = 'android-sdk'
117+
docTitle = 'Optimizely Android SDK'
118+
break
119+
case 'datafile-handler':
120+
artifactName = 'android-sdk-datafile-handler'
121+
docTitle = 'Optimizely Android SDK: Datafile Handler'
122+
break
123+
case 'event-handler':
124+
artifactName = 'android-sdk-event-handler'
125+
docTitle = 'Optimizely Android SDK: Event Handler'
126+
break
127+
case 'shared':
128+
artifactName = 'android-sdk-shared'
129+
docTitle = 'Optimizely Android SDK: Shared'
130+
break
131+
case 'user-profile':
132+
artifactName = 'android-sdk-user-profile'
133+
docTitle = 'Optimizely X Android SDK: User Profile'
134+
break
135+
default:
136+
return
137+
}
138+
139+
android.libraryVariants.all { variant ->
140+
task("${variant.name}Javadoc", type: Javadoc, dependsOn: "assemble${variant.name.capitalize()}") {
141+
source = variant.javaCompile.source
142+
143+
title = docTitle
144+
145+
options.links("http://docs.oracle.com/javase/7/docs/api/");
146+
147+
// First add all of your dependencies to the classpath, then add the android jars
148+
doFirst {
149+
classpath += files(variant.javaCompileProvider.get().classpath.files)
150+
classpath += files(android.getBootClasspath())
151+
}
152+
// We're excluding these generated files
153+
exclude '**/BuildConfig.java'
154+
exclude '**/R.java'
155+
156+
options.tags = ["hide"]
157+
}
158+
}
159+
160+
android.libraryVariants.all { variant ->
161+
task("${variant.name}JavadocJar", type: Jar, dependsOn: "${variant.name}Javadoc") {
162+
classifier = 'javadoc'
163+
from tasks["${variant.name}Javadoc"].destinationDir
164+
}
165+
166+
// Add the Javadoc jar to the project's artifacts. This will allow us to upload it easily later
167+
project.artifacts.add("archives", tasks["${variant.name}JavadocJar"]);
168+
}
169+
170+
android.libraryVariants.all { variant ->
171+
task("${variant.name}SourcesJar", type: Jar) {
172+
classifier = 'sources'
173+
from variant.javaCompile.source
174+
}
175+
project.artifacts.add("archives", tasks["${variant.name}SourcesJar"]);
176+
}
177+
178+
afterEvaluate {
179+
publishing {
180+
publications {
181+
release(MavenPublication) {
182+
version = version_name
183+
group = group_id
184+
artifactId = artifactName
185+
186+
customizePom(pom, docTitle)
187+
// "description" is required by MavenCentral but it does not work in customizePom(). added here explicitly.
188+
pom.description = 'The Android SDK for Optimizely Full Stack (feature flag management for product development teams)'
189+
190+
from components.release
191+
artifact releaseSourcesJar
192+
artifact releaseJavadocJar
193+
}
194+
}
195+
repositories {
196+
maven {
197+
url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
198+
credentials {
199+
username System.getenv('MAVEN_CENTRAL_USERNAME')
200+
password System.getenv('MAVEN_CENTRAL_PASSWORD')
201+
}
202+
}
203+
}
204+
}
205+
206+
signing {
207+
// base64 for workaround travis escape chars issue
208+
def signingKeyBase64 = System.getenv('MAVEN_SIGNING_KEY_BASE64')
209+
// skip signing for "local" version into MavenLocal
210+
if (!signingKeyBase64?.trim()) return
211+
byte[] decoded = signingKeyBase64.decodeBase64()
212+
def signingKey = new String(decoded)
213+
214+
def signingPassword = System.getenv('MAVEN_SIGNING_PASSPHRASE')
215+
useInMemoryPgpKeys(signingKey, signingPassword)
216+
sign publishing.publications.release
217+
}
218+
}
219+
220+
task ship() {
221+
dependsOn('publish')
222+
}
223+
}
224+
225+
project(':android-sdk').ship.shouldRunAfter = [':android-sdk:clean', ':datafile-handler:ship', ':event-handler:ship', ':user-profile:ship']
226+
project(':datafile-handler').ship.shouldRunAfter = [':datafile-handler:clean', ':shared:ship']
227+
project(':event-handler').ship.shouldRunAfter = [':event-handler:clean', ':shared:ship']
228+
project(':shared').ship.shouldRunAfter = [':shared:clean']
229+
project(':user-profile').ship.shouldRunAfter = [':user-profile:clean', ':shared:ship']
230+
231+
// standard POM format required by MavenCentral
232+
233+
def customizePom(pom, title) {
234+
pom.withXml {
235+
asNode().children().last() + {
236+
// keep this - otherwise some properties are not made into pom properly
237+
resolveStrategy = Closure.DELEGATE_FIRST
238+
239+
name title
240+
url 'https://github.com/optimizely/android-sdk'
241+
licenses {
242+
license {
243+
name 'The Apache Software License, Version 2.0'
244+
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
245+
distribution 'repo'
246+
}
247+
}
248+
developers {
249+
developer {
250+
id 'optimizely'
251+
name 'Optimizely'
252+
253+
}
254+
}
255+
scm {
256+
connection 'scm:git:git://github.com/optimizely/android-sdk.git'
257+
developerConnection 'scm:git:ssh:github.com/optimizely/android-sdk.git'
258+
url 'https://github.com/optimizely/android-sdk.git'
259+
}
260+
}
261+
}
262+
}
263+

datafile-handler/build.gradle

Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@
1717
apply plugin: 'com.android.library'
1818
apply plugin: 'kotlin-android'
1919
apply plugin: 'kotlin-android-extensions'
20-
apply plugin: 'maven'
21-
apply plugin: 'maven-publish'
22-
23-
version = version_name
24-
group = group_id
2520

2621
android {
2722
compileSdkVersion compile_sdk_version
@@ -78,57 +73,3 @@ dependencies {
7873
androidTestImplementation "com.fasterxml.jackson.core:jackson-databind:$jacksonversion"
7974
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
8075
}
81-
82-
uploadArchives {
83-
dependsOn = [':datafile-handler:releaseJavadocJar', ':datafile-handler:releaseSourcesJar']
84-
shouldRunAfter = [':datafile-handler:clean', ':shared:uploadArchives']
85-
repositories {
86-
mavenDeployer {
87-
repository(url: "https://api.bintray.com/maven/optimizely/optimizely/optimizely-sdk-android-datafile-handler") {
88-
authentication(userName: bintray_user, password: bintray_api_key)
89-
}
90-
pom.artifactId = "android-sdk-datafile-handler"
91-
}
92-
}
93-
}
94-
95-
android.libraryVariants.all { variant ->
96-
task("${variant.name}Javadoc", type: Javadoc, dependsOn: "assemble${variant.name.capitalize()}") {
97-
source = variant.javaCompile.source
98-
99-
title = "Optimizely X Android Datafile Handler"
100-
101-
options.links("http://docs.oracle.com/javase/8/docs/api/");
102-
options.linksOffline("http://d.android.com/reference", "${android.sdkDirectory}/docs/reference");
103-
104-
// First add all of your dependencies to the classpath, then add the android jars
105-
doFirst {
106-
classpath += files(variant.javaCompileProvider.get().classpath.files)
107-
classpath += files(android.getBootClasspath())
108-
}
109-
// We're excluding these generated files
110-
exclude '**/BuildConfig.java'
111-
exclude '**/R.java'
112-
113-
options.tags = ["hide"]
114-
}
115-
}
116-
117-
android.libraryVariants.all { variant ->
118-
task("${variant.name}JavadocJar", type: Jar, dependsOn: "${variant.name}Javadoc") {
119-
classifier = 'javadoc'
120-
from tasks["${variant.name}Javadoc"].destinationDir
121-
}
122-
123-
// Add the Javadoc jar to the project's artifacts. This will allow us to upload it easily later
124-
project.artifacts.add("archives", tasks["${variant.name}JavadocJar"]);
125-
}
126-
127-
android.libraryVariants.all { variant ->
128-
task("${variant.name}SourcesJar", type: Jar) {
129-
classifier = 'sources'
130-
from variant.javaCompile.source
131-
}
132-
project.artifacts.add("archives", tasks["${variant.name}SourcesJar"]);
133-
}
134-

0 commit comments

Comments
 (0)