diff --git a/.github/workflows/java-gradle-ci.yml b/.github/workflows/java-gradle-ci.yml index d0f0f28..ce8c25d 100644 --- a/.github/workflows/java-gradle-ci.yml +++ b/.github/workflows/java-gradle-ci.yml @@ -7,6 +7,12 @@ name: Java CI with Gradle for library on: push: workflow_dispatch: + inputs: + create_release: + type: boolean + description: Create a release when CI passes + default: false + required: true concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -51,3 +57,52 @@ jobs: reuse-compliance: name: REUSE Compliance uses: ./.github/workflows/reuse-compliance.yml + + publish: + name: Publish to maven central + needs: [build-and-test] + if: github.ref_type == 'tag' + runs-on: ubuntu-latest + environment: release + permissions: + id-token: write + contents: read + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # 7.0.1 + with: + fetch-depth: 1 + persist-credentials: false + + - name: Setup runtime + uses: ./.github/actions/setup-runtime + + - name: Cache Gradle + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 #v6.1.0 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/settings.gradle*') }} + + - name: Optimize Gradle + shell: bash + run: | + mkdir -p ~/.gradle + echo "org.gradle.caching=true" >> ~/.gradle/gradle.properties + echo "org.gradle.configuration-cache=true" >> ~/.gradle/gradle.properties + + - name: Gradle Release Build + env: + JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }} + JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_PRIVATE_KEY }} + JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVEN_USERNAME }} + JRELEASER_MAVENCENTRAL_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} + SANITIZED_TAG: ${{ github.ref_name }} + run: | + echo "Performing release Gradle publish for tag: $SANITIZED_TAG" + + ./gradlew clean build publish -Pversion=$SANITIZED_TAG + ./gradlew jreleaserDeploy -Pversion=$SANITIZED_TAG \ No newline at end of file diff --git a/build.gradle b/build.gradle index d157c7e..2544a44 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,7 @@ import javax.inject.Inject plugins { id 'java' id 'maven-publish' + id 'org.jreleaser' version '1.26.0' } interface InjectedExecOps { @@ -15,7 +16,6 @@ interface InjectedExecOps { } group = 'org-power-grid-model' -version = '1.0-SNAPSHOT' repositories { mavenCentral() @@ -268,6 +268,21 @@ sourceSets { } } +tasks.register('sourcesJar', Jar) { + dependsOn(tasks.named('generatePGMBindings')) + from sourceSets.main.java + archiveClassifier.set('sources') +} + +artifacts { + archives sourcesJar +} + +java { + withSourcesJar() + withJavadocJar() +} + tasks.named('compileJava') { dependsOn(tasks.named('generatePGMBindings')) } @@ -277,10 +292,64 @@ tasks.named('processResources') { } publishing { + repositories { + maven { + url = layout.buildDirectory.dir("staging-deploy") + } + } publications { mavenJava(MavenPublication) { from components.java - artifactId = 'lib-power-grid-model' + groupId = 'org.lfenergy.powergridmodel' + artifactId = 'power-grid-model-ffm' + + pom { + name = 'power-grid-model-ffm' + description = 'Java package which wraps PGM core shared library' + url = 'https://github.com/PowerGridModel/libpower-grid-model-java' + organization { + name = 'LF Energy' + url = 'https://lfenergy.org' + } + licenses { + license { + name = 'Mozilla Public License, Version 2.0"' + url = 'https://www.mozilla.org/en-US/MPL/2.0/' + } + } + developers { + developer { + id = 'contributors' + name = 'Power Grid Model Contributors' + email = 'powergridmodel@lfenergy.org' + url = 'https://github.com/PowerGridModel/libpower-grid-model-java' + } + } + scm { + url = 'https://github.com/PowerGridModel/libpower-grid-model-java' + connection = 'scm:git:git://github.com/PowerGridModel/libpower-grid-model-java.git' + developerConnection = 'scm:git:ssh://git@github.com/PowerGridModel/libpower-grid-model-java.git' + } + } + + } + } +} + +jreleaser { + signing { + active = 'ALWAYS' + armored = true + } + deploy { + maven { + mavenCentral { + 'release-deploy' { + active = 'RELEASE' + url = 'https://central.sonatype.com/api/v1/publisher' + stagingRepository('build/staging-deploy') + } + } } } }