From e31de0f923abe4da7f8d07552b6aadb8cf8c3306 Mon Sep 17 00:00:00 2001 From: Fabian Eidens Date: Wed, 3 Mar 2021 15:44:25 +0100 Subject: [PATCH 1/8] Adds maven publishing and github release capabilities --- .github/workflows/pub.yaml | 32 ++++++++++++++ build.gradle | 87 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 .github/workflows/pub.yaml diff --git a/.github/workflows/pub.yaml b/.github/workflows/pub.yaml new file mode 100644 index 0000000..5d86e2d --- /dev/null +++ b/.github/workflows/pub.yaml @@ -0,0 +1,32 @@ +name: Publishing + +on: + push: + branches: + - main + tags: + - v[1-9]+.[0-9]+.[0-9]+ +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Publish to the Maven Central Repository + run: ./gradlew publish -PcheckoutIfCloned -Prelease + env: + OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_PRIVATE_KEY }} + ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.GPG_PASSPHRASE }} + - name: Github release + uses: "marvinpinto/action-automatic-releases@latest" + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + prerelease: false + files: | + LICENSE + build/libs/*.jar diff --git a/build.gradle b/build.gradle index db8dd03..0eb86ba 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ plugins { id 'java-library' id 'maven-publish' + id 'signing' } group 'org.cryptimeleon' @@ -8,6 +9,13 @@ archivesBaseName = project.name boolean isRelease = project.hasProperty("release") version = '1.0.0' + (isRelease ? "" : "-SNAPSHOT") +sourceCompatibility = 1.8 +targetCompatibility = 1.8 +tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' +} + + repositories { mavenLocal() mavenCentral() @@ -82,3 +90,82 @@ task javadocJar(type: Jar, dependsOn: javadocLink) { from javadoc.destinationDir archiveClassifier.set('javadoc') } + +task sourcesJar(type: Jar) { + from sourceSets.main.allJava + archiveClassifier.set('sources') +} + +artifacts { + archives javadocJar + archives sourcesJar +} + +java { + withJavadocJar() + withSourcesJar() +} + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + versionMapping { + usage('java-api') { + fromResolutionOf('runtimeClasspath') + } + usage('java-runtime') { + fromResolutionResult() + } + } + artifacts { + archives javadocJar, sourcesJar + } + + pom { + name = 'Predenc' + url = 'https://cryptimeleon.org' + description = 'The Cryptimeleon Predenc project contains various predicate encryption ' + + 'implementations such as attribute-based encryption or identity-based encryption. ' + + 'Furthermore, it contains key encapsulation mechanisms based on predicate encryption schemes.' + licenses { + license { + name = 'The Apache License, Version 2.0' + url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + } + } + developers { + developer { + id = 'cryptimeleon-dev' + name = 'cryptimeleon Developers' + email = 'dev@cryptimeleon.org' + } + } + scm { + connection = 'scm:git:git://github.com/cryptimeleon/predenc.git' + developerConnection = 'scm:git:/~https://github.com/cryptimeleon/predenc.git' + url = '/~https://github.com/cryptimeleon/predenc/' + } + } + } + } + repositories { + maven { + credentials { + username = System.getenv("OSSRH_USERNAME") + password = System.getenv("OSSRH_TOKEN") + } + name = 'OSSRH' + def releasesRepoUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2/' + url = version.endsWith('SNAPSHOT') ? '' : releasesRepoUrl + } + } +} + +signing { + required(project.hasProperty("release")) + def signingKey = findProperty("signingKey") + def signingPassword = findProperty("signingPassword") + useInMemoryPgpKeys(signingKey, signingPassword) + sign publishing.publications.mavenJava +} \ No newline at end of file From e31fc90831dd3dbd8cdf064134877a166f6510bd Mon Sep 17 00:00:00 2001 From: Raphael Heitjohann <5891816+rheitjoh@users.noreply.github.com> Date: Wed, 3 Mar 2021 16:03:59 +0100 Subject: [PATCH 2/8] Fix #10 and change main to develop in settings.gradle --- settings.gradle | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/settings.gradle b/settings.gradle index 92fdecb..976cedb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -51,20 +51,18 @@ if (!hasProperty("release")) { + "' exists remotely but not locally. Please check it out yourself before building.") } } else { - println(msgPrefix + libPrefix + ": Branch '" + branchThis.getName() + "' does not exist remotely. Using main.") - if (grgitLib.branch.current().getName() == "main") { - println(msgPrefix + libPrefix + ": Branch main is checked out already. Using it.") + println(msgPrefix + libPrefix + ": Branch '" + branchThis.getName() + "' does not exist remotely. Using develop.") + if (grgitLib.branch.current().getName() == "develop") { + println(msgPrefix + libPrefix + ": Branch develop is checked out already. Using it.") } else { if (hasProperty("checkoutIfCloned") && cloned) { - println(msgPrefix + libPrefix + ": Branch main is not checked out. " + println(msgPrefix + libPrefix + ": Branch develop is not checked out. " + "'checkoutIfCloned' is set. Automatically checking it out.") grgitLib.checkout { - branch = branchThis.getName() - startPoint = "origin/" + branchThis.getName() - createBranch = true + branch = "develop" } } else { - throw new GradleException(msgPrefix + libPrefix + ": Branch main exists but is not checked out. " + throw new GradleException(msgPrefix + libPrefix + ": Branch develop exists but is not checked out. " + "Please check it out yourself before building.") } } From b753088d331601c372f99f6e496674da05ce0e2d Mon Sep 17 00:00:00 2001 From: Raphael Heitjohann <5891816+rheitjoh@users.noreply.github.com> Date: Wed, 3 Mar 2021 16:32:18 +0100 Subject: [PATCH 3/8] Add javadoc latex support --- build.gradle | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 0eb86ba..466caa0 100644 --- a/build.gradle +++ b/build.gradle @@ -77,16 +77,21 @@ test { } } -task javadocLink(type: Javadoc) { +task javadocLatex(type: Javadoc) { source = sourceSets.main.allJava classpath = sourceSets.main.runtimeClasspath // link to math and craco javadocs options { links "https://javadoc.io/doc/org.cryptimeleon/math/" + mathVersionNoSuffix, "https://javadoc.io/doc/org.cryptimeleon/craco/" + cracoVersionNoSuffix } + // enable latex rendering via mathjax + options.addBooleanOption("-allow-script-in-comments", true) + options.header = "" } -task javadocJar(type: Jar, dependsOn: javadocLink) { +task javadocJar(type: Jar, dependsOn: javadocLatex) { from javadoc.destinationDir archiveClassifier.set('javadoc') } @@ -168,4 +173,4 @@ signing { def signingPassword = findProperty("signingPassword") useInMemoryPgpKeys(signingKey, signingPassword) sign publishing.publications.mavenJava -} \ No newline at end of file +} From aefb345be04152e854bfe6dd6768c1a9c269848f Mon Sep 17 00:00:00 2001 From: Raphael Heitjohann <5891816+rheitjoh@users.noreply.github.com> Date: Wed, 3 Mar 2021 16:34:59 +0100 Subject: [PATCH 4/8] Fix use of greater than in javadoc of FullIdent --- .../java/org/cryptimeleon/predenc/abe/ibe/FullIdent.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cryptimeleon/predenc/abe/ibe/FullIdent.java b/src/main/java/org/cryptimeleon/predenc/abe/ibe/FullIdent.java index b728ad3..3491948 100644 --- a/src/main/java/org/cryptimeleon/predenc/abe/ibe/FullIdent.java +++ b/src/main/java/org/cryptimeleon/predenc/abe/ibe/FullIdent.java @@ -49,7 +49,7 @@ public FullIdent(Representation repr) { } /** - * Hash function: {0,1}^* -> G_1 + * Hash function: \(\{0,1\}^* \rightarrow \mathbb{G}_1\) * * @param data * @return group element @@ -59,7 +59,7 @@ protected GroupElement H1(byte[] data) { } /** - * Hash function: G_T -> {0,1}^n + * Hash function: \(\mathbb{G}_T \rightarrow \{0,1\}^n\) * * @param groupElement target group element * @return @@ -70,7 +70,7 @@ private byte[] H2(GroupElement groupElement) { } /** - * Hash function: {0,1}^n x {0,1}^n -> Z_p + * Hash function: \(\{0,1\}^n \times \{0,1\}^n \rightarrow \mathbb{Z}_p\) * * @param s1 * @param s2 @@ -87,7 +87,7 @@ private BigInteger H3(byte[] s1, byte[] s2) { } /** - * Hash function {0,1}^n -> {0,1}^n + * Hash function \(\{0,1\}^n \rightarrow \{0,1\}^n\) * * @param s * @return From e3b12797dac6fa67d33cf95c073e10010f06a27c Mon Sep 17 00:00:00 2001 From: raphael Date: Thu, 4 Mar 2021 09:52:47 +0100 Subject: [PATCH 5/8] Add github actions workflow to build from releases --- .github/workflows/ci.yaml | 15 --------------- .github/workflows/dev-ci.yaml | 22 ++++++++++++++++++++++ .github/workflows/release-ci.yaml | 22 ++++++++++++++++++++++ 3 files changed, 44 insertions(+), 15 deletions(-) delete mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/dev-ci.yaml create mode 100644 .github/workflows/release-ci.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index 63f7372..0000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: Java CI - -on: push - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 1.8 - uses: actions/setup-java@v1 - with: - java-version: 1.8 - - name: Build with Gradle - run: ./gradlew build -PcheckoutIfCloned=true \ No newline at end of file diff --git a/.github/workflows/dev-ci.yaml b/.github/workflows/dev-ci.yaml new file mode 100644 index 0000000..584e328 --- /dev/null +++ b/.github/workflows/dev-ci.yaml @@ -0,0 +1,22 @@ +name: Development Java CI + +on: + push: + branches-ignore: + - main + - 'release/**' + # Nightly builds to ensure dependencies don't break anything + schedule: + - cron: '0 0 * * *' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build with Gradle + run: ./gradlew build -PcheckoutIfCloned diff --git a/.github/workflows/release-ci.yaml b/.github/workflows/release-ci.yaml new file mode 100644 index 0000000..4b86c2d --- /dev/null +++ b/.github/workflows/release-ci.yaml @@ -0,0 +1,22 @@ +name: Release Java CI + +on: + push: + branches: + - main + - 'release/**' + # Nightly builds to ensure dependencies don't break anything + schedule: + - cron: '0 0 * * *' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build with Gradle + run: ./gradlew build -PcheckoutIfCloned -Prelease From c5c44c5267dcb617d6c59a05603c11559321c8d2 Mon Sep 17 00:00:00 2001 From: Raphael Heitjohann <5891816+rheitjoh@users.noreply.github.com> Date: Thu, 4 Mar 2021 09:56:21 +0100 Subject: [PATCH 6/8] Add build status badge for release build to readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b8aa4cb..632eafe 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ -![Build Status](/~https://github.com/cryptimeleon/predenc/workflows/Java%20CI/badge.svg) +![Build Status](/~https://github.com/cryptimeleon/predenc/workflows/Development%20Java%20CI/badge.svg) +![Build Status](/~https://github.com/cryptimeleon/predenc/workflows/Release%20Java%20CI/badge.svg) # Predenc The Cryptimeleon Predenc project contains various predicate encryption implementations such as attribute-based encryption or identity-based encryption. From e55951c072e1861110a3cf65896c237a63e8b9c5 Mon Sep 17 00:00:00 2001 From: raphael Date: Thu, 4 Mar 2021 10:02:28 +0100 Subject: [PATCH 7/8] Enable pull request ci runs --- .github/workflows/dev-ci.yaml | 3 +++ .github/workflows/release-ci.yaml | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/.github/workflows/dev-ci.yaml b/.github/workflows/dev-ci.yaml index 584e328..5ad3b1b 100644 --- a/.github/workflows/dev-ci.yaml +++ b/.github/workflows/dev-ci.yaml @@ -5,6 +5,9 @@ on: branches-ignore: - main - 'release/**' + pull_request: + branches: + - develop # Nightly builds to ensure dependencies don't break anything schedule: - cron: '0 0 * * *' diff --git a/.github/workflows/release-ci.yaml b/.github/workflows/release-ci.yaml index 4b86c2d..73822fb 100644 --- a/.github/workflows/release-ci.yaml +++ b/.github/workflows/release-ci.yaml @@ -5,6 +5,10 @@ on: branches: - main - 'release/**' + pull_request: + branches: + - main + - 'release/**' # Nightly builds to ensure dependencies don't break anything schedule: - cron: '0 0 * * *' From b806147080b472f69a4545c09220bbf8dc2041eb Mon Sep 17 00:00:00 2001 From: Fabian Eidens Date: Fri, 5 Mar 2021 14:27:53 +0100 Subject: [PATCH 8/8] Publications now only on tags (branch filter not working for tag) --- .github/workflows/pub.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/pub.yaml b/.github/workflows/pub.yaml index 5d86e2d..5105392 100644 --- a/.github/workflows/pub.yaml +++ b/.github/workflows/pub.yaml @@ -2,8 +2,6 @@ name: Publishing on: push: - branches: - - main tags: - v[1-9]+.[0-9]+.[0-9]+ jobs: