Skip to content

Commit

Permalink
Adding Keyple Gradle Plugin
Browse files Browse the repository at this point in the history
Signed-off-by: Brice Ruppen <brice.ruppen@armotic.fr>
  • Loading branch information
brice-ruppen committed Feb 13, 2020
1 parent 3e4bf96 commit b198904
Show file tree
Hide file tree
Showing 20 changed files with 697 additions and 31 deletions.
3 changes: 3 additions & 0 deletions .gitignore
@@ -0,0 +1,3 @@
.gradle
.idea
java/keyple-gradle/build
44 changes: 44 additions & 0 deletions Jenkinsfile
@@ -0,0 +1,44 @@
#!groovy
@Library('java-builder') _
pipeline {
agent {
kubernetes {
label 'keyple-gradle'
yaml javaBuilder('1')
}
}
stages {
stage('Keyple Gradle Plugin: Build and test') {
steps{
container('java-builder') {
configFileProvider(
[configFile(
fileId: 'gradle.properties',
targetLocation: '/home/jenkins/agent/gradle.properties')]) {
sh 'ln -s /home/jenkins/agent/gradle.properties /home/jenkins/.gradle/gradle.properties'
dir('java/keyple-gradle') {
sh './gradlew clean build test'
}
}
}
}
}
stage('Keyple Gradle Plugin: Upload to sonatype') {
when {
expression { env.GIT_URL == 'https://github.com/eclipse/keyple-ops.git' && env.GIT_BRANCH == "master" }
}
steps{
container('java-builder') {
configFileProvider(
[configFile(
fileId: 'gradle.properties',
targetLocation: '/home/jenkins/agent/gradle.properties')]) {
dir('java/keyple-gradle') {
sh './gradlew uploadArchives'
}
}
}
}
}
}
}
5 changes: 4 additions & 1 deletion java/docker/java-builder/Dockerfile
Expand Up @@ -11,7 +11,7 @@ RUN apt-get update \
&& gpg1 --version

# Gradle installation
ARG GRADLE_VERSION="4.5.1"
ARG GRADLE_VERSION="5.6.4"
ENV GRADLE_HOME="/opt/gradle/gradle-${GRADLE_VERSION}"
ENV JAVA_OPTS="-Xmx1800m -XX:MaxPermSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError"
RUN mkdir -p "/opt/gradle" \
Expand Down Expand Up @@ -87,7 +87,10 @@ RUN umask g+w \
RUN umask g+w \
&& git clone "https://github.com/eclipse/keyple-java.git" \
&& cd "keyple-java" \
&& gradle wrapper --gradle-version 5.6.4 \
&& ./gradlew -version \
&& gradle wrapper --gradle-version 4.5.1 \
&& ./gradlew -version \
&& set -x \
&& ./gradlew :java:component:keyple-core:uploadArchives --info \
&& ./gradlew :java:component:keyple-calypso:uploadArchives --info \
Expand Down
26 changes: 13 additions & 13 deletions java/jenkins/snapshot/keyple-java.JenkinsFile
Expand Up @@ -72,28 +72,28 @@ pipeline {

/* Compile project */
//build and install keyple-core locally
sh 'gradle :java:component:keyple-core:uploadArchives --info'
sh 'gradle :java:component:keyple-calypso:uploadArchives --info'
sh './gradlew :java:component:keyple-core:uploadArchives --info'
sh './gradlew :java:component:keyple-calypso:uploadArchives --info'

//build and install android plugins locally
sh 'gradle -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-nfc:uploadArchives --info'
sh 'gradle -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-omapi:uploadArchives --info'
sh './gradlew -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-nfc:uploadArchives --info'
sh './gradlew -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-omapi:uploadArchives --info'


/* Read key Id in gradle.properties */
sh 'head -1 ${GRADLE_USER_HOME}/gradle.properties'


// /* Sign and Upload Jars */
sh 'gradle :java:component:keyple-core:uploadArchives ${uploadParams}'
sh 'gradle :java:component:keyple-calypso:uploadArchives ${uploadParams}'
sh 'gradle :java:component:keyple-plugin:keyple-plugin-pcsc:uploadArchives ${uploadParams}'
sh 'gradle :java:component:keyple-plugin:keyple-plugin-remotese:uploadArchives ${uploadParams}'
sh 'gradle :java:component:keyple-plugin:keyple-plugin-stub:uploadArchives ${uploadParams}'
sh './gradlew :java:component:keyple-core:uploadArchives ${uploadParams}'
sh './gradlew :java:component:keyple-calypso:uploadArchives ${uploadParams}'
sh './gradlew :java:component:keyple-plugin:keyple-plugin-pcsc:uploadArchives ${uploadParams}'
sh './gradlew :java:component:keyple-plugin:keyple-plugin-remotese:uploadArchives ${uploadParams}'
sh './gradlew :java:component:keyple-plugin:keyple-plugin-stub:uploadArchives ${uploadParams}'

// /* Sign and Upload Aars */
sh 'gradle -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-nfc:uploadArchives ${uploadParams}'
sh 'gradle -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-omapi:uploadArchives ${uploadParams}'
sh './gradlew -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-nfc:uploadArchives ${uploadParams}'
sh './gradlew -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-omapi:uploadArchives ${uploadParams}'
}
}
}
Expand All @@ -109,8 +109,8 @@ pipeline {
sh 'mkdir -p "./java/example/calypso/android/omapi/?/.android/"'
sh 'keytool -genkey -v -keystore ./java/example/calypso/android/nfc/?/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"'
sh 'keytool -genkey -v -keystore ./java/example/calypso/android/omapi/?/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"'
sh 'gradle -b ./java/example/calypso/android/nfc/build.gradle assembleDebug'
sh 'gradle -b ./java/example/calypso/android/omapi/build.gradle assembleDebug'
sh './gradlew -b ./java/example/calypso/android/nfc/build.gradle assembleDebug'
sh './gradlew -b ./java/example/calypso/android/omapi/build.gradle assembleDebug'
}
}
}
Expand Down
26 changes: 9 additions & 17 deletions java/jenkins/test/keyple-java.JenkinsFile
Expand Up @@ -9,30 +9,22 @@ pipeline {
}
}
stages {
stage('Prepare'){
steps{
container('java-builder') {
git url: 'https://github.com/eclipse/keyple-java.git',
branch: '${ghprbSourceBranch}'
}
}
}
stage('Execute tests') {
steps{
container('java-builder') {
sh 'gradle :java:component:keyple-core:uploadArchives --info'
sh 'gradle :java:component:keyple-calypso:uploadArchives --info'
sh 'gradle :java:component:keyple-plugin:keyple-plugin-pcsc:uploadArchives --info'
sh 'gradle :java:component:keyple-plugin:keyple-plugin-remotese:uploadArchives --info'
sh 'gradle :java:component:keyple-plugin:keyple-plugin-stub:uploadArchives --info'
sh 'gradle check --info'
sh './gradlew :java:component:keyple-core:uploadArchives --info'
sh './gradlew :java:component:keyple-calypso:uploadArchives --info'
sh './gradlew :java:component:keyple-plugin:keyple-plugin-pcsc:uploadArchives --info'
sh './gradlew :java:component:keyple-plugin:keyple-plugin-remotese:uploadArchives --info'
sh './gradlew :java:component:keyple-plugin:keyple-plugin-stub:uploadArchives --info'
sh './gradlew check --info'

//android
sh 'gradle -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-nfc:check'
sh 'gradle -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-omapi:check'
sh './gradlew -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-nfc:check'
sh './gradlew -b ./android/build.gradle :keyple-plugin:keyple-plugin-android-omapi:check'

//examples
sh 'gradle -b java/example/calypso/remotese/build.gradle check'
sh './gradlew -b java/example/calypso/remotese/build.gradle check'

}
}
Expand Down
141 changes: 141 additions & 0 deletions java/keyple-gradle/build.gradle.kts
@@ -0,0 +1,141 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.net.URL
import java.net.HttpURLConnection
import java.io.IOException

plugins {
maven
kotlin("jvm") version "1.3.61"
}

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61")
classpath("com.sun.istack:istack-commons-runtime:3.+")
}
}

dependencies {
implementation(gradleApi())
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61")
testImplementation("org.junit.jupiter:junit-jupiter:5.6.0")
testImplementation("com.sun.istack:istack-commons-runtime:3.+")
testImplementation("org.assertj:assertj-core:3.15.0")
}

repositories {
mavenLocal()
mavenCentral()
}

val compileKotlin: KotlinCompile by tasks
val compileTestKotlin: KotlinCompile by tasks
val releaseRepo: String by project
val snapshotRepo: String by project
val ossrhUsername: String by project
val ossrhPassword: String by project

compileKotlin.kotlinOptions {
jvmTarget = "1.8"
}

compileTestKotlin.kotlinOptions {
jvmTarget = "1.8"
}

fun canBeUploaded(project: Project): Boolean {
val jarGroup = (project.group as String).replace('.', '/')
val jarName = "${project.name}-${project.version}.jar"
val repositoryPath = "$jarGroup/${project.name}/${project.version}/$jarName"
val repositoryUrl = releaseRepo + repositoryPath

val canBeUploaded = !urlExists(repositoryUrl)
if (!canBeUploaded) {
println("Artifacts already exists on repository, no need to upload it again.")
}
return canBeUploaded
}

fun urlExists(repositoryUrl: String): Boolean {
return try {
val connection = URL(repositoryUrl).openConnection() as HttpURLConnection
connection.connectTimeout = 10_000
connection.readTimeout = 10_000
connection.requestMethod = "HEAD"
connection.responseCode == 200
} catch (ignored: IOException) {
false
}
}

tasks {
test {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
}
}
"install" {
group = "publishing"
description = "Install Keyple Plugin in the local maven repository."
}
"uploadArchives"(Upload::class) {
onlyIf{
canBeUploaded(project)
}
dependsOn("install")
group = "publishing"
description = "Upload Keyple Plugin to sonatype."
repositories {
withConvention(MavenRepositoryHandlerConvention::class) {
mavenDeployer {
withGroovyBuilder {
"repository"("url" to releaseRepo) {
"authentication"("userName" to ossrhUsername, "password" to ossrhPassword)
}
"snapshotRepository"("url" to snapshotRepo) {
"authentication"("userName" to ossrhUsername, "password" to ossrhPassword)
}
}
pom.project {
withGroovyBuilder {
"name"(project.description)
"description"(project.description)
"url"("https://projects.eclipse.org/projects/iot.keyple")
"organization" {
"name"("Eclipse Keyple")
"url"("https://projects.eclipse.org/projects/iot.keyple")
}
"scm" {
"connection"("scm:git:git://github.com/eclipse/keyple-ops.git")
"developerConnection"("scm:git:https://github.com/eclipse/keyple-ops.git")
"url"("http://github.com/eclipse/keyple-ops/tree/master")
}
"licenses" {
"license" {
"name"("Eclipse Public License - v 2.0")
"url"("https://www.eclipse.org/legal/epl-2.0/")
"distribution"("repo")
}
}
"developers" {
"developer" {
"name"("Olivier Delcroix")
"email"("odelcroi@gmail.com")
}
"developer" {
"name"("Brice Ruppen")
"email"("brice.ruppen@armotic.fr")
}
}

}
}
}
}
}
}
}
9 changes: 9 additions & 0 deletions java/keyple-gradle/gradle.properties
@@ -0,0 +1,9 @@
snapshotRepo=https://oss.sonatype.org/content/repositories/snapshots/
releaseRepo=https://oss.sonatype.org/service/local/staging/deploy/maven2/
ossrhUsername=
ossrhPassword=

group=org.eclipse.keyple
name=Keyple Gradle Plugin
description=Keyple Gradle Plugin
version=0.1.0-SNAPSHOT
Binary file not shown.
6 changes: 6 additions & 0 deletions java/keyple-gradle/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
#Wed Feb 05 09:52:28 CET 2020
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

0 comments on commit b198904

Please sign in to comment.