Skip to content

Commit

Permalink
Setup logic to publish the Godot Android library to MavenCentral
Browse files Browse the repository at this point in the history
  • Loading branch information
m4gr3d committed Mar 14, 2022
1 parent 95b6c6c commit a2bf47d
Show file tree
Hide file tree
Showing 5 changed files with 146 additions and 3 deletions.
15 changes: 12 additions & 3 deletions platform/android/java/app/config.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ext.versions = [
minSdk : 19, // Also update 'platform/android/java/lib/AndroidManifest.xml#minSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_MIN_SDK_VERSION'
targetSdk : 30, // Also update 'platform/android/java/lib/AndroidManifest.xml#targetSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION'
buildTools : '30.0.3',
kotlinVersion : '1.5.10',
kotlinVersion : '1.6.10',
fragmentVersion : '1.3.6',
javaVersion : 11,
ndkVersion : '21.4.7075529' // Also update 'platform/android/detect.py#get_project_ndk_version()' when this is updated.
Expand Down Expand Up @@ -86,13 +86,12 @@ ext.getGodotEditorVersion = { ->
return editorVersion
}

ext.getGodotLibraryVersion = { ->
ext.generateGodotLibraryVersion = { List<String> requiredKeys ->
// Attempt to read the version from the `version.py` file.
String libraryVersion = ""

File versionFile = new File("../../../version.py")
if (versionFile.isFile()) {
List<String> requiredKeys = ["major", "minor", "patch", "status", "module_config"]
def map = [:]

List<String> lines = versionFile.readLines()
Expand Down Expand Up @@ -121,6 +120,16 @@ ext.getGodotLibraryVersion = { ->
return libraryVersion
}

ext.getGodotLibraryVersion = { ->
List<String> requiredKeys = ["major", "minor", "patch", "status", "module_config"]
return generateGodotLibraryVersion(requiredKeys)
}

ext.getGodotPublishVersion = { ->
List<String> requiredKeys = ["major", "minor", "patch", "status"]
return generateGodotLibraryVersion(requiredKeys)
}

final String VALUE_SEPARATOR_REGEX = "\\|"

// get the list of ABIs the project should be exported to
Expand Down
4 changes: 4 additions & 0 deletions platform/android/java/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
apply plugin: 'io.github.gradle-nexus.publish-plugin'
apply from: 'app/config.gradle'
apply from: 'scripts/publish-root.gradle'

buildscript {
apply from: 'app/config.gradle'

repositories {
google()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath libraries.androidGradlePlugin
classpath libraries.kotlinGradlePlugin
classpath 'io.github.gradle-nexus:publish-plugin:1.1.0'
}
}

Expand Down
17 changes: 17 additions & 0 deletions platform/android/java/lib/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'

ext {
PUBLISH_VERSION = getGodotPublishVersion()
PUBLISH_ARTIFACT_ID = 'godot'
}

apply from: "../scripts/publish-module.gradle"

dependencies {
implementation libraries.kotlinStdLib
implementation libraries.androidxFragment
Expand All @@ -21,6 +28,8 @@ android {
manifestPlaceholders = [godotLibraryVersion: getGodotLibraryVersion()]
}

namespace = "org.godotengine.godot"

compileOptions {
sourceCompatibility versions.javaVersion
targetCompatibility versions.javaVersion
Expand Down Expand Up @@ -111,4 +120,12 @@ android {
// Schedule the tasks so the generated libs are present before the aar file is packaged.
tasks["merge${buildType}JniLibFolders"].dependsOn taskName
}

// TODO: Enable when issues with AGP 7.1+ are resolved (https://github.com/GodotVR/godot_openxr/issues/187).
// publishing {
// singleVariant("release") {
// withSourcesJar()
// withJavadocJar()
// }
// }
}
74 changes: 74 additions & 0 deletions platform/android/java/scripts/publish-module.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
apply plugin: 'maven-publish'
apply plugin: 'signing'

group = ossrhGroupId
version = PUBLISH_VERSION

afterEvaluate {
publishing {
publications {
release(MavenPublication) {
// The coordinates of the library, being set from variables that
// we'll set up later
groupId ossrhGroupId
artifactId PUBLISH_ARTIFACT_ID
version PUBLISH_VERSION

// Two artifacts, the `aar` (or `jar`) and the sources
if (project.plugins.findPlugin("com.android.library")) {
from components.release
} else {
from components.java
}

// Mostly self-explanatory metadata
pom {
name = PUBLISH_ARTIFACT_ID
description = 'Godot Engine Android Library'
url = 'https://godotengine.org/'
licenses {
license {
name = 'MIT License'
url = 'https://github.com/godotengine/godot/blob/master/LICENSE.txt'
}
}
developers {
developer {
id = 'm4gr3d'
name = 'Fredia Huya-Kouadio'
email = 'fhuyakou@gmail.com'
}
developer {
id = 'reduz'
name = 'Juan Linietsky'
email = 'reduzio@gmail.com'
}
developer {
id = 'akien-mga'
name = 'Rémi Verschelde'
email = 'rverschelde@gmail.com'
}
// Add all other devs here...
}

// Version control info - if you're using GitHub, follow the
// format as seen here
scm {
connection = 'scm:git:github.com/godotengine/godot.git'
developerConnection = 'scm:git:ssh://github.com/godotengine/godot.git'
url = 'https://github.com/godotengine/godot/tree/master'
}
}
}
}
}
}

signing {
useInMemoryPgpKeys(
rootProject.ext["signing.keyId"],
rootProject.ext["signing.key"],
rootProject.ext["signing.password"],
)
sign publishing.publications
}
39 changes: 39 additions & 0 deletions platform/android/java/scripts/publish-root.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Create variables with empty default values
ext["signing.keyId"] = ''
ext["signing.password"] = ''
ext["signing.key"] = ''
ext["ossrhGroupId"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
ext["sonatypeStagingProfileId"] = ''

File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
// Read local.properties file first if it exists
Properties p = new Properties()
new FileInputStream(secretPropsFile).withCloseable { is -> p.load(is) }
p.each { name, value -> ext[name] = value }
} else {
// Use system environment variables
ext["ossrhGroupId"] = System.getenv('OSSRH_GROUP_ID')
ext["ossrhUsername"] = System.getenv('OSSRH_USERNAME')
ext["ossrhPassword"] = System.getenv('OSSRH_PASSWORD')
ext["sonatypeStagingProfileId"] = System.getenv('SONATYPE_STAGING_PROFILE_ID')
ext["signing.keyId"] = System.getenv('SIGNING_KEY_ID')
ext["signing.password"] = System.getenv('SIGNING_PASSWORD')
ext["signing.key"] = System.getenv('SIGNING_KEY')
}

// Set up Sonatype repository
nexusPublishing {
repositories {
sonatype {
stagingProfileId = sonatypeStagingProfileId
username = ossrhUsername
password = ossrhPassword
nexusUrl.set(uri("https://s01.oss.sonatype.org/service/local/"))
snapshotRepositoryUrl.set(uri("https://s01.oss.sonatype.org/content/repositories/snapshots/"))
}
}
}

0 comments on commit a2bf47d

Please sign in to comment.