Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CI: Build, test, deploy to maven #11

Merged
merged 6 commits into from
Apr 27, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/build-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Build project
on:
pull_request:
jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 8

- name: Gradle Cache
uses: burrunan/gradle-cache-action@v1

- name: Setup Gradle
uses: gradle/gradle-build-action@v2

- name: Execute Gradle build
run: ./gradlew build

- name: Run Test
run: ./gradlew test
40 changes: 40 additions & 0 deletions .github/workflows/tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Publish package to Maven Central Repository
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- "v[0-9]+(.[0-9]+)?.[0-9]+(-rc[0-9]+)?" # Matching i.e. v1.0, v20.15.10, v1.0-rc1, v1.0.0-rc2
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
java-version: 8
distribution: temurin
jaeseung-bae marked this conversation as resolved.
Show resolved Hide resolved

- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3

- name: Import signing key
id: import_gpg
uses: crazy-max/ghaction-import-gpg@v5.2.0
with:
gpg_private_key: ${{ secrets.OSSRH_SIGNING_KEY }}
passphrase: ${{ secrets.OSSRH_PHRASE }}

- name: List keys
run: gpg -K

- name: Publish to maven
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PW: ${{ secrets.OSSRH_PW }}
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.OSSRH_SIGNING_KEY }}
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.OSSRH_PASSPHRASE }}
RELEASE_VERSION: ${{ github.ref_name }}
run: |
echo $RELEASE_VERSION
./gradlew publish -DVERSION=$RELEASE_VERSION
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Ref: https://keepachangelog.com/en/1.0.0/

### Changed
* [\#6](https://github.com/Finschia/finschia-kt/pull/6) Rename package 'ln.v2' -> 'sdk'
* (ci) [\#11](https://github.com/Finschia/finschia-kt/pull/11) Add ci/cd to publish to maven

### Deprecated

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
plugins {
// Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
id("org.jetbrains.kotlin.jvm")
jacoco
}

repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
gradlePluginPortal()
}

dependencies {
Expand All @@ -30,3 +32,15 @@ tasks.test {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}

tasks.jacocoTestReport {
dependsOn(tasks.test) // tests are required to run before generating the report
}

tasks.jacocoTestReport {
reports {
xml.required.set(true)
csv.required.set(true)
html.outputLocation.set(layout.buildDirectory.dir("jacocoHtml"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ plugins {

// Apply the java-library plugin for API and implementation separation.
`java-library`
`maven-publish`
signing
}
80 changes: 80 additions & 0 deletions crypto/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ plugins {
id("network.finschia.sdk.kotlin-library-conventions")
}

// Dependency versions
val guavaVersion = "28.1-jre"
val commonsIOVersion = "2.6"
val bouncycastleVersion = "1.64"
Expand Down Expand Up @@ -34,5 +35,84 @@ dependencies {
testImplementation("org.junit.jupiter:junit-jupiter-api:$jupiterVersion")
testImplementation("org.junit.jupiter:junit-jupiter-params:$jupiterVersion")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$jupiterVersion")
}

java {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this change does not applied in tx/build.gradle.kts.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I moved maven-related definition into publishing blocks in both tx/ and crypto/.
Do you mean this??

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean line 18 in tx/buid.gradle.kts, there is no blank between java{.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok~

withJavadocJar()
withSourcesJar()
}

tasks.javadoc {
if (JavaVersion.current().isJava9Compatible) {
(options as StandardJavadocDocletOptions).addBooleanOption("html5", true)
}
}

publishing {
// Maven artifact
val groupIdVal = "io.github.finschia"
val artifactIdVal = "finschia-kt-crypto"
val versionVal: String? = System.getProperty("VERSION")

// Maven pom info
val pomName = "finschia"
val pomDesc = artifactIdVal
val pomUrl = "https://github.com/Finschia/finschia-kt"
val pomScmConnection = "scm:git:git://github.com/Finschia/finschia-kt.git"
val pomDeveloperConnection = "scm:git:ssh://github.com/Finschia/finschia-kt.git"
val pomScmUrl = "https://github.com/Finschia/finschia-kt"

// Maven account
val ossrhUserName = System.getenv("OSSRH_USERNAME")
val ossrhPassword = System.getenv("OSSRH_PW")

publications {
create<MavenPublication>("mavenJava") {
groupId = groupIdVal
artifactId = artifactIdVal
version = versionVal?.substring(1) // without v

from(components["java"])
pom {
name.set(pomName)
description.set(pomDesc)
url.set(pomUrl)
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
developers {
developer {
id.set("dev")
name.set("dev")
email.set("dev@finschia.org")
}
}
scm {
connection.set(pomScmConnection)
developerConnection.set(pomDeveloperConnection)
url.set(pomScmUrl)
}
}
}
}
repositories {
maven {
name = "OSSRH"
url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
credentials {
username = ossrhUserName
password = ossrhPassword
}
}
}
}

signing {
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
sign(publishing.publications["mavenJava"])
}
80 changes: 80 additions & 0 deletions tx/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
kotlin("plugin.serialization") version "1.5.30"
}

// Dependency versions
val bitcoinjVersion = "0.15.6"
val kotlinxVersion = "1.2.0"

Expand All @@ -13,3 +14,82 @@ dependencies {
implementation("org.bitcoinj:bitcoinj-core:$bitcoinjVersion")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxVersion")
}

java {
withJavadocJar()
withSourcesJar()
}

tasks.javadoc {
if (JavaVersion.current().isJava9Compatible) {
(options as StandardJavadocDocletOptions).addBooleanOption("html5", true)
}
}
publishing {
// Maven artifact
val groupIdVal = "io.github.finschia"
val artifactIdVal = "finschia-kt-tx"
val versionVal: String? = System.getProperty("VERSION")

// Maven pom info
val pomName = "finschia"
val pomDesc = artifactIdVal
val pomUrl = "https://github.com/Finschia/finschia-kt"
val pomScmConnection = "scm:git:git://github.com/Finschia/finschia-kt.git"
val pomDeveloperConnection = "scm:git:ssh://github.com/Finschia/finschia-kt.git"
val pomScmUrl = "https://github.com/Finschia/finschia-kt"

// Maven account
val ossrhUserName = System.getenv("OSSRH_USERNAME")
val ossrhPassword = System.getenv("OSSRH_PW")

publications {
create<MavenPublication>("mavenJava") {
groupId = groupIdVal
artifactId = artifactIdVal
version = versionVal?.substring(1) // without v

from(components["java"])
pom {
name.set(pomName)
description.set(pomDesc)
url.set(pomUrl)
licenses {
license {
name.set("The Apache License, Version 2.0")
url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
}
}
developers {
developer {
id.set("dev")
name.set("dev")
email.set("dev@finschia.org")
}
}
scm {
connection.set(pomScmConnection)
developerConnection.set(pomDeveloperConnection)
url.set(pomScmUrl)
}
}
}
}
repositories {
maven {
name = "OSSRH"
url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
credentials {
username = ossrhUserName
password = ossrhPassword
}
}
}
}

signing {
val signingKey: String? by project
val signingPassword: String? by project
useInMemoryPgpKeys(signingKey, signingPassword)
sign(publishing.publications["mavenJava"])
}