import groovy.json.JsonOutput import org.sonar.build.BlackBoxTest import static org.gradle.api.JavaVersion.VERSION_17 plugins { // Ordered alphabetically id 'com.github.hierynomus.license' version '0.16.1' id "com.github.hierynomus.license-report" version "0.16.1" apply false id 'com.github.johnrengelman.shadow' version '7.1.2' apply false id 'com.google.protobuf' version '0.8.19' apply false id 'com.jfrog.artifactory' version '4.32.0' id "de.undercouch.download" version "5.4.0" apply false id 'io.spring.dependency-management' version '1.1.0' id "org.cyclonedx.bom" version "1.7.4" apply false id 'org.sonarqube' version '4.2.1.3168' } if (!JavaVersion.current().isCompatibleWith(VERSION_17)) { throw new GradleException("JDK 17+ is required to perform this build. It's currently " + System.getProperty("java.home") + ".") } /** * The BOM related tasks are disabled by default, activated by: * - running in the CI and being on a main branch or a nightly build, * - or using '-Dbom' project property * - or by explicit call to 'cyclonedxBom' Gradle task */ def bomTasks = "cyclonedxBom" def ghBranch = System.getenv()["GITHUB_BRANCH"] def isMainBranch = ghBranch in ['master'] || ghBranch ==~ 'branch-[\\d.]+' def isNightlyBuild = ghBranch == "branch-nightly-build" boolean enableBom = System.getenv('CI') == "true" && (isMainBranch || isNightlyBuild) || System.getProperty("bom") != null || gradle.startParameter.taskNames.findAll({ it.matches(".*:($bomTasks)") }) allprojects { apply plugin: 'com.jfrog.artifactory' apply plugin: 'maven-publish' ext.versionInSources = version ext.buildNumber = System.getProperty("buildNumber") // when no buildNumber is provided, then project version must end with '-SNAPSHOT' if (ext.buildNumber == null) { version = "${version}-SNAPSHOT".toString() ext.versionWithoutBuildNumber = version } else { ext.versionWithoutBuildNumber = version version = (version.toString().count('.') == 1 ? "${version}.0.${ext.buildNumber}" : "${version}.${ext.buildNumber}").toString() } task cacheDependencies { doLast { configurations.each { conf -> if (conf.isCanBeResolved()) { if (conf.getName() != 'appZip') conf.resolve() } } } } ext { release = project.hasProperty('release') && project.getProperty('release') official = project.hasProperty('official') && project.getProperty('official') } ext.enableBom = enableBom if (!enableBom) { tasks.matching { it.name.matches(bomTasks) }.all({ logger.info("{} disabled", it.name); it.enabled = false }) } repositories { def repository = project.hasProperty('qa') ? 'sonarsource-qa' : 'sonarsource' // The environment variables ARTIFACTORY_PRIVATE_USERNAME and ARTIFACTORY_PRIVATE_PASSWORD are used on QA env (Jenkins) // On local box, please add artifactoryUsername and artifactoryPassword to ~/.gradle/gradle.properties def artifactoryUsername = System.env.'ARTIFACTORY_PRIVATE_USERNAME' ?: (project.hasProperty('artifactoryUsername') ? project.getProperty('artifactoryUsername') : '') def artifactoryPassword = System.env.'ARTIFACTORY_PRIVATE_PASSWORD' ?: (project.hasProperty('artifactoryPassword') ? project.getProperty('artifactoryPassword') : '') maven { if (artifactoryUsername && artifactoryPassword) { credentials { username artifactoryUsername password artifactoryPassword } } else { // Workaround for artifactory // https://www.jfrog.com/jira/browse/RTFACT-13797 repository = 'public' } url "https://repox.jfrog.io/repox/${repository}" } ivy { if (artifactoryUsername && artifactoryPassword) { credentials { username artifactoryUsername password artifactoryPassword } url "https://repox.jfrog.io/repox/sonarsource-bucket" patternLayout { artifact '/[organisation]/[module]/[module]-[revision].[ext]' } } else { // For public build url "https://artifacts.elastic.co/downloads/" patternLayout { artifact '/[organisation]/[module]-[revision].[ext]' } } metadataSources { artifact() } } } task allDependencies { dependsOn 'dependencies' } artifactory { clientConfig.setIncludeEnvVars(true) clientConfig.setEnvVarsExcludePatterns('*pass*,*psw*,*secret*,*MAVEN_CMD_LINE_ARGS*,sun.java.command,*token*,*login*,*key*,*signing*,*auth*,*pwd*') contextUrl = System.getenv('ARTIFACTORY_URL') publish { repository { repoKey = System.getenv('ARTIFACTORY_DEPLOY_REPO') username = System.getenv('ARTIFACTORY_DEPLOY_USERNAME') ?: project.properties.artifactoryUsername password = System.getenv('ARTIFACTORY_DEPLOY_PASSWORD') ?: project.properties.artifactoryPaswword } defaults { properties = [ 'build.name': 'sonar-enterprise', 'build.number': System.getenv('BUILD_NUMBER'), 'pr.branch.target': System.getenv('GITHUB_BASE_BRANCH'), 'pr.number': System.getenv('PULL_REQUEST'), 'vcs.branch': ghBranch, 'vcs.revision': System.getenv('GIT_SHA1'), 'version': version ] publications('mavenJava') publishPom = true publishIvy = false } } clientConfig.info.setBuildName('sonar-enterprise') clientConfig.info.setBuildNumber(System.getenv('BUILD_NUMBER')) // Define the artifacts to be deployed to https://binaries.sonarsource.com on releases clientConfig.info.addEnvironmentProperty('ARTIFACTS_TO_PUBLISH', "${project.group}:sonar-application:zip," + "com.sonarsource.sonarqube:sonarqube-developer:zip," + "com.sonarsource.sonarqube:sonarqube-datacenter:zip," + "com.sonarsource.sonarqube:sonarqube-enterprise:zip") // The name of this variable is important because it's used by the delivery process when extracting version from Artifactory build info. clientConfig.info.addEnvironmentProperty('PROJECT_VERSION', "${version}") } } apply plugin: 'org.sonarqube' sonar { properties { property 'sonar.projectName', projectTitle property 'sonar.projectVersion', "${versionInSources}-SNAPSHOT" property 'sonar.buildString', version } } tasks.named('wrapper') { distributionType = Wrapper.DistributionType.ALL } subprojects { apply plugin: 'com.github.hierynomus.license' apply plugin: 'io.spring.dependency-management' apply plugin: 'jacoco' apply plugin: 'java-library' apply plugin: 'idea' apply plugin: 'signing' // do not deploy to Artifactory by default artifactoryPublish.skip = true compileJava.options.encoding = "UTF-8" compileTestJava.options.encoding = "UTF-8" def testFixtureSrc = 'src/testFixtures' if (file(testFixtureSrc).exists()) { apply plugin: 'java-test-fixtures' } ext { protobufVersion = '3.22.2' springVersion = '5.3.28' } sonar { properties { property 'sonar.moduleKey', project.group + ':' + project.name } } sourceSets { test { resources { srcDirs += ['src/it/resources'] } java { srcDirs += ['src/it/java'] } } bbt { resources { srcDirs = ['src/bbt/resources'] } java { srcDirs = ['src/bbt/java'] } } } // Central place for definition dependency versions and exclusions. dependencyManagement { dependencies { // bundled plugin list -- keep it alphabetically ordered dependency 'com.sonarsource.abap:sonar-abap-plugin:3.12.0.4303' dependency 'com.sonarsource.cobol:sonar-cobol-plugin:5.3.0.6122' dependency 'com.sonarsource.cpp:sonar-cfamily-plugin:6.45.0.62016' dependency 'com.sonarsource.dbd:sonar-dbd-plugin:1.16.0.4300' dependency 'com.sonarsource.dbd:sonar-dbd-java-frontend-plugin:1.16.0.4300' dependency 'com.sonarsource.dbd:sonar-dbd-python-frontend-plugin:1.16.0.4300' dependency 'com.sonarsource.pli:sonar-pli-plugin:1.13.0.3651' dependency 'com.sonarsource.plsql:sonar-plsql-plugin:3.9.0.5181' dependency 'com.sonarsource.plugins.vb:sonar-vb-plugin:2.10.0.3598' dependency 'com.sonarsource.rpg:sonar-rpg-plugin:3.4.0.3394' dependency 'com.sonarsource.security:sonar-security-csharp-frontend-plugin:10.1.0.21056' dependency 'com.sonarsource.security:sonar-security-java-frontend-plugin:10.1.0.21056' dependency 'com.sonarsource.security:sonar-security-php-frontend-plugin:10.1.0.21056' dependency 'com.sonarsource.security:sonar-security-plugin:10.1.0.21056' dependency 'com.sonarsource.security:sonar-security-python-frontend-plugin:10.1.0.21056' dependency 'com.sonarsource.security:sonar-security-js-frontend-plugin:10.1.0.21056' dependency 'com.sonarsource.slang:sonar-apex-plugin:1.13.0.4374' dependency 'com.sonarsource.swift:sonar-swift-plugin:4.9.0.5915' dependency 'com.sonarsource.tsql:sonar-tsql-plugin:1.9.0.5692' dependency 'org.sonarsource.config:sonar-config-plugin:1.2.0.267' dependency 'org.sonarsource.dotnet:sonar-csharp-plugin:9.3.0.71466' dependency 'org.sonarsource.dotnet:sonar-vbnet-plugin:9.3.0.71466' dependency 'org.sonarsource.flex:sonar-flex-plugin:2.9.0.3375' dependency 'org.sonarsource.html:sonar-html-plugin:3.8.0.3510' dependency 'org.sonarsource.jacoco:sonar-jacoco-plugin:1.3.0.1538' dependency 'org.sonarsource.java:sonar-java-plugin:7.20.0.31692' dependency 'org.sonarsource.javascript:sonar-javascript-plugin:10.3.1.21905' dependency 'org.sonarsource.php:sonar-php-plugin:3.30.0.9766' dependency 'org.sonarsource.plugins.cayc:sonar-cayc-plugin:2.0.0.334' dependency 'org.sonarsource.python:sonar-python-plugin:4.3.0.11660' dependency 'org.sonarsource.slang:sonar-go-plugin:1.13.0.4374' dependency 'org.sonarsource.kotlin:sonar-kotlin-plugin:2.15.0.2579' dependency 'org.sonarsource.slang:sonar-ruby-plugin:1.13.0.4374' dependency 'org.sonarsource.slang:sonar-scala-plugin:1.13.0.4374' dependency "org.sonarsource.api.plugin:sonar-plugin-api:$pluginApiVersion" dependency "org.sonarsource.api.plugin:sonar-plugin-api-test-fixtures:$pluginApiVersion" dependency 'org.sonarsource.xml:sonar-xml-plugin:2.8.1.4006' dependency 'org.sonarsource.iac:sonar-iac-plugin:1.17.0.3976' dependency 'org.sonarsource.text:sonar-text-plugin:2.1.0.1163' // please keep this list alphabetically ordered dependencySet(group: 'ch.qos.logback', version: '1.3.8') { entry 'logback-access' entry 'logback-classic' entry 'logback-core' } dependency('commons-beanutils:commons-beanutils:1.9.4') { exclude 'commons-logging:commons-logging' } dependency 'commons-codec:commons-codec:1.15' dependency 'commons-dbutils:commons-dbutils:1.7' dependency 'commons-io:commons-io:2.13.0' dependency 'commons-lang:commons-lang:2.6' imports { mavenBom 'com.fasterxml.jackson:jackson-bom:2.15.2' } dependency 'com.eclipsesource.minimal-json:minimal-json:0.9.5' dependencySet(group: 'com.github.scribejava', version: '8.3.3') { entry 'scribejava-apis' entry 'scribejava-core' } dependency 'com.github.everit-org.json-schema:org.everit.json.schema:1.14.0' // This project is no longer maintained and was forked // by https://github.com/java-diff-utils/java-diff-utils // (io.github.java-diff-utils:java-diff-utils). dependency 'com.googlecode.java-diff-utils:diffutils:1.3.0' dependency('com.googlecode.json-simple:json-simple:1.1.1') { exclude 'junit:junit' } dependency 'io.prometheus:simpleclient:0.16.0' dependency 'io.prometheus:simpleclient_common:0.16.0' dependency 'io.prometheus:simpleclient_servlet:0.16.0' dependency 'com.google.code.findbugs:jsr305:3.0.2' dependency 'com.google.code.gson:gson:2.10.1' dependency('com.google.guava:guava:32.0.1-jre') { exclude 'com.google.errorprone:error_prone_annotations' exclude 'com.google.guava:listenablefuture' exclude 'com.google.j2objc:j2objc-annotations' exclude 'org.checkerframework:checker-qual' exclude 'org.codehaus.mojo:animal-sniffer-annotations' } dependency "com.google.protobuf:protobuf-java:${protobufVersion}" dependency 'com.h2database:h2:2.1.214' dependencySet(group: 'com.hazelcast', version: '5.3.1') { entry 'hazelcast' } // Documentation must be updated if mssql-jdbc is updated: https://github.com/SonarSource/sonarqube/commit/03e4773ebf6cba854cdcf57a600095f65f4f53e7 dependency('com.microsoft.sqlserver:mssql-jdbc:12.2.0.jre11') { exclude 'com.fasterxml.jackson.core:jackson-databind' } dependency 'com.onelogin:java-saml:2.9.0' dependency 'com.oracle.database.jdbc:ojdbc11:23.2.0.0' dependency 'org.aspectj:aspectjtools:1.9.19' dependencySet(group: 'com.squareup.okhttp3', version: '4.11.0') { entry 'okhttp' entry 'mockwebserver' entry 'okhttp-tls' } dependency 'org.json:json:20230618' dependency 'com.tngtech.java:junit-dataprovider:1.13.1' dependencySet(group: 'io.jsonwebtoken', version: '0.11.5') { entry 'jjwt-api' entry 'jjwt-impl' entry 'jjwt-jackson' } dependency 'com.auth0:java-jwt:4.4.0' dependency 'io.netty:netty-all:4.1.93.Final' dependency 'com.sun.mail:javax.mail:1.6.2' dependency 'javax.annotation:javax.annotation-api:1.3.2' dependency 'javax.inject:javax.inject:1' dependency 'javax.servlet:javax.servlet-api:4.0.1' dependency 'javax.xml.bind:jaxb-api:2.3.1' dependency 'junit:junit:4.13.2' dependency 'org.xmlunit:xmlunit-core:2.9.1' dependency 'org.xmlunit:xmlunit-matchers:2.9.1' dependency 'net.jpountz.lz4:lz4:1.3.0' dependency 'net.lightbody.bmp:littleproxy:1.1.0-beta-bmp-17' dependency 'org.awaitility:awaitility:4.2.0' dependency 'org.apache.commons:commons-csv:1.10.0' dependency 'org.apache.commons:commons-email:1.5' dependency 'com.zaxxer:HikariCP:5.0.1' dependency('org.apache.httpcomponents:httpclient:4.5.14') { exclude 'commons-logging:commons-logging' } // Be aware that Log4j is used by Elasticsearch client dependencySet(group: 'org.apache.logging.log4j', version: '2.20.0') { entry 'log4j-core' entry 'log4j-api' entry 'log4j-to-slf4j' } dependencySet(group: 'org.apache.tomcat.embed', version: '9.0.74') { entry 'tomcat-embed-core' entry('tomcat-embed-jasper') { exclude 'org.eclipse.jdt.core.compiler:ecj' } } dependency 'org.assertj:assertj-core:3.24.2' dependency 'org.assertj:assertj-guava:3.24.2' dependency('org.codehaus.sonar:sonar-channel:4.2') { exclude 'org.slf4j:slf4j-api' } dependency 'org.codehaus.sonar:sonar-classloader:1.0' dependency 'com.fasterxml.staxmate:staxmate:2.4.0' dependencySet(group: 'org.eclipse.jetty', version: '9.4.6.v20170531') { entry 'jetty-proxy' entry 'jetty-server' entry 'jetty-servlet' } // "elasticsearchDownloadUrlFile" and "elasticsearchDownloadSha512" must also be updated in gradle.properties dependency('org.elasticsearch.client:elasticsearch-rest-high-level-client:7.17.10') { exclude 'org.apache.logging.log4j:log4j-core' } dependency 'org.elasticsearch.plugin:transport-netty4-client:7.17.10' dependency 'org.elasticsearch:mocksocket:1.2' dependency 'org.codelibs.elasticsearch.module:analysis-common:7.17.9' dependency 'org.codelibs.elasticsearch.module:reindex:7.17.9' dependency 'org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r' dependency 'org.tmatesoft.svnkit:svnkit:1.10.11' dependency 'org.hamcrest:hamcrest-all:1.3' dependency 'org.jsoup:jsoup:1.16.1' dependency 'org.mindrot:jbcrypt:0.4' dependency('org.mockito:mockito-core:5.4.0') { exclude 'org.hamcrest:hamcrest-core' } dependency "org.springframework:spring-test:${springVersion}" dependency 'org.mybatis:mybatis:3.5.13' dependencySet(group: 'org.slf4j', version: '2.0.7') { entry 'jcl-over-slf4j' entry 'jul-to-slf4j' entry 'log4j-over-slf4j' entry 'slf4j-api' } dependency 'org.postgresql:postgresql:42.6.0' dependency 'org.reflections:reflections:0.10.2' dependency 'org.simpleframework:simple:5.1.6' dependency 'org.sonarsource.git.blame:git-files-blame:1.0.2.275' dependency 'org.sonarsource.orchestrator:sonar-orchestrator:3.42.0.312' dependency 'org.sonarsource.update-center:sonar-update-center-common:1.30.0.1030' dependency("org.springframework:spring-context:${springVersion}") { exclude 'commons-logging:commons-logging' } dependency ("org.springframework:spring-webmvc:${springVersion}") { exclude 'commons-logging:commons-logging' } dependency 'org.springdoc:springdoc-openapi-webmvc-core:1.7.0' dependency 'org.subethamail:subethasmtp:3.1.7' dependency 'org.yaml:snakeyaml:2.0' dependency 'org.hibernate:hibernate-validator:6.2.5.Final' dependency 'javax.el:javax.el-api:3.0.0' dependency 'org.glassfish:javax.el:3.0.0' dependency 'org.kohsuke:github-api:1.315' // please keep this list alphabetically ordered } } configurations { bbtCompile.extendsFrom testCompile bbtRuntime.extendsFrom testRuntime bbtImplementation.extendsFrom testImplementation // global exclusions all { // do not conflict with com.sun.mail:javax.mail exclude group: 'javax.mail', module: 'mail' } } tasks.withType(Javadoc) { options.addStringOption('Xdoclint:none', '-quiet') options.encoding = 'UTF-8' title = project.name + ' ' + versionWithoutBuildNumber } task sourcesJar(type: Jar, dependsOn: classes) { archiveClassifier = 'sources' from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { archiveClassifier = 'javadoc' from javadoc.destinationDir } // generate code before opening project in IDE (Eclipse or Intellij) task ide() { // empty by default. Dependencies are added to the task // when needed (see protobuf modules for example) } jacocoTestReport { reports { xml.required = true csv.required = false html.required = false } } normalization { runtimeClasspath { // Following classpath resources contain volatile data that changes in each CI build (build number, commit id, time), // so we exclude them from calculation of build cache key of test tasks: ignore 'META-INF/MANIFEST.MF' ignore 'sonar-api-version.txt' ignore 'sq-version.txt' } } ext.failedTests = [] test { jvmArgs '-Dfile.encoding=UTF8' maxHeapSize = '1G' systemProperty 'java.awt.headless', true testLogging { events "skipped", "failed" // verbose log for failed and skipped tests (by default the name of the tests are not logged) exceptionFormat 'full' // log the full stack trace (default is the 1st line of the stack trace) } jacoco { enabled = true // do not disable recording of code coverage, so that remote Gradle cache entry can be used locally includes = ['com.sonar.*', 'com.sonarsource.*', 'org.sonar.*', 'org.sonarqube.*', 'org.sonarsource.*'] } if (project.hasProperty('maxParallelTests')) { maxParallelForks = project.maxParallelTests as int } if (project.hasProperty('parallelTests')) { // See https://guides.gradle.org/performance/#parallel_test_execution maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 } afterTest { descriptor, result -> if (result.resultType == TestResult.ResultType.FAILURE) { String failedTest = " ${descriptor.className} > ${descriptor.name}" failedTests << failedTest } } } gradle.buildFinished { if (!failedTests.empty) { println "\nFailed tests:" failedTests.each { failedTest -> println failedTest } println "" } } def protoMainSrc = 'src/main/protobuf' def protoTestSrc = 'src/test/protobuf' if (file(protoMainSrc).exists() || file(protoTestSrc).exists()) { // protobuf must be applied after java apply plugin: 'com.google.protobuf' sourceSets.main.proto.srcDir protoMainSrc // in addition to the default 'src/main/proto' sourceSets.test.proto.srcDir protoTestSrc // in addition to the default 'src/test/proto' protobuf { protoc { artifact = "com.google.protobuf:protoc:${protobufVersion}" } } jar { exclude('**/*.proto') } idea { module { sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java") testSourceDirs += file("${protobuf.generatedFilesBaseDir}/test/java") generatedSourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java") generatedSourceDirs += file("${protobuf.generatedFilesBaseDir}/test/java") } } ide.dependsOn(['generateProto', 'generateTestProto']) } if (official) { jar { // do not break incremental build on non official versions manifest { attributes( 'Version': "${version}", 'Implementation-Build': System.getenv('GIT_SHA1'), 'Build-Time': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ) } } } license { header = rootProject.file('HEADER') strictCheck true encoding = 'UTF-8' mapping { java = 'SLASHSTAR_STYLE' js = 'SLASHSTAR_STYLE' ts = 'SLASHSTAR_STYLE' tsx = 'SLASHSTAR_STYLE' css = 'SLASHSTAR_STYLE' } includes(['**/*.java', '**/*.js', '**/*.ts', '**/*.tsx', '**/*.css']) } tasks.withType(GenerateModuleMetadata) { enabled = false } publishing { publications { mavenJava(MavenPublication) { pom { name = 'SonarQube' description = project.description url = 'http://www.sonarqube.org/' organization { name = 'SonarSource' url = 'http://www.sonarsource.com' } licenses { license { name = 'GNU LGPL 3' url = 'http://www.gnu.org/licenses/lgpl.txt' distribution = 'repo' } } scm { url = 'https://github.com/SonarSource/sonarqube' } developers { developer { id = 'sonarsource-team' name = 'SonarSource Team' } } } } } } tasks.withType(Test) { configurations { utMonitoring } dependencies { testImplementation project(":ut-monitoring") utMonitoring 'org.aspectj:aspectjweaver:1.9.19' } } tasks.withType(BlackBoxTest) { jacoco.enabled = false testClassesDirs = sourceSets.bbt.output.classesDirs classpath = sourceSets.bbt.runtimeClasspath configurations { includeInTestResources } dependencies { bbtRuntimeOnly 'com.microsoft.sqlserver:mssql-jdbc' bbtRuntimeOnly 'com.oracle.database.jdbc:ojdbc11' bbtRuntimeOnly 'org.postgresql:postgresql' bbtRuntimeOnly project(':plugins:sonar-xoo-plugin') bbtImplementation 'org.sonarsource.orchestrator:sonar-orchestrator' bbtImplementation project(":sonar-testing-harness") bbtImplementation project(":private:it-common") } } if (isNightlyBuild) { tasks.withType(Test) { doFirst { ext { aspectJWeaver = configurations.utMonitoring.resolvedConfiguration.resolvedArtifacts.find { it.name == 'aspectjweaver' } } jvmArgs "-javaagent:${aspectJWeaver.file}" } } } signing { def signingKeyId = findProperty("signingKeyId") def signingKey = findProperty("signingKey") def signingPassword = findProperty("signingPassword") useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword) required { return isMainBranch && gradle.taskGraph.hasTask(":artifactoryPublish") } sign publishing.publications } tasks.withType(Sign) { onlyIf { return !artifactoryPublish.skip && isMainBranch && gradle.taskGraph.hasTask(":artifactoryPublish") } } } gradle.projectsEvaluated { gradle -> // yarn_run tasks can't all run in parallel without random issues // this script ensure all yarn_run tasks run sequentially def yarnRunTasks = allprojects.findResults { it -> it.tasks.findByName('yarn_run') } yarnRunTasks.drop(1).eachWithIndex { it, i -> it.mustRunAfter(yarnRunTasks[0..i]) } } ext.osAdaptiveCommand = { commands -> def newCommands = [] if (System.properties['os.name'].toLowerCase().contains('windows')) { newCommands = ['cmd', '/c'] } newCommands.addAll(commands) return newCommands } tasks.named('sonarqube') { long taskStart doFirst { taskStart = System.currentTimeMillis() } doLast { long taskDuration = System.currentTimeMillis() - taskStart File outputFile = new File("/tmp/analysis-monitoring.log") outputFile.append(JsonOutput.toJson([category: "Analysis", suite: "Standalone", operation: "total", duration: taskDuration]) + '\n') } } on value='backport/48063/stable30'>backport/48063/stable30 Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/tests/Integration/Lib/IntegrationTestUserHome.php
blob: 57c48fa18e04b1282a18dec5cfae9652939d8d20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174