mirror of
https://github.com/corda/corda.git
synced 2025-02-15 15:12:46 +00:00
Merge branch 'release/os/4.12' into merge-release/os/4.11-release/os/4.12-2024-09-24-389
This commit is contained in:
commit
42ec266ed6
3958
.ci/api-current.txt
3958
.ci/api-current.txt
File diff suppressed because it is too large
Load Diff
@ -1,9 +0,0 @@
|
||||
FROM azul/zulu-openjdk:11.0.14
|
||||
RUN apt-get update && apt-get install -y curl apt-transport-https \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg2 \
|
||||
software-properties-common \
|
||||
wget
|
||||
ARG USER="stresstester"
|
||||
RUN useradd -m ${USER}
|
@ -1,213 +0,0 @@
|
||||
#!groovy
|
||||
/**
|
||||
* Jenkins pipeline to build Corda OS release with JDK11
|
||||
*/
|
||||
|
||||
/**
|
||||
* Kill already started job.
|
||||
* Assume new commit takes precendence and results from previous
|
||||
* unfinished builds are not required.
|
||||
* This feature doesn't play well with disableConcurrentBuilds() option
|
||||
*/
|
||||
@Library('corda-shared-build-pipeline-steps')
|
||||
import static com.r3.build.BuildControl.killAllExistingBuildsForJob
|
||||
|
||||
killAllExistingBuildsForJob(env.JOB_NAME, env.BUILD_NUMBER.toInteger())
|
||||
|
||||
/**
|
||||
* Sense environment
|
||||
*/
|
||||
boolean isReleaseTag = (env.TAG_NAME =~ /^release.*JDK11$/)
|
||||
|
||||
/**
|
||||
* Common Gradle arguments for all Gradle executions
|
||||
*/
|
||||
String COMMON_GRADLE_PARAMS = [
|
||||
'--no-daemon',
|
||||
'--stacktrace',
|
||||
'--info',
|
||||
'-Pcompilation.warningsAsErrors=false',
|
||||
'-Ptests.failFast=true',
|
||||
].join(' ')
|
||||
|
||||
/**
|
||||
* The name of subfolders to run tests previously on Another Agent and Same Agent
|
||||
*/
|
||||
String sameAgentFolder = 'sameAgent'
|
||||
String anotherAgentFolder = 'anotherAgent'
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
dockerfile {
|
||||
label 'standard'
|
||||
additionalBuildArgs '--build-arg USER="${USER}"' // DON'T change quotation - USER variable is substituted by SHELL!!!!
|
||||
filename "${sameAgentFolder}/.ci/dev/compatibility/DockerfileJDK11"
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* List options in alphabetical order
|
||||
*/
|
||||
options {
|
||||
buildDiscarder(logRotator(daysToKeepStr: '14', artifactDaysToKeepStr: '14'))
|
||||
checkoutToSubdirectory "${sameAgentFolder}"
|
||||
parallelsAlwaysFailFast()
|
||||
timeout(time: 6, unit: 'HOURS')
|
||||
timestamps()
|
||||
}
|
||||
|
||||
/*
|
||||
* List environment variables in alphabetical order
|
||||
*/
|
||||
environment {
|
||||
ARTIFACTORY_BUILD_NAME = "Corda :: Publish :: Publish JDK 11 Release to Artifactory :: ${env.BRANCH_NAME}"
|
||||
ARTIFACTORY_CREDENTIALS = credentials('artifactory-credentials')
|
||||
CORDA_ARTIFACTORY_PASSWORD = "${env.ARTIFACTORY_CREDENTIALS_PSW}"
|
||||
CORDA_ARTIFACTORY_USERNAME = "${env.ARTIFACTORY_CREDENTIALS_USR}"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Compile') {
|
||||
steps {
|
||||
dir(sameAgentFolder) {
|
||||
authenticateGradleWrapper()
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'clean',
|
||||
'jar'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Copy') {
|
||||
steps {
|
||||
sh "rm -rf ${anotherAgentFolder} && mkdir -p ${anotherAgentFolder} && cd ${sameAgentFolder} && cp -aR . ../${anotherAgentFolder}"
|
||||
}
|
||||
}
|
||||
|
||||
stage('All Tests') {
|
||||
parallel {
|
||||
stage('Another agent') {
|
||||
post {
|
||||
always {
|
||||
dir(anotherAgentFolder) {
|
||||
archiveArtifacts artifacts: '**/*.log', fingerprint: false
|
||||
junit testResults: '**/build/test-results/**/*.xml', keepLongStdio: true
|
||||
}
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Unit Test') {
|
||||
steps {
|
||||
dir(anotherAgentFolder) {
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'test'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Smoke Test') {
|
||||
steps {
|
||||
dir(anotherAgentFolder) {
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'smokeTest'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Slow Integration Test') {
|
||||
steps {
|
||||
dir(anotherAgentFolder) {
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'slowIntegrationTest'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Same agent') {
|
||||
post {
|
||||
always {
|
||||
dir(sameAgentFolder) {
|
||||
archiveArtifacts artifacts: '**/*.log', fingerprint: false
|
||||
junit testResults: '**/build/test-results/**/*.xml', keepLongStdio: true
|
||||
}
|
||||
}
|
||||
}
|
||||
stages {
|
||||
stage('Integration Test') {
|
||||
steps {
|
||||
dir(sameAgentFolder) {
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'integrationTest'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deploy Node') {
|
||||
steps {
|
||||
dir(sameAgentFolder) {
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'deployNode'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Publish to Artifactory') {
|
||||
when {
|
||||
expression { isReleaseTag }
|
||||
}
|
||||
steps {
|
||||
dir(sameAgentFolder) {
|
||||
rtServer(
|
||||
id: 'R3-Artifactory',
|
||||
url: 'https://software.r3.com/artifactory',
|
||||
credentialsId: 'artifactory-credentials'
|
||||
)
|
||||
rtGradleDeployer(
|
||||
id: 'deployer',
|
||||
serverId: 'R3-Artifactory',
|
||||
repo: 'corda-releases'
|
||||
)
|
||||
rtGradleRun(
|
||||
usesPlugin: true,
|
||||
useWrapper: true,
|
||||
switches: '-s --info',
|
||||
tasks: 'artifactoryPublish',
|
||||
deployerId: 'deployer',
|
||||
buildName: env.ARTIFACTORY_BUILD_NAME
|
||||
)
|
||||
rtPublishBuildInfo(
|
||||
serverId: 'R3-Artifactory',
|
||||
buildName: env.ARTIFACTORY_BUILD_NAME
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
cleanup {
|
||||
deleteDir() /* clean up our workspace */
|
||||
}
|
||||
}
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
#!groovy
|
||||
/**
|
||||
* Jenkins pipeline to build Corda Opensource Pull Requests with JDK11.
|
||||
*/
|
||||
|
||||
@Library('corda-shared-build-pipeline-steps')
|
||||
import static com.r3.build.BuildControl.killAllExistingBuildsForJob
|
||||
|
||||
killAllExistingBuildsForJob(env.JOB_NAME, env.BUILD_NUMBER.toInteger())
|
||||
|
||||
pipeline {
|
||||
agent {
|
||||
dockerfile {
|
||||
label 'standard'
|
||||
additionalBuildArgs '--build-arg USER="${USER}"' // DON'T change quotation - USER variable is substituted by SHELL!!!!
|
||||
filename '.ci/dev/compatibility/DockerfileJDK11'
|
||||
}
|
||||
}
|
||||
options {
|
||||
timestamps()
|
||||
timeout(time: 3, unit: 'HOURS')
|
||||
buildDiscarder(logRotator(daysToKeepStr: '14', artifactDaysToKeepStr: '14'))
|
||||
}
|
||||
|
||||
environment {
|
||||
ARTIFACTORY_CREDENTIALS = credentials('artifactory-credentials')
|
||||
BUILD_CACHE_CREDENTIALS = credentials('gradle-ent-cache-credentials')
|
||||
BUILD_CACHE_PASSWORD = "${env.BUILD_CACHE_CREDENTIALS_PSW}"
|
||||
BUILD_CACHE_USERNAME = "${env.BUILD_CACHE_CREDENTIALS_USR}"
|
||||
CORDA_ARTIFACTORY_PASSWORD = "${env.ARTIFACTORY_CREDENTIALS_PSW}"
|
||||
CORDA_ARTIFACTORY_USERNAME = "${env.ARTIFACTORY_CREDENTIALS_USR}"
|
||||
CORDA_GRADLE_SCAN_KEY = credentials('gradle-build-scans-key')
|
||||
CORDA_USE_CACHE = "corda-remotes"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('JDK 11 Compile') {
|
||||
steps {
|
||||
authenticateGradleWrapper()
|
||||
sh "./gradlew --no-daemon --parallel --build-cache -Pcompilation.allWarningsAsErrors=true -Ptests.failFast=false " +
|
||||
"-Ptests.ignoreFailures=true clean compileAll --stacktrace"
|
||||
}
|
||||
}
|
||||
stage('Deploy nodes') {
|
||||
steps {
|
||||
sh "./gradlew --no-daemon --build-cache deployNodes"
|
||||
}
|
||||
}
|
||||
}
|
||||
post {
|
||||
always {
|
||||
findBuildScans()
|
||||
}
|
||||
cleanup {
|
||||
deleteDir() /* clean up our workspace */
|
||||
}
|
||||
}
|
||||
}
|
4
.ci/dev/forward-merge/Jenkinsfile
vendored
4
.ci/dev/forward-merge/Jenkinsfile
vendored
@ -13,13 +13,13 @@
|
||||
* the branch name of origin branch, it should match the current branch
|
||||
* and it acts as a fail-safe inside {@code forwardMerger} pipeline
|
||||
*/
|
||||
String originBranch = 'release/os/4.11'
|
||||
String originBranch = 'release/os/4.12'
|
||||
|
||||
/**
|
||||
* the branch name of target branch, it should be the branch with the next version
|
||||
* after the one in current branch.
|
||||
*/
|
||||
String targetBranch = 'release/os/4.12'
|
||||
String targetBranch = 'release/os/4.13'
|
||||
|
||||
/**
|
||||
* Forward merge any changes between #originBranch and #targetBranch
|
||||
|
2
.ci/dev/nightly-regression/Jenkinsfile
vendored
2
.ci/dev/nightly-regression/Jenkinsfile
vendored
@ -45,6 +45,8 @@ pipeline {
|
||||
CORDA_ARTIFACTORY_PASSWORD = "${env.ARTIFACTORY_CREDENTIALS_PSW}"
|
||||
CORDA_ARTIFACTORY_USERNAME = "${env.ARTIFACTORY_CREDENTIALS_USR}"
|
||||
CORDA_USE_CACHE = "corda-remotes"
|
||||
JAVA_HOME = "/usr/lib/jvm/java-17-amazon-corretto"
|
||||
JAVA_8_HOME = "/usr/lib/jvm/java-1.8.0-amazon-corretto"
|
||||
}
|
||||
|
||||
stages {
|
||||
|
36
.ci/dev/pr-code-checks/Jenkinsfile
vendored
36
.ci/dev/pr-code-checks/Jenkinsfile
vendored
@ -15,48 +15,32 @@ pipeline {
|
||||
* List environment variables in alphabetical order
|
||||
*/
|
||||
environment {
|
||||
SNYK_API_TOKEN = credentials('c4-os-snyk-api-token-secret')
|
||||
C4_OS_SNYK_ORG_ID = credentials('c4-os-snyk-org-id')
|
||||
ARTIFACTORY_CREDENTIALS = credentials('artifactory-credentials')
|
||||
BUILD_CACHE_CREDENTIALS = credentials('gradle-ent-cache-credentials')
|
||||
BUILD_CACHE_PASSWORD = "${env.BUILD_CACHE_CREDENTIALS_PSW}"
|
||||
BUILD_CACHE_USERNAME = "${env.BUILD_CACHE_CREDENTIALS_USR}"
|
||||
CORDA_ARTIFACTORY_PASSWORD = "${env.ARTIFACTORY_CREDENTIALS_PSW}"
|
||||
CORDA_ARTIFACTORY_USERNAME = "${env.ARTIFACTORY_CREDENTIALS_USR}"
|
||||
CORDA_GRADLE_SCAN_KEY = credentials('gradle-build-scans-key')
|
||||
CORDA_USE_CACHE = "corda-remotes"
|
||||
C4_OS_SNYK_ORG_ID = credentials('c4-os-snyk-org-id')
|
||||
SNYK_API_TOKEN = credentials('c4-os-snyk-api-token-secret')
|
||||
JAVA_HOME = "/usr/lib/jvm/java-17-amazon-corretto"
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Detekt check') {
|
||||
steps {
|
||||
authenticateGradleWrapper()
|
||||
sh "./gradlew --no-daemon --parallel --build-cache clean detekt"
|
||||
sh "./gradlew --no-daemon clean detekt"
|
||||
}
|
||||
}
|
||||
|
||||
stage('Compilation warnings check') {
|
||||
steps {
|
||||
sh "./gradlew --no-daemon --parallel --build-cache -Pcompilation.warningsAsErrors=true compileAll"
|
||||
sh "./gradlew --no-daemon -Pcompilation.warningsAsErrors=true compileAll"
|
||||
}
|
||||
}
|
||||
|
||||
stage('Snyk Delta') {
|
||||
agent {
|
||||
docker {
|
||||
image 'build-zulu-openjdk:8'
|
||||
reuseNode true
|
||||
registryUrl 'https://engineering-docker.software.r3.com/'
|
||||
registryCredentialsId 'artifactory-credentials'
|
||||
args '-v /tmp:/host_tmp'
|
||||
}
|
||||
}
|
||||
environment {
|
||||
GRADLE_USER_HOME = "/host_tmp/gradle"
|
||||
}
|
||||
agent { label 'standard' }
|
||||
steps {
|
||||
authenticateGradleWrapper()
|
||||
sh 'mkdir -p ${GRADLE_USER_HOME}'
|
||||
authenticateGradleWrapper()
|
||||
snykDeltaScan(env.SNYK_API_TOKEN, env.C4_OS_SNYK_ORG_ID)
|
||||
}
|
||||
@ -64,21 +48,19 @@ pipeline {
|
||||
|
||||
stage('No API change check') {
|
||||
steps {
|
||||
sh "./gradlew --no-daemon --parallel --build-cache generateApi"
|
||||
sh "./gradlew --no-daemon generateApi"
|
||||
sh ".ci/check-api-changes.sh"
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deploy Nodes') {
|
||||
steps {
|
||||
sh "./gradlew --no-daemon --build-cache jar deployNodes"
|
||||
sh "./gradlew --no-daemon jar deployNodes"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
always {
|
||||
findBuildScans()
|
||||
}
|
||||
cleanup {
|
||||
deleteDir() /* clean up our workspace */
|
||||
}
|
||||
|
1
.ci/dev/publish-api-docs/Jenkinsfile
vendored
1
.ci/dev/publish-api-docs/Jenkinsfile
vendored
@ -27,6 +27,7 @@ pipeline {
|
||||
ARTIFACTORY_CREDENTIALS = credentials('artifactory-credentials')
|
||||
CORDA_ARTIFACTORY_USERNAME = "${env.ARTIFACTORY_CREDENTIALS_USR}"
|
||||
CORDA_ARTIFACTORY_PASSWORD = "${env.ARTIFACTORY_CREDENTIALS_PSW}"
|
||||
JAVA_HOME = "/usr/lib/jvm/java-17-amazon-corretto"
|
||||
}
|
||||
|
||||
stages {
|
||||
|
@ -39,6 +39,7 @@ pipeline {
|
||||
BUILD_CACHE_USERNAME = "${env.BUILD_CACHE_CREDENTIALS_USR}"
|
||||
USE_CACHE = 'corda-remotes'
|
||||
DOCKER_URL = "https://index.docker.io/v1/"
|
||||
JAVA_HOME = "/usr/lib/jvm/java-17-amazon-corretto"
|
||||
}
|
||||
|
||||
stages {
|
||||
|
@ -24,6 +24,7 @@ pipeline {
|
||||
// in the name
|
||||
ARTIFACTORY_BUILD_NAME = "Corda / Publish / Publish Preview to Artifactory"
|
||||
.replaceAll("/", " :: ")
|
||||
JAVA_HOME = "/usr/lib/jvm/java-17-amazon-corretto"
|
||||
}
|
||||
|
||||
stages {
|
||||
|
4
.ci/dev/regression/Jenkinsfile
vendored
4
.ci/dev/regression/Jenkinsfile
vendored
@ -70,6 +70,8 @@ pipeline {
|
||||
SNYK_API_KEY = "c4-os-snyk" //Jenkins credential type: Snyk Api token
|
||||
SNYK_TOKEN = credentials('c4-os-snyk-api-token-secret') //Jenkins credential type: Secret text
|
||||
C4_OS_SNYK_ORG_ID = credentials('corda4-os-snyk-org-id')
|
||||
JAVA_HOME = "/usr/lib/jvm/java-17-amazon-corretto"
|
||||
JAVA_8_HOME = "/usr/lib/jvm/java-1.8.0-amazon-corretto"
|
||||
}
|
||||
|
||||
stages {
|
||||
@ -327,7 +329,7 @@ pipeline {
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'docker:pushDockerImage',
|
||||
'-Pdocker.image.repository=corda/community',
|
||||
'-Pdocker.image.repository=corda/open-source',
|
||||
'--image OFFICIAL'
|
||||
].join(' ')
|
||||
}
|
||||
|
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
6
.github/PULL_REQUEST_TEMPLATE.md
vendored
@ -3,9 +3,9 @@
|
||||
|
||||
# PR Checklist:
|
||||
|
||||
- [ ] Have you run the unit, integration and smoke tests as described [here](https://docs.r3.com/en/platform/corda/4.8/open-source/testing.html)?
|
||||
- [ ] Have you run the unit, integration and smoke tests as described [here](https://docs.r3.com/testing.html)?
|
||||
- [ ] If you added public APIs, did you write the JavaDocs/kdocs?
|
||||
- [ ] If the changes are of interest to application developers, have you added them to the changelog, and potentially the [release notes](https://docs.corda.net/head/release-notes.html) (`https://docs.r3.com/en/platform/corda/4.8/open-source/release-notes.html`)?
|
||||
- [ ] If you are contributing for the first time, please read the [contributor agreement](https://docs.r3.com/en/platform/corda/4.8/open-source/contributing.html) now and add a comment to this pull request stating that your PR is in accordance with the [Developer's Certificate of Origin](https://docs.r3.com/en/platform/corda/4.8/open-source/contributing.html#merging-the-changes-back-into-corda).
|
||||
- [ ] If the changes are of interest to application developers, have you added them to the changelog, and potentially the [release notes](https://docs.r3.com/release-notes.html) (`https://docs.r3.com/release-notes.html`)?
|
||||
- [ ] If you are contributing for the first time, please read the [contributor agreement](https://docs.r3.com/contributing.html) now and add a comment to this pull request stating that your PR is in accordance with the [Developer's Certificate of Origin](https://docs.r3.com/contributing.html).
|
||||
|
||||
Thanks for your code, it's appreciated! :)
|
||||
|
2
.github/workflows/check-pr-title.yml
vendored
2
.github/workflows/check-pr-title.yml
vendored
@ -9,6 +9,6 @@ jobs:
|
||||
steps:
|
||||
- uses: morrisoncole/pr-lint-action@v1.7.1
|
||||
with:
|
||||
title-regex: '^((CORDA|AG|EG|ENT|INFRA|ES)-\d+)(.*)'
|
||||
title-regex: '^((CORDA|AG|EG|ENT|INFRA|ES|DOC)-\d+)(.*)'
|
||||
on-failed-regex-comment: "PR title failed to match regex -> `%regex%`"
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
|
@ -2,4 +2,4 @@
|
||||
|
||||
Corda is an open-source project and contributions are welcome!
|
||||
|
||||
To find out how to contribute, please see our [contributing docs](https://docs.r3.com/en/platform/corda/4.8/open-source/contributing.html).
|
||||
To find out how to contribute, please see our [contributing docs](https://docs.r3.com/contributing.html).
|
||||
|
20
Jenkinsfile
vendored
20
Jenkinsfile
vendored
@ -53,6 +53,8 @@ pipeline {
|
||||
CORDA_ARTIFACTORY_USERNAME = "${env.ARTIFACTORY_CREDENTIALS_USR}"
|
||||
CORDA_GRADLE_SCAN_KEY = credentials('gradle-build-scans-key')
|
||||
CORDA_USE_CACHE = "corda-remotes"
|
||||
JAVA_HOME="/usr/lib/jvm/java-17-amazon-corretto"
|
||||
JAVA_8_HOME = "/usr/lib/jvm/java-1.8.0-amazon-corretto"
|
||||
}
|
||||
|
||||
stages {
|
||||
@ -119,6 +121,24 @@ pipeline {
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
stage('Smoke Test') {
|
||||
steps {
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'smokeTest'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
stage('Slow Integration Test') {
|
||||
steps {
|
||||
sh script: [
|
||||
'./gradlew',
|
||||
COMMON_GRADLE_PARAMS,
|
||||
'slowIntegrationTest'
|
||||
].join(' ')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Same agent') {
|
||||
|
19
README.md
19
README.md
@ -1,5 +1,5 @@
|
||||
<p align="center">
|
||||
<img src="https://www.corda.net/wp-content/themes/corda/assets/images/crda-logo-big.svg" alt="Corda" width="500">
|
||||
<img src="https://corda.net/wp-content/uploads/2021/11/corda-logo.svg" alt="Corda" width="500">
|
||||
</p>
|
||||
|
||||
<a href="https://ci-master.corda.r3cev.com/viewType.html?buildTypeId=Corda_Build_ActiveReleaseBranches_BuildOsRelease45&tab=buildTypeStatusDiv&guest=1"><img src="https://ci.corda.r3cev.com/app/rest/builds/buildType:Corda_Build_ActiveReleaseBranches_BuildOsRelease45/statusIcon"/></a> [](https://opensource.org/licenses/Apache-2.0)
|
||||
@ -25,27 +25,26 @@ However, like all things, Corda must evolve to serve the more stringent needs of
|
||||
|
||||
## Getting started
|
||||
|
||||
1. Read the [Getting Started](https://docs.corda.net/getting-set-up.html) documentation
|
||||
2. Run the [Example CorDapp](https://docs.corda.net/tutorial-cordapp.html)
|
||||
3. Read about Corda's [Key Concepts](https://docs.corda.net/key-concepts.html)
|
||||
4. Follow the [Hello, World! tutorial](https://docs.corda.net/hello-world-introduction.html)
|
||||
1. Read the [Getting Started](https://docs.r3.com/getting-set-up.html) documentation
|
||||
2. Run the [Example CorDapp](https://docs.r3.com/tutorial-cordapp.html)
|
||||
3. Read about Corda's [Key Concepts](https://docs.r3.com/key-concepts.html)
|
||||
4. Follow the [Hello, World! tutorial](https://docs.r3.com/hello-world-introduction.html)
|
||||
|
||||
## Useful links
|
||||
|
||||
* [Project Website](https://corda.net)
|
||||
* [Mailing List](https://groups.io/g/corda-dev/)
|
||||
* [Documentation](https://docs.corda.net)
|
||||
* [Documentation](https://docs.r3.com)
|
||||
* [Stack Overflow Tag](https://stackoverflow.com/questions/tagged/corda)
|
||||
* [Slack Channel](https://slack.corda.net/)
|
||||
* [Twitter](https://twitter.com/Cordablockchain)
|
||||
* [Meetups](https://www.meetup.com/pro/corda/)
|
||||
* [Training Courses](https://www.corda.net/corda-training/)
|
||||
* [Twitter](https://twitter.com/inside_r3)
|
||||
* [Training Courses](https://r3certification.com/)
|
||||
|
||||
## Contributing
|
||||
|
||||
Corda is an open-source project and contributions are welcome!
|
||||
|
||||
To find out how to contribute, please see our [contributing docs](https://docs.r3.com/en/platform/corda/4.8/open-source/contributing.html).
|
||||
To find out how to contribute, please see our [contributing docs](https://docs.r3.com/contributing.html).
|
||||
|
||||
## License
|
||||
|
||||
|
367
build.gradle
367
build.gradle
@ -1,8 +1,11 @@
|
||||
import com.r3.testing.DistributeTestsBy
|
||||
import com.r3.testing.PodLogLevel
|
||||
import net.corda.plugins.apiscanner.GenerateApi
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
import static org.gradle.api.JavaVersion.VERSION_11
|
||||
import static org.gradle.api.JavaVersion.VERSION_1_8
|
||||
import static org.gradle.api.JavaVersion.VERSION_17
|
||||
import static org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
|
||||
import static org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_9
|
||||
|
||||
buildscript {
|
||||
// For sharing constants between builds
|
||||
@ -15,26 +18,18 @@ buildscript {
|
||||
|
||||
ext.corda_build_edition = System.getenv("CORDA_BUILD_EDITION")?.trim() ?: "Corda Open Source"
|
||||
ext.corda_platform_version = constants.getProperty("platformVersion")
|
||||
ext.corda_shell_version = constants.getProperty("cordaShellVersion")
|
||||
ext.gradle_plugins_version = constants.getProperty("gradlePluginsVersion")
|
||||
|
||||
// Dependency versions. Can run 'gradle dependencyUpdates' to find new versions of things.
|
||||
//
|
||||
// TODO: Sort this alphabetically.
|
||||
ext.kotlin_version = constants.getProperty("kotlinVersion")
|
||||
ext.warnings_as_errors = project.hasProperty("compilation.warningsAsErrors") ? project.property("compilation.warningsAsErrors").toBoolean() : false
|
||||
|
||||
ext.quasar_group = 'co.paralleluniverse'
|
||||
// Set version of Quasar according to version of Java used:
|
||||
if (JavaVersion.current().isJava8()) {
|
||||
ext.quasar_version = constants.getProperty("quasarVersion")
|
||||
ext.quasar_classifier = constants.getProperty("quasarClassifier")
|
||||
ext.jdkClassifier = constants.getProperty("jdkClassifier")
|
||||
} else {
|
||||
ext.quasar_version = constants.getProperty("quasarVersion11")
|
||||
ext.quasar_classifier = constants.getProperty("quasarClassifier11")
|
||||
ext.jdkClassifier = constants.getProperty("jdkClassifier11")
|
||||
}
|
||||
ext.cordaScanApiClassifier = jdkClassifier
|
||||
ext.quasar_version = constants.getProperty("quasarVersion")
|
||||
ext.quasar_classifier = constants.getProperty("quasarClassifier")
|
||||
ext.quasar_exclusions = [
|
||||
'co.paralleluniverse**',
|
||||
'groovy**',
|
||||
@ -49,7 +44,7 @@ buildscript {
|
||||
'org.junit**',
|
||||
'org.slf4j**',
|
||||
'worker.org.gradle.**',
|
||||
'com.nhaarman.mockito_kotlin**',
|
||||
'org.mockito.kotlin**',
|
||||
'org.assertj**',
|
||||
'org.hamcrest**',
|
||||
'org.mockito**',
|
||||
@ -95,7 +90,6 @@ buildscript {
|
||||
ext.h2_version = constants.getProperty("h2Version")
|
||||
ext.rxjava_version = constants.getProperty("rxjavaVersion")
|
||||
ext.dokka_version = constants.getProperty("dokkaVersion")
|
||||
ext.eddsa_version = constants.getProperty("eddsaVersion")
|
||||
ext.dependency_checker_version = constants.getProperty("dependencyCheckerVersion")
|
||||
ext.commons_collections_version = constants.getProperty("commonsCollectionsVersion")
|
||||
ext.beanutils_version = constants.getProperty("beanutilsVersion")
|
||||
@ -116,7 +110,6 @@ buildscript {
|
||||
ext.class_graph_version = constants.getProperty('classgraphVersion')
|
||||
ext.jcabi_manifests_version = constants.getProperty("jcabiManifestsVersion")
|
||||
ext.picocli_version = constants.getProperty("picocliVersion")
|
||||
ext.commons_lang_version = constants.getProperty("commonsLangVersion")
|
||||
ext.commons_io_version = constants.getProperty("commonsIoVersion")
|
||||
ext.controlsfx_version = constants.getProperty("controlsfxVersion")
|
||||
ext.detekt_version = constants.getProperty('detektVersion')
|
||||
@ -124,20 +117,10 @@ buildscript {
|
||||
ext.commons_configuration2_version = constants.getProperty("commonsConfiguration2Version")
|
||||
ext.commons_text_version = constants.getProperty("commonsTextVersion")
|
||||
ext.snake_yaml_version = constants.getProperty("snakeYamlVersion")
|
||||
ext.fontawesomefx_commons_version = constants.getProperty("fontawesomefxCommonsVersion")
|
||||
ext.fontawesomefx_fontawesome_version = constants.getProperty("fontawesomefxFontawesomeVersion")
|
||||
ext.javaassist_version = constants.getProperty("javaassistVersion")
|
||||
|
||||
if (JavaVersion.current().isJava8()) {
|
||||
ext.fontawesomefx_commons_version = constants.getProperty("fontawesomefxCommonsJava8Version")
|
||||
ext.fontawesomefx_fontawesome_version = constants.getProperty("fontawesomefxFontawesomeJava8Version")
|
||||
} else {
|
||||
ext.fontawesomefx_commons_version = constants.getProperty("fontawesomefxCommonsVersion")
|
||||
ext.fontawesomefx_fontawesome_version = constants.getProperty("fontawesomefxFontawesomeVersion")
|
||||
}
|
||||
|
||||
// Update 121 is required for ObjectInputFilter.
|
||||
// Updates [131, 161] also have zip compression bugs on MacOS (High Sierra).
|
||||
// when the java version in NodeStartup.hasMinimumJavaVersion() changes, so must this check
|
||||
ext.java8_minUpdateVersion = constants.getProperty('java8MinUpdateVersion')
|
||||
ext.corda_revision = {
|
||||
try {
|
||||
"git rev-parse HEAD".execute().text.trim()
|
||||
@ -171,6 +154,7 @@ buildscript {
|
||||
content {
|
||||
includeGroupByRegex 'net\\.corda(\\..*)?'
|
||||
includeGroupByRegex 'com\\.r3(\\..*)?'
|
||||
includeGroup 'co.paralleluniverse'
|
||||
}
|
||||
}
|
||||
maven {
|
||||
@ -180,7 +164,6 @@ buildscript {
|
||||
includeGroupByRegex 'com\\.r3(\\..*)?'
|
||||
}
|
||||
}
|
||||
gradlePluginPortal()
|
||||
mavenCentral()
|
||||
maven {
|
||||
url "${publicArtifactURL}/jcenter-backup"
|
||||
@ -188,28 +171,21 @@ buildscript {
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
|
||||
classpath "net.corda.plugins:publish-utils:$gradle_plugins_version"
|
||||
classpath "net.corda.plugins:quasar-utils:$gradle_plugins_version"
|
||||
classpath "net.corda.plugins:cordformation:$gradle_plugins_version"
|
||||
classpath "net.corda.plugins:cordapp:$gradle_plugins_version"
|
||||
classpath "net.corda.plugins:api-scanner:$gradle_plugins_version"
|
||||
classpath "net.corda.plugins:jar-filter:$gradle_plugins_version"
|
||||
classpath "net.sf.proguard:proguard-gradle:$proguard_version"
|
||||
classpath "com.guardsquare:proguard-gradle:$proguard_version"
|
||||
classpath 'com.github.ben-manes:gradle-versions-plugin:0.15.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
|
||||
classpath "org.jetbrains.dokka:dokka-gradle-plugin:${dokka_version}"
|
||||
classpath "net.i2p.crypto:eddsa:$eddsa_version" // Needed for ServiceIdentityGenerator in the build environment.
|
||||
classpath "org.owasp:dependency-check-gradle:${dependency_checker_version}"
|
||||
classpath "org.jetbrains.dokka:dokka-base:$dokka_version"
|
||||
classpath "org.owasp:dependency-check-gradle:$dependency_checker_version"
|
||||
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:$artifactory_plugin_version"
|
||||
// Capsule gradle plugin forked and maintained locally to support Gradle 5.x
|
||||
// See https://github.com/corda/gradle-capsule-plugin
|
||||
classpath "us.kirchmeier:gradle-capsule-plugin:1.0.4_r3"
|
||||
classpath "us.kirchmeier:gradle-capsule-plugin:1.0.5_r3"
|
||||
classpath group: "com.r3.testing", name: "gradle-distributed-testing-plugin", version: '1.3.0'
|
||||
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.8"
|
||||
classpath "com.gradle:gradle-enterprise-gradle-plugin:$gradleEnterprisePlugin"
|
||||
classpath "com.gradle:common-custom-user-data-gradle-plugin:$customUserDataGradlePlugin"
|
||||
}
|
||||
|
||||
configurations.classpath {
|
||||
@ -219,34 +195,20 @@ buildscript {
|
||||
}
|
||||
|
||||
plugins {
|
||||
// Add the shadow plugin to the plugins classpath for the entire project.
|
||||
id 'com.github.johnrengelman.shadow' version '2.0.4' apply false
|
||||
id 'org.jetbrains.kotlin.jvm' apply false
|
||||
id 'org.jetbrains.kotlin.plugin.allopen' apply false
|
||||
id 'org.jetbrains.kotlin.plugin.jpa' apply false
|
||||
id 'com.github.johnrengelman.shadow' version '7.1.2' apply false
|
||||
id "org.ajoberstar.grgit" version "4.0.0"
|
||||
id 'corda.root-publish'
|
||||
id "org.jetbrains.dokka" version "1.8.20"
|
||||
}
|
||||
|
||||
apply plugin: 'project-report'
|
||||
apply plugin: 'com.github.ben-manes.versions'
|
||||
apply plugin: 'net.corda.plugins.publish-utils'
|
||||
apply plugin: 'com.jfrog.artifactory'
|
||||
apply plugin: 'com.r3.testing.distributed-testing'
|
||||
apply plugin: "com.gradle.build-scan"
|
||||
apply plugin: "com.gradle.common-custom-user-data-gradle-plugin"
|
||||
|
||||
buildScan {
|
||||
server = gradleEnterpriseUrl
|
||||
allowUntrustedServer = false
|
||||
def apiKey = project.findProperty('CORDA_GRADLE_SCAN_KEY') ?: System.getenv('CORDA_GRADLE_SCAN_KEY')
|
||||
if (apiKey?.trim()) {
|
||||
publishAlways()
|
||||
capture {
|
||||
taskInputFiles = true
|
||||
}
|
||||
uploadInBackground = false
|
||||
accessKey = apiKey
|
||||
}
|
||||
}
|
||||
|
||||
// If the command line project option -PversionFromGit is added to the gradle invocation, we'll resolve
|
||||
// If the command line project option -PversionFromGit is added to the gradle invocation, we'll resolve
|
||||
// the latest git commit hash and timestamp and create a version postfix from that
|
||||
if (project.hasProperty("versionFromGit")){
|
||||
ext.versionSuffix = "${grgit.head().dateTime.format("yyyyMMdd_HHmmss")}-${grgit.head().abbreviatedId}"
|
||||
@ -259,26 +221,17 @@ if (ext.versionSuffix != ""){
|
||||
ext.corda_release_version = "${ext.baseVersion}".toString()
|
||||
}
|
||||
|
||||
// We need the following three lines even though they're inside an allprojects {} block below because otherwise
|
||||
// IntelliJ gets confused when importing the project and ends up erasing and recreating the .idea directory, along
|
||||
// with the run configurations. It also doesn't realise that the project is a Java 8 project and misconfigures
|
||||
// the resulting import. This fixes it.
|
||||
apply plugin: 'java'
|
||||
|
||||
logger.lifecycle("Java version: {}", JavaVersion.current())
|
||||
sourceCompatibility = VERSION_1_8
|
||||
targetCompatibility = JavaVersion.current().isJava8() ? VERSION_1_8 : VERSION_11
|
||||
logger.lifecycle("Java source compatibility: {}", sourceCompatibility)
|
||||
logger.lifecycle("Java target compatibility: {}", targetCompatibility)
|
||||
logger.lifecycle("JDK: {}", System.getProperty("java.home"))
|
||||
logger.lifecycle("Quasar version: {}", quasar_version)
|
||||
logger.lifecycle("Quasar classifier: {}", quasar_classifier.toString())
|
||||
logger.lifecycle("Building Corda version: {}", corda_release_version)
|
||||
logger.lifecycle("User home: {}", System.getProperty('user.home'))
|
||||
|
||||
allprojects {
|
||||
apply plugin: 'kotlin'
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'kotlin-allopen'
|
||||
apply plugin: 'jacoco'
|
||||
apply plugin: 'org.owasp.dependencycheck'
|
||||
apply plugin: 'kotlin-allopen'
|
||||
apply plugin: 'org.sonarqube'
|
||||
|
||||
allOpen {
|
||||
@ -289,19 +242,6 @@ allprojects {
|
||||
)
|
||||
}
|
||||
|
||||
// we do this to allow for Gradle task caching.
|
||||
// below block tells Gradle to ignore specifically the dymaically generated files in the manifest when checking if a file is up to date
|
||||
// this has no impact on publishing or production of jar, This only reates to Grades mechamish for verifying the Cache key
|
||||
normalization {
|
||||
runtimeClasspath {
|
||||
ignore("**/*.EC") //signing related
|
||||
ignore("**/*.SF") //signing related
|
||||
ignore("**/*.MF")
|
||||
ignore("**/*.kotlin_module")
|
||||
ignore("**/Cordapp-Dependencies")
|
||||
}
|
||||
}
|
||||
|
||||
dependencyCheck {
|
||||
suppressionFile = '.ci/dependency-checker/suppressedLibraries.xml'
|
||||
cveValidForHours = 1
|
||||
@ -316,12 +256,17 @@ allprojects {
|
||||
nugetconfEnabled = false
|
||||
}
|
||||
}
|
||||
sourceCompatibility = VERSION_1_8
|
||||
targetCompatibility = JavaVersion.current().isJava8() ? VERSION_1_8 : VERSION_11
|
||||
|
||||
sourceCompatibility = VERSION_17
|
||||
targetCompatibility = VERSION_17
|
||||
|
||||
jacoco {
|
||||
// JDK11 official support (https://github.com/jacoco/jacoco/releases/tag/v0.8.3)
|
||||
toolVersion = "0.8.3"
|
||||
toolVersion = "0.8.7"
|
||||
}
|
||||
|
||||
java {
|
||||
withSourcesJar()
|
||||
withJavadocJar()
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
@ -336,13 +281,13 @@ allprojects {
|
||||
options.encoding = 'UTF-8'
|
||||
}
|
||||
|
||||
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
|
||||
kotlinOptions {
|
||||
languageVersion = "1.2"
|
||||
apiVersion = "1.2"
|
||||
jvmTarget = VERSION_1_8
|
||||
tasks.withType(KotlinCompile).configureEach {
|
||||
compilerOptions {
|
||||
languageVersion = KOTLIN_1_9
|
||||
apiVersion = KOTLIN_1_9
|
||||
jvmTarget = JVM_17
|
||||
javaParameters = true // Useful for reflection.
|
||||
freeCompilerArgs = ['-Xjvm-default=compatibility']
|
||||
freeCompilerArgs = ['-Xjvm-default=all-compatibility']
|
||||
allWarningsAsErrors = warnings_as_errors
|
||||
}
|
||||
}
|
||||
@ -362,15 +307,14 @@ allprojects {
|
||||
attributes('Corda-Docs-Link': corda_docs_link)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
tasks.withType(Test).configureEach {
|
||||
jvmArgs += project(":node:capsule").file("src/main/resources/node-jvm-args.txt").readLines()
|
||||
jvmArgs += "--add-modules=jdk.incubator.foreign" // For the SharedMemoryIncremental
|
||||
forkEvery = 20
|
||||
ignoreFailures = project.hasProperty('tests.ignoreFailures') ? project.property('tests.ignoreFailures').toBoolean() : false
|
||||
failFast = project.hasProperty('tests.failFast') ? project.property('tests.failFast').toBoolean() : false
|
||||
|
||||
// Prevent the project from creating temporary files outside of the build directory.
|
||||
systemProperty 'java.io.tmpdir', buildDir.absolutePath
|
||||
|
||||
maxHeapSize = "1g"
|
||||
|
||||
if (project.path.startsWith(':experimental') && System.getProperty("experimental.test.enable") == null) {
|
||||
@ -380,25 +324,18 @@ allprojects {
|
||||
// Required to use Gradle build cache (until Gradle 5.0 is released with default value of "append" set to false)
|
||||
// See https://github.com/gradle/gradle/issues/5269 and https://github.com/gradle/gradle/pull/6419
|
||||
extensions.configure(TypeOf.typeOf(JacocoTaskExtension)) { ex ->
|
||||
ex.append = false
|
||||
// ex.append = false
|
||||
}
|
||||
|
||||
maxParallelForks = (System.env.CORDA_TESTING_FORKS == null) ? 1 : "$System.env.CORDA_TESTING_FORKS".toInteger()
|
||||
|
||||
systemProperty 'java.security.egd', 'file:/dev/./urandom'
|
||||
}
|
||||
|
||||
tasks.withType(Test).configureEach {
|
||||
if (name.contains("integrationTest")) {
|
||||
maxParallelForks = (System.env.CORDA_INT_TESTING_FORKS == null) ? 1 : "$System.env.CORDA_INT_TESTING_FORKS".toInteger()
|
||||
} else {
|
||||
maxParallelForks = (System.env.CORDA_TESTING_FORKS == null) ? 1 : "$System.env.CORDA_TESTING_FORKS".toInteger()
|
||||
}
|
||||
}
|
||||
|
||||
if (jdkClassifier) {
|
||||
jar {
|
||||
// JDK11 built and published artifacts to include classifier
|
||||
archiveClassifier = jdkClassifier
|
||||
}
|
||||
// Prevent the project from creating temporary files outside of the build directory.
|
||||
systemProperty 'java.io.tmpdir', buildDir.absolutePath
|
||||
systemProperty 'java.security.egd', 'file:/dev/./urandom'
|
||||
}
|
||||
|
||||
group 'net.corda'
|
||||
@ -439,6 +376,16 @@ allprojects {
|
||||
includeGroup 'com.github.bft-smart'
|
||||
includeGroup 'com.github.detro'
|
||||
}
|
||||
metadataSources {
|
||||
mavenPom()
|
||||
artifact()
|
||||
}
|
||||
}
|
||||
maven {
|
||||
url "${publicArtifactURL}/corda-dependencies-dev"
|
||||
content {
|
||||
includeGroup 'co.paralleluniverse'
|
||||
}
|
||||
}
|
||||
maven {
|
||||
url "${publicArtifactURL}/corda-dev"
|
||||
@ -468,12 +415,12 @@ allprojects {
|
||||
}
|
||||
|
||||
configurations {
|
||||
all {
|
||||
configureEach {
|
||||
resolutionStrategy {
|
||||
// Force dependencies to use the same version of Kotlin as Corda.
|
||||
force "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||
force "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||
if (pluginManager.hasPlugin("org.jetbrains.kotlin.jvm")) {
|
||||
// Force dependencies to use the same version of Kotlin as Corda.
|
||||
force "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
|
||||
}
|
||||
|
||||
// Force dependencies to use the same version of Guava as Corda.
|
||||
force "com.google.guava:guava:$guava_version"
|
||||
@ -508,7 +455,7 @@ allprojects {
|
||||
substitute module('commons-logging:commons-logging') with module("org.slf4j:jcl-over-slf4j:$slf4j_version")
|
||||
|
||||
// Remove any transitive dependency on Logback (e.g. Liquibase 3.6 introduces this dependency)
|
||||
substitute module('ch.qos.logback:logback-classic') with module("org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version")
|
||||
substitute module('ch.qos.logback:logback-classic') with module("org.apache.logging.log4j:log4j-slf4j2-impl:$log4j_version")
|
||||
|
||||
// Netty-All is an uber-jar which contains every Netty module.
|
||||
// Exclude it to force us to use the individual Netty modules instead.
|
||||
@ -519,27 +466,32 @@ allprojects {
|
||||
|
||||
// Effectively delete this unused and unwanted transitive dependency of Artemis.
|
||||
substitute module('org.jgroups:jgroups') with module("org.apache.activemq:artemis-commons:$artemis_version")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Select all of the compileClasspath and runtimeClasspath etc configurations,
|
||||
// but NOT the "classpath" configuration, as that is used by the Gradle plugins.
|
||||
matching { it.name.endsWith("Classpath") }.configureEach { cfg ->
|
||||
cfg.resolutionStrategy {
|
||||
dependencySubstitution {
|
||||
// Force dependencies to use the same version of Kotlin as Corda.
|
||||
substitute module('org.jetbrains.kotlin:kotlin-stdlib-jdk8') with module("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version")
|
||||
substitute module('org.jetbrains.kotlin:kotlin-stdlib-jdk7') with module("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version")
|
||||
substitute module('org.jetbrains.kotlin:kotlin-stdlib-common') with module("org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version")
|
||||
substitute module('org.jetbrains.kotlin:kotlin-stdlib') with module("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
|
||||
substitute module('org.jetbrains.kotlin:kotlin-reflect') with module("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
|
||||
// Force use of LTS version of BC everywhere
|
||||
substitute module('org.bouncycastle:bcutil-jdk18on') with module("org.bouncycastle:bcutil-lts8on:$bouncycastle_version")
|
||||
substitute module('org.bouncycastle:bcprov-jdk18on') with module("org.bouncycastle:bcprov-lts8on:$bouncycastle_version")
|
||||
substitute module('org.bouncycastle:bcpkix-jdk18on') with module("org.bouncycastle:bcpkix-lts8on:$bouncycastle_version")
|
||||
}
|
||||
|
||||
// FORCE Gradle to use latest SNAPSHOT dependencies.
|
||||
cacheChangingModulesFor 0, 'seconds'
|
||||
}
|
||||
}
|
||||
|
||||
if (pluginManager.hasPlugin("org.jetbrains.kotlin.jvm")) {
|
||||
// Select all of the compileClasspath and runtimeClasspath etc configurations,
|
||||
// but NOT the "classpath" configuration, as that is used by the Gradle plugins.
|
||||
matching { it.name.endsWith("Classpath") }.configureEach { cfg ->
|
||||
cfg.resolutionStrategy {
|
||||
dependencySubstitution {
|
||||
// Force dependencies to use the same version of Kotlin as Corda.
|
||||
substitute module('org.jetbrains.kotlin:kotlin-stdlib-common') with module("org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version")
|
||||
substitute module('org.jetbrains.kotlin:kotlin-stdlib') with module("org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version")
|
||||
substitute module('org.jetbrains.kotlin:kotlin-reflect') with module("org.jetbrains.kotlin:kotlin-reflect:$kotlin_version")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -554,37 +506,29 @@ sonarqube {
|
||||
}
|
||||
}
|
||||
|
||||
// Check that we are running on a Java 8 JDK. The source/targetCompatibility values above aren't sufficient to
|
||||
// guarantee this because those are properties checked by the Java plugin, but we're using Kotlin.
|
||||
//
|
||||
// We recommend a specific minor version (unfortunately, not checkable directly) because JavaFX adds APIs in
|
||||
// minor releases, so we can't work with just any Java 8, it has to be a recent one.
|
||||
if (!JavaVersion.current().java8Compatible)
|
||||
throw new GradleException("Corda requires Java 8, please upgrade to at least 1.8.0_$java8_minUpdateVersion")
|
||||
|
||||
configurations {
|
||||
detekt
|
||||
}
|
||||
|
||||
// Required for building out the fat JAR.
|
||||
dependencies {
|
||||
compile project(':node')
|
||||
compile "com.google.guava:guava:$guava_version"
|
||||
implementation project(':node')
|
||||
implementation "com.google.guava:guava:$guava_version"
|
||||
|
||||
// Set to corda compile to ensure it exists now deploy nodes no longer relies on build
|
||||
compile project(path: ":node:capsule", configuration: 'runtimeArtifacts')
|
||||
compile project(path: ":testing:testserver:testcapsule:", configuration: 'runtimeArtifacts')
|
||||
// Set to corda implementation to ensure it exists now deploy nodes no longer relies on build
|
||||
implementation project(path: ":node:capsule", configuration: 'runtimeArtifacts')
|
||||
implementation project(path: ":testing:testserver:testcapsule:", configuration: 'runtimeArtifacts')
|
||||
|
||||
// For the buildCordappDependenciesJar task
|
||||
runtime project(':client:jfx')
|
||||
runtime project(':client:mock')
|
||||
runtime project(':client:rpc')
|
||||
runtime project(':core')
|
||||
runtime project(':confidential-identities')
|
||||
runtime project(':finance:workflows')
|
||||
runtime project(':finance:contracts')
|
||||
runtime project(':testing:testserver')
|
||||
testCompile project(':test-utils')
|
||||
runtimeOnly project(':client:jfx')
|
||||
runtimeOnly project(':client:mock')
|
||||
runtimeOnly project(':client:rpc')
|
||||
runtimeOnly project(':core')
|
||||
runtimeOnly project(':confidential-identities')
|
||||
runtimeOnly project(':finance:workflows')
|
||||
runtimeOnly project(':finance:contracts')
|
||||
runtimeOnly project(':testing:testserver')
|
||||
testImplementation project(':test-utils')
|
||||
detekt 'io.gitlab.arturbosch.detekt:detekt-cli:1.0.1'
|
||||
}
|
||||
|
||||
@ -593,16 +537,16 @@ jar {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) {
|
||||
tasks.register('jacocoRootReport', JacocoReport) {
|
||||
dependsOn = subprojects.test
|
||||
additionalSourceDirs = files(subprojects.sourceSets.main.allSource.srcDirs)
|
||||
sourceDirectories = files(subprojects.sourceSets.main.allSource.srcDirs)
|
||||
classDirectories = files(subprojects.sourceSets.main.output)
|
||||
executionData = files(subprojects.jacocoTestReport.executionData)
|
||||
// additionalSourceDirs = files(subprojects.sourceSets.main.allSource.srcDirs)
|
||||
// sourceDirectories = files(subprojects.sourceSets.main.allSource.srcDirs)
|
||||
// classDirectories = files(subprojects.sourceSets.main.output)
|
||||
// executionData = files(subprojects.jacocoTestReport.executionData)
|
||||
reports {
|
||||
html.enabled = true
|
||||
xml.enabled = true
|
||||
csv.enabled = false
|
||||
html.required = true
|
||||
xml.required = true
|
||||
csv.required = false
|
||||
}
|
||||
onlyIf = {
|
||||
true
|
||||
@ -622,13 +566,13 @@ tasks.register('detekt', JavaExec) {
|
||||
def plugins = detektPluginsJar.outputs.files.singleFile
|
||||
def params = ['-i', input, '-c', config, '-b', baseline, '--plugins', plugins]
|
||||
inputs.files(detektPluginsJar, config, baseline)
|
||||
main = "io.gitlab.arturbosch.detekt.cli.Main"
|
||||
mainClass = "io.gitlab.arturbosch.detekt.cli.Main"
|
||||
classpath = configurations.detekt
|
||||
args(params)
|
||||
}
|
||||
|
||||
tasks.register('detektBaseline', JavaExec) {
|
||||
main = "io.gitlab.arturbosch.detekt.cli.Main"
|
||||
mainClass = "io.gitlab.arturbosch.detekt.cli.Main"
|
||||
classpath = configurations.detekt
|
||||
def input = "$projectDir"
|
||||
def config = "$projectDir/detekt-config.yml, $projectDir/detekt-baseline-config.yml"
|
||||
@ -638,103 +582,28 @@ tasks.register('detektBaseline', JavaExec) {
|
||||
}
|
||||
|
||||
tasks.withType(Test).configureEach {
|
||||
reports.html.destination = file("${reporting.baseDir}/${name}")
|
||||
reports.html.outputLocation.set(file("${reporting.baseDir}/${name}"))
|
||||
}
|
||||
|
||||
task testReport(type: TestReport) {
|
||||
tasks.register('testReport', TestReport) {
|
||||
destinationDir = file("$buildDir/reports/allTests")
|
||||
// Include the results from the `test` task in all subprojects
|
||||
reportOn subprojects*.test
|
||||
}
|
||||
|
||||
bintrayConfig {
|
||||
user = System.getenv('CORDA_BINTRAY_USER')
|
||||
key = System.getenv('CORDA_BINTRAY_KEY')
|
||||
repo = 'corda'
|
||||
org = 'r3'
|
||||
licenses = ['Apache-2.0']
|
||||
vcsUrl = 'https://github.com/corda/corda'
|
||||
projectUrl = 'https://github.com/corda/corda'
|
||||
gpgSign = true
|
||||
gpgPassphrase = System.getenv('CORDA_BINTRAY_GPG_PASSPHRASE')
|
||||
publications = [
|
||||
'corda-opentelemetry',
|
||||
'corda-opentelemetry-driver',
|
||||
'corda-jfx',
|
||||
'corda-mock',
|
||||
'corda-rpc',
|
||||
'corda-core',
|
||||
'corda',
|
||||
'corda-finance-workflows',
|
||||
'corda-finance-contracts',
|
||||
'corda-node',
|
||||
'corda-node-api',
|
||||
'corda-test-common',
|
||||
'corda-core-test-utils',
|
||||
'corda-test-utils',
|
||||
'corda-test-db',
|
||||
'corda-jackson',
|
||||
'corda-testserver-impl',
|
||||
'corda-testserver',
|
||||
'corda-node-driver',
|
||||
'corda-confidential-identities',
|
||||
'corda-shell',
|
||||
'corda-tools-shell-cli',
|
||||
'corda-serialization',
|
||||
'corda-tools-blob-inspector',
|
||||
'corda-tools-explorer',
|
||||
'corda-tools-network-bootstrapper',
|
||||
'corda-tools-cliutils',
|
||||
'corda-common-configuration-parsing',
|
||||
'corda-common-validation',
|
||||
'corda-common-logging',
|
||||
'corda-tools-network-builder',
|
||||
'corda-tools-checkpoint-agent'
|
||||
]
|
||||
license {
|
||||
name = 'Apache-2.0'
|
||||
url = 'https://www.apache.org/licenses/LICENSE-2.0'
|
||||
distribution = 'repo'
|
||||
}
|
||||
developer {
|
||||
id = 'R3'
|
||||
name = 'R3'
|
||||
email = 'dev@corda.net'
|
||||
}
|
||||
}
|
||||
|
||||
// Build a ZIP of all JARs required to compile the Cordapp template
|
||||
// Note: corda.jar is used at runtime so no runtime ZIP is necessary.
|
||||
// Resulting ZIP can be found in "build/distributions"
|
||||
task buildCordappDependenciesZip(type: Zip) {
|
||||
tasks.register('buildCordappDependenciesZip', Zip) {
|
||||
baseName 'corda-deps'
|
||||
from configurations.runtime
|
||||
from configurations.compile
|
||||
from configurations.testCompile
|
||||
from configurations.runtimeOnly
|
||||
from configurations.implementation
|
||||
from configurations.testImplementation
|
||||
from buildscript.configurations.classpath
|
||||
from 'node/capsule/NOTICE' // CDDL notice
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
}
|
||||
|
||||
artifactory {
|
||||
publish {
|
||||
contextUrl = artifactory_contextUrl
|
||||
repository {
|
||||
repoKey = 'corda-dev'
|
||||
username = System.getenv('CORDA_ARTIFACTORY_USERNAME')
|
||||
password = System.getenv('CORDA_ARTIFACTORY_PASSWORD')
|
||||
}
|
||||
|
||||
defaults {
|
||||
// Root project applies the plugin (for this block) but does not need to be published
|
||||
if (project != rootProject) {
|
||||
publications(project.extensions.publish.name())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register('generateApi', net.corda.plugins.apiscanner.GenerateApi) {
|
||||
tasks.register('generateApi', GenerateApi) {
|
||||
baseName = "api-corda"
|
||||
}
|
||||
|
||||
@ -770,7 +639,7 @@ if (file('corda-docs-only-build').exists() || (System.getenv('CORDA_DOCS_ONLY_BU
|
||||
}
|
||||
|
||||
wrapper {
|
||||
gradleVersion = '5.6.4'
|
||||
gradleVersion = '7.6.4'
|
||||
distributionType = Wrapper.DistributionType.ALL
|
||||
}
|
||||
|
||||
|
16
buildCacheSettings.gradle
Normal file
16
buildCacheSettings.gradle
Normal file
@ -0,0 +1,16 @@
|
||||
// Gradle Build Cache configuration recommendation: https://docs.gradle.org/current/userguide/build_cache.html
|
||||
ext {
|
||||
isCiServer = System.getenv().containsKey("CORDA_CI")
|
||||
gradleBuildCacheURL = System.getenv().containsKey("GRADLE_BUILD_CACHE_URL") ? System.getenv().get("GRADLE_BUILD_CACHE_URL") : 'http://localhost:5071/cache/'
|
||||
}
|
||||
|
||||
buildCache {
|
||||
local {
|
||||
enabled = !isCiServer
|
||||
}
|
||||
remote(HttpBuildCache) {
|
||||
enabled = isCiServer
|
||||
url = gradleBuildCacheURL
|
||||
push = isCiServer
|
||||
}
|
||||
}
|
@ -1,11 +1,56 @@
|
||||
plugins {
|
||||
id 'groovy-gradle-plugin'
|
||||
}
|
||||
|
||||
Properties constants = new Properties()
|
||||
file("$rootDir/../constants.properties").withInputStream { constants.load(it) }
|
||||
|
||||
def internalPublishVersion = constants.getProperty('internalPublishVersion')
|
||||
def artifactoryContextUrl = constants.getProperty('artifactoryContextUrl')
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
def cordaUseCache = System.getenv("CORDA_USE_CACHE")
|
||||
if (cordaUseCache != null) {
|
||||
maven {
|
||||
url = "${artifactoryContextUrl}/${cordaUseCache}"
|
||||
name = "R3 Maven remote repositories"
|
||||
authentication {
|
||||
basic(BasicAuthentication)
|
||||
}
|
||||
credentials {
|
||||
username = findProperty('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME')
|
||||
password = findProperty('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD')
|
||||
}
|
||||
metadataSources {
|
||||
mavenPom()
|
||||
artifact()
|
||||
ignoreGradleMetadataRedirection()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
maven {
|
||||
url "${artifactoryContextUrl}/engineering-tools-maven"
|
||||
authentication {
|
||||
basic(BasicAuthentication)
|
||||
}
|
||||
credentials {
|
||||
username = findProperty('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME')
|
||||
password = findProperty('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD')
|
||||
}
|
||||
content {
|
||||
includeGroupByRegex 'com\\.r3\\.internal(\\..*)?'
|
||||
}
|
||||
}
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile group: 'com.github.docker-java', name: 'docker-java', version: constants.dockerJavaVersion
|
||||
compile group: 'com.github.docker-java', name: 'docker-java-transport-httpclient5', version: constants.dockerJavaVersion
|
||||
implementation "com.github.docker-java:docker-java:$constants.dockerJavaVersion"
|
||||
implementation "com.github.docker-java:docker-java-transport-httpclient5:$constants.dockerJavaVersion"
|
||||
implementation "org.jooq:joor:$constants.joorVersion"
|
||||
|
||||
if (System.getenv('CORDA_ARTIFACTORY_USERNAME') != null || project.hasProperty('cordaArtifactoryUsername')) {
|
||||
implementation "com.r3.internal.gradle.plugins:publish:$internalPublishVersion"
|
||||
}
|
||||
}
|
||||
|
92
buildSrc/src/main/groovy/corda.common-publishing.gradle
Normal file
92
buildSrc/src/main/groovy/corda.common-publishing.gradle
Normal file
@ -0,0 +1,92 @@
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
// plugin to cater for R3 vs Non R3 users building code base. R3 employees will leverage internal plugins non
|
||||
// R3 users will use standard Maven publishing conventions as provided by the Maven-publish gradle plugin
|
||||
if (System.getenv('CORDA_ARTIFACTORY_USERNAME') != null || project.hasProperty('cordaArtifactoryUsername')) {
|
||||
logger.info("Internal R3 user - resolving publication build dependencies from internal plugins")
|
||||
pluginManager.apply('com.r3.internal.gradle.plugins.r3Publish')
|
||||
afterEvaluate {
|
||||
publishing {
|
||||
publications {
|
||||
configureEach {
|
||||
def repo = "https://github.com/corda/corda"
|
||||
pom {
|
||||
description = project.description
|
||||
name = project.name
|
||||
url = repo
|
||||
scm {
|
||||
url = repo
|
||||
}
|
||||
licenses {
|
||||
license {
|
||||
name = 'Apache-2.0'
|
||||
url = 'https://www.apache.org/licenses/LICENSE-2.0'
|
||||
distribution = 'repo'
|
||||
}
|
||||
}
|
||||
|
||||
developers {
|
||||
developer {
|
||||
id = 'R3'
|
||||
name = 'R3'
|
||||
email = 'dev@corda.net'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.info("External user - using standard maven publishing")
|
||||
pluginManager.apply('maven-publish')
|
||||
pluginManager.withPlugin('java') {
|
||||
afterEvaluate {
|
||||
publishing {
|
||||
if (publications.isEmpty()) {
|
||||
// If we haven't already created a MavenPublication then create one now.
|
||||
publications {
|
||||
maven(MavenPublication) {
|
||||
artifactId = tasks.named('jar', Jar).flatMap { it.archiveBaseName }.get()
|
||||
groupId group.toString()
|
||||
from findSoftwareComponent(components).get()
|
||||
|
||||
if (artifacts.matching { it.classifier == 'sources' }.isEmpty()) {
|
||||
try {
|
||||
artifact tasks.named('sourcesJar', Jar)
|
||||
} catch (UnknownTaskException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
artifact tasks.named('javadocJar', Jar)
|
||||
} catch (UnknownTaskException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(GenerateModuleMetadata).configureEach {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
tasks.register('install') {
|
||||
dependsOn 'publishToMavenLocal'
|
||||
}
|
||||
}
|
||||
|
||||
@CompileStatic
|
||||
private static Provider<SoftwareComponent> findSoftwareComponent(SoftwareComponentContainer components) {
|
||||
try {
|
||||
return components.named('cordapp')
|
||||
} catch (UnknownDomainObjectException ignored) {
|
||||
try {
|
||||
return components.named('kotlin')
|
||||
} catch (UnknownDomainObjectException ignored2) {
|
||||
return components.named('java')
|
||||
}
|
||||
}
|
||||
}
|