From 1a17e4302e4b63de6b4ce7c049441803b9471524 Mon Sep 17 00:00:00 2001 From: David Rautureau Date: Thu, 8 Feb 2018 15:01:19 +0100 Subject: [PATCH] Move To Gradle --- .gitignore | 7 +- .travis.yml | 13 +- build.gradle | 296 ++++ build.sh | 4 +- cix.sh | 68 +- cve-false-positives.xml | 17 - find-classpath-conflicts.sh | 7 - format-headers.sh | 4 - gradle.properties | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54333 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 172 ++ gradlew.bat | 84 + plugins/build.gradle | 3 + plugins/sonar-xoo-plugin/build.gradle | 44 + plugins/sonar-xoo-plugin/pom.xml | 75 - pom.xml | 1554 ----------------- quick-build.sh | 44 - run-db-unit-tests.sh | 10 +- run-integration-tests.sh | 12 +- run-perf-tests.sh | 7 +- run-upgrade-tests.sh | 8 +- scripts/logs.sh | 2 +- scripts/start.sh | 6 +- server/build.gradle | 5 + server/pom.xml | 59 - server/sonar-ce/build.gradle | 24 + server/sonar-ce/pom.xml | 68 - .../sonar/ce/queue/InternalCeQueueImpl.java | 6 +- server/sonar-db-core/build.gradle | 71 + server/sonar-db-core/pom.xml | 197 --- .../src/test/java/org/sonar/db/CreateDb.java | 49 + server/sonar-db-dao/build.gradle | 51 + server/sonar-db-dao/pom.xml | 109 -- server/sonar-db-migration/build.gradle | 42 + server/sonar-db-migration/pom.xml | 76 - server/sonar-db-testing/build.gradle | 15 + server/sonar-db-testing/pom.xml | 46 - server/sonar-main/build.gradle | 30 + server/sonar-main/pom.xml | 120 -- .../command/CommandFactoryImpl.java | 7 +- .../command/CommandFactoryImplTest.java | 16 +- server/sonar-plugin-bridge/build.gradle | 27 + server/sonar-plugin-bridge/pom.xml | 29 - server/sonar-process/build.gradle | 49 + server/sonar-process/pom.xml | 96 - server/sonar-qa-util/build.gradle | 29 + server/sonar-qa-util/pom.xml | 51 - .../org/sonarqube/qa/util/SelenideConfig.java | 2 +- server/sonar-server/build.gradle | 96 + server/sonar-server/pom.xml | 344 ---- .../main/java/org/sonar/ce/log/CeLogging.java | 2 +- .../org/sonar/server/app/EmbeddedTomcat.java | 1 + .../org/sonar/server/es/EsClientProvider.java | 3 +- server/sonar-web/build.gradle | 44 + server/sonar-web/pom.xml | 256 --- settings.gradle | 61 + sonar-application/assembly-common.xml | 19 - sonar-application/assembly.xml | 213 --- sonar-application/build.gradle | 148 ++ sonar-application/pom.xml | 271 --- .../src/main/assembly/logs/README.txt | 1 + sonar-check-api/build.gradle | 11 + sonar-check-api/pom.xml | 26 - sonar-core/build.gradle | 53 + sonar-core/pom.xml | 166 -- sonar-duplications/build.gradle | 18 + sonar-duplications/pom.xml | 73 - sonar-home/build.gradle | 28 + sonar-home/pom.xml | 52 - sonar-markdown/build.gradle | 28 + sonar-markdown/pom.xml | 44 - sonar-plugin-api-deps/build.gradle | 39 + sonar-plugin-api-deps/pom.xml | 231 --- sonar-plugin-api/build.gradle | 82 + sonar-plugin-api/pom.xml | 282 --- .../src/main/resources/sonar-api-version.txt | 2 +- .../src/main/resources/sq-version.txt | 2 +- sonar-scanner-engine-shaded/build.gradle | 11 + sonar-scanner-engine-shaded/pom.xml | 65 - sonar-scanner-engine/build.gradle | 63 + sonar-scanner-engine/pom.xml | 165 -- sonar-scanner-protocol/build.gradle | 34 + sonar-scanner-protocol/pom.xml | 104 -- sonar-testing-harness/build.gradle | 29 + sonar-testing-harness/pom.xml | 47 - .../test/i18n/BundleSynchronizedMatcher.java | 2 +- sonar-ws-generator/build.gradle | 23 + sonar-ws-generator/pom.xml | 88 - sonar-ws-generator/run.sh | 10 +- .../wsgenerator/ApiDefinitionDownloader.java | 9 +- .../org/sonarqube/wsgenerator/Helper.java | 2 +- sonar-ws/build.gradle | 39 + sonar-ws/pom.xml | 82 - stop.sh | 2 +- tests/build.gradle | 149 ++ .../access-secured-props-plugin/build.gradle | 19 + .../access-secured-props-plugin/pom.xml | 38 - .../backdating-customplugin/build.gradle | 31 + tests/plugins/backdating-customplugin/pom.xml | 82 - .../plugins/backdating-plugin-v1/build.gradle | 29 + tests/plugins/backdating-plugin-v1/pom.xml | 75 - .../plugins/backdating-plugin-v2/build.gradle | 29 + tests/plugins/backdating-plugin-v2/pom.xml | 75 - tests/plugins/base-auth-plugin/build.gradle | 25 + tests/plugins/base-auth-plugin/pom.xml | 57 - tests/plugins/batch-plugin/build.gradle | 18 + tests/plugins/batch-plugin/pom.xml | 37 - .../extension-lifecycle-plugin/build.gradle | 18 + .../extension-lifecycle-plugin/pom.xml | 36 - .../plugins/fake-billing-plugin/build.gradle | 19 + tests/plugins/fake-billing-plugin/pom.xml | 44 - .../fake-governance-plugin/build.gradle | 19 + tests/plugins/fake-governance-plugin/pom.xml | 44 - tests/plugins/foo-plugin-v1/build.gradle | 29 + tests/plugins/foo-plugin-v1/pom.xml | 75 - tests/plugins/foo-plugin-v2/build.gradle | 29 + tests/plugins/foo-plugin-v2/pom.xml | 75 - .../build.gradle | 18 + .../global-property-change-plugin/pom.xml | 39 - .../plugins/issue-filter-plugin/build.gradle | 18 + tests/plugins/issue-filter-plugin/pom.xml | 39 - tests/plugins/l10n-fr-pack/build.gradle | 18 + tests/plugins/l10n-fr-pack/pom.xml | 52 - tests/plugins/license-plugin/build.gradle | 18 + tests/plugins/license-plugin/pom.xml | 38 - tests/plugins/oauth2-auth-plugin/build.gradle | 18 + tests/plugins/oauth2-auth-plugin/pom.xml | 45 - tests/plugins/pom.xml | 69 - tests/plugins/posttask-plugin/build.gradle | 18 + tests/plugins/posttask-plugin/pom.xml | 39 - .../project-builder-plugin/build.gradle | 18 + tests/plugins/project-builder-plugin/pom.xml | 36 - .../property-relocation-plugin/build.gradle | 18 + .../property-relocation-plugin/pom.xml | 39 - .../plugins/property-sets-plugin/build.gradle | 18 + tests/plugins/property-sets-plugin/pom.xml | 42 - tests/plugins/security-plugin/build.gradle | 29 + tests/plugins/security-plugin/pom.xml | 59 - tests/plugins/server-plugin/build.gradle | 18 + tests/plugins/server-plugin/pom.xml | 39 - .../settings-encryption-plugin/build.gradle | 18 + .../settings-encryption-plugin/pom.xml | 36 - tests/plugins/settings-plugin/build.gradle | 18 + tests/plugins/settings-plugin/pom.xml | 40 - tests/plugins/sonar-fake-plugin/build.gradle | 19 + tests/plugins/sonar-fake-plugin/pom.xml | 40 - .../sonar-subcategories-plugin/build.gradle | 18 + .../sonar-subcategories-plugin/pom.xml | 58 - .../plugins/ui-extensions-plugin/build.gradle | 18 + tests/plugins/ui-extensions-plugin/pom.xml | 39 - .../build.gradle | 18 + .../wait-at-platform-level4-plugin/pom.xml | 51 - tests/plugins/ws-plugin/build.gradle | 22 + tests/plugins/ws-plugin/pom.xml | 43 - tests/pom.xml | 282 --- .../java/org/sonarqube/tests/Byteman.java | 9 +- .../org/sonarqube/tests/Category1Suite.java | 6 +- .../org/sonarqube/tests/Category3Suite.java | 7 +- .../org/sonarqube/tests/Category4Suite.java | 6 +- .../org/sonarqube/tests/Category6Suite.java | 6 +- .../analysis/AnalysisEsResilienceTest.java | 3 +- .../authorization/AuthorizationSuite.java | 8 +- .../sonarqube/tests/ce/CeShutdownTest.java | 3 +- .../org/sonarqube/tests/ce/CeWorkersTest.java | 3 +- .../tests/component/ComponentSuite.java | 5 +- .../tests/duplication/DuplicationSuite.java | 6 +- .../IssueCreationDatePluginChangedTest.java | 3 +- .../org/sonarqube/tests/issue/IssueSuite.java | 6 +- .../tests/issue/OrganizationIssueSuite.java | 6 +- .../org/sonarqube/tests/lite/LiteTest.java | 3 +- .../tests/marketplace/UpdateCenterTest.java | 3 +- .../sonarqube/tests/measure/MeasureSuite.java | 6 +- .../tests/organization/OrganizationSuite.java | 6 +- .../scanner/ScannerPerformanceSuite.java | 8 +- .../server/ComputeEnginePerfTest.java | 8 +- .../performance/server/ServerPerfTest.java | 6 +- .../tests/plugins/CompressPluginsTest.java | 4 +- .../sonarqube/tests/plugins/PluginsTest.java | 7 +- .../sonarqube/tests/project/ProjectSuite.java | 5 +- .../tests/project/SonarCloudProjectSuite.java | 3 +- .../OrganizationQualityGateSuite.java | 6 +- .../tests/qualityGate/QualityGateSuite.java | 6 +- .../tests/qualityModel/QualityModelSuite.java | 6 +- .../ActiveRuleEsResilienceTest.java | 3 +- ...uiltInQualityProfilesNotificationTest.java | 7 +- .../tests/rule/RuleEsResilienceTest.java | 3 +- .../tests/rule/RuleReKeyingTest.java | 3 +- .../tests/serverSystem/RestartTest.java | 4 +- .../ServerSystemRestartingOrchestrator.java | 9 +- .../tests/serverSystem/SystemStateTest.java | 3 +- .../SettingsTestRestartingOrchestrator.java | 6 +- .../sonarqube/tests/source/SourceSuite.java | 5 +- .../tests/startup/StartupIndexationTest.java | 3 +- .../tests/telemetry/TelemetryOptOutTest.java | 3 +- .../tests/telemetry/TelemetryUploadTest.java | 5 +- .../org/sonarqube/tests/test/TestSuite.java | 6 +- .../sonarqube/tests/upgrade/UpgradeTest.java | 15 +- .../sonarqube/tests/user/OnboardingTest.java | 3 +- .../tests/user/RealmAuthenticationTest.java | 3 +- .../tests/user/SsoAuthenticationTest.java | 3 +- .../tests/user/UserEsResilienceTest.java | 3 +- .../org/sonarqube/tests/user/UserSuite.java | 3 +- .../tests/webhook/WebhooksSuite.java | 3 +- tests/src/test/java/util/ItUtils.java | 21 +- third-party-licenses.sh | 4 - travis.sh | 126 +- 207 files changed, 2804 insertions(+), 7202 deletions(-) create mode 100644 build.gradle delete mode 100644 cve-false-positives.xml delete mode 100755 find-classpath-conflicts.sh delete mode 100755 format-headers.sh create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 plugins/build.gradle create mode 100644 plugins/sonar-xoo-plugin/build.gradle delete mode 100644 plugins/sonar-xoo-plugin/pom.xml delete mode 100644 pom.xml delete mode 100755 quick-build.sh create mode 100644 server/build.gradle delete mode 100644 server/pom.xml create mode 100644 server/sonar-ce/build.gradle delete mode 100644 server/sonar-ce/pom.xml create mode 100644 server/sonar-db-core/build.gradle delete mode 100644 server/sonar-db-core/pom.xml create mode 100644 server/sonar-db-core/src/test/java/org/sonar/db/CreateDb.java create mode 100644 server/sonar-db-dao/build.gradle delete mode 100644 server/sonar-db-dao/pom.xml create mode 100644 server/sonar-db-migration/build.gradle delete mode 100644 server/sonar-db-migration/pom.xml create mode 100644 server/sonar-db-testing/build.gradle delete mode 100644 server/sonar-db-testing/pom.xml create mode 100644 server/sonar-main/build.gradle delete mode 100644 server/sonar-main/pom.xml create mode 100644 server/sonar-plugin-bridge/build.gradle delete mode 100644 server/sonar-plugin-bridge/pom.xml create mode 100644 server/sonar-process/build.gradle delete mode 100644 server/sonar-process/pom.xml create mode 100644 server/sonar-qa-util/build.gradle delete mode 100644 server/sonar-qa-util/pom.xml create mode 100644 server/sonar-server/build.gradle delete mode 100644 server/sonar-server/pom.xml create mode 100644 server/sonar-web/build.gradle delete mode 100644 server/sonar-web/pom.xml create mode 100644 settings.gradle delete mode 100644 sonar-application/assembly-common.xml delete mode 100644 sonar-application/assembly.xml create mode 100644 sonar-application/build.gradle delete mode 100644 sonar-application/pom.xml create mode 100644 sonar-application/src/main/assembly/logs/README.txt create mode 100644 sonar-check-api/build.gradle delete mode 100644 sonar-check-api/pom.xml create mode 100644 sonar-core/build.gradle delete mode 100644 sonar-core/pom.xml create mode 100644 sonar-duplications/build.gradle delete mode 100644 sonar-duplications/pom.xml create mode 100644 sonar-home/build.gradle delete mode 100644 sonar-home/pom.xml create mode 100644 sonar-markdown/build.gradle delete mode 100644 sonar-markdown/pom.xml create mode 100644 sonar-plugin-api-deps/build.gradle delete mode 100644 sonar-plugin-api-deps/pom.xml create mode 100644 sonar-plugin-api/build.gradle delete mode 100644 sonar-plugin-api/pom.xml create mode 100644 sonar-scanner-engine-shaded/build.gradle delete mode 100644 sonar-scanner-engine-shaded/pom.xml create mode 100644 sonar-scanner-engine/build.gradle delete mode 100644 sonar-scanner-engine/pom.xml create mode 100644 sonar-scanner-protocol/build.gradle delete mode 100644 sonar-scanner-protocol/pom.xml create mode 100644 sonar-testing-harness/build.gradle delete mode 100644 sonar-testing-harness/pom.xml create mode 100644 sonar-ws-generator/build.gradle delete mode 100644 sonar-ws-generator/pom.xml create mode 100644 sonar-ws/build.gradle delete mode 100644 sonar-ws/pom.xml create mode 100644 tests/build.gradle create mode 100644 tests/plugins/access-secured-props-plugin/build.gradle delete mode 100644 tests/plugins/access-secured-props-plugin/pom.xml create mode 100644 tests/plugins/backdating-customplugin/build.gradle delete mode 100644 tests/plugins/backdating-customplugin/pom.xml create mode 100644 tests/plugins/backdating-plugin-v1/build.gradle delete mode 100644 tests/plugins/backdating-plugin-v1/pom.xml create mode 100644 tests/plugins/backdating-plugin-v2/build.gradle delete mode 100644 tests/plugins/backdating-plugin-v2/pom.xml create mode 100644 tests/plugins/base-auth-plugin/build.gradle delete mode 100644 tests/plugins/base-auth-plugin/pom.xml create mode 100644 tests/plugins/batch-plugin/build.gradle delete mode 100644 tests/plugins/batch-plugin/pom.xml create mode 100644 tests/plugins/extension-lifecycle-plugin/build.gradle delete mode 100644 tests/plugins/extension-lifecycle-plugin/pom.xml create mode 100644 tests/plugins/fake-billing-plugin/build.gradle delete mode 100644 tests/plugins/fake-billing-plugin/pom.xml create mode 100644 tests/plugins/fake-governance-plugin/build.gradle delete mode 100644 tests/plugins/fake-governance-plugin/pom.xml create mode 100644 tests/plugins/foo-plugin-v1/build.gradle delete mode 100644 tests/plugins/foo-plugin-v1/pom.xml create mode 100644 tests/plugins/foo-plugin-v2/build.gradle delete mode 100644 tests/plugins/foo-plugin-v2/pom.xml create mode 100644 tests/plugins/global-property-change-plugin/build.gradle delete mode 100644 tests/plugins/global-property-change-plugin/pom.xml create mode 100644 tests/plugins/issue-filter-plugin/build.gradle delete mode 100644 tests/plugins/issue-filter-plugin/pom.xml create mode 100644 tests/plugins/l10n-fr-pack/build.gradle delete mode 100644 tests/plugins/l10n-fr-pack/pom.xml create mode 100644 tests/plugins/license-plugin/build.gradle delete mode 100644 tests/plugins/license-plugin/pom.xml create mode 100644 tests/plugins/oauth2-auth-plugin/build.gradle delete mode 100644 tests/plugins/oauth2-auth-plugin/pom.xml delete mode 100644 tests/plugins/pom.xml create mode 100644 tests/plugins/posttask-plugin/build.gradle delete mode 100644 tests/plugins/posttask-plugin/pom.xml create mode 100644 tests/plugins/project-builder-plugin/build.gradle delete mode 100644 tests/plugins/project-builder-plugin/pom.xml create mode 100644 tests/plugins/property-relocation-plugin/build.gradle delete mode 100644 tests/plugins/property-relocation-plugin/pom.xml create mode 100644 tests/plugins/property-sets-plugin/build.gradle delete mode 100644 tests/plugins/property-sets-plugin/pom.xml create mode 100644 tests/plugins/security-plugin/build.gradle delete mode 100644 tests/plugins/security-plugin/pom.xml create mode 100644 tests/plugins/server-plugin/build.gradle delete mode 100644 tests/plugins/server-plugin/pom.xml create mode 100644 tests/plugins/settings-encryption-plugin/build.gradle delete mode 100644 tests/plugins/settings-encryption-plugin/pom.xml create mode 100644 tests/plugins/settings-plugin/build.gradle delete mode 100644 tests/plugins/settings-plugin/pom.xml create mode 100644 tests/plugins/sonar-fake-plugin/build.gradle delete mode 100644 tests/plugins/sonar-fake-plugin/pom.xml create mode 100644 tests/plugins/sonar-subcategories-plugin/build.gradle delete mode 100644 tests/plugins/sonar-subcategories-plugin/pom.xml create mode 100644 tests/plugins/ui-extensions-plugin/build.gradle delete mode 100644 tests/plugins/ui-extensions-plugin/pom.xml create mode 100644 tests/plugins/wait-at-platform-level4-plugin/build.gradle delete mode 100644 tests/plugins/wait-at-platform-level4-plugin/pom.xml create mode 100644 tests/plugins/ws-plugin/build.gradle delete mode 100644 tests/plugins/ws-plugin/pom.xml delete mode 100644 tests/pom.xml delete mode 100755 third-party-licenses.sh diff --git a/.gitignore b/.gitignore index fadc2446785..80ca88f2fc1 100644 --- a/.gitignore +++ b/.gitignore @@ -7,14 +7,13 @@ server/sonar-web/src/main/webapp/WEB-INF/log/ server/sonar-web/src/main/webapp/deploy/*.jar server/sonar-web/src/main/webapp/deploy/jdbc-driver.txt +# ---- Gradle +build/ +.gradle/ # ---- Javadoc docs.tar -# ---- Maven -target/ -dependency-reduced-pom.xml - # ---- IntelliJ IDEA *.iws *.iml diff --git a/.travis.yml b/.travis.yml index 960ab66f8d7..1b1eb237819 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,17 +14,16 @@ matrix: cache: directories: - - $HOME/.m2/repository - $HOME/.sonar - - server/sonar-web/node - - server/sonar-web/node_modules - $HOME/jvm - - $HOME/maven + - $HOME/.gradle/caches/ + - $HOME/.gradle/wrapper/ before_cache: - # remove all the artifacts (JAR, ZIP) that are installed in local repo because of mvn deploy - - rm -rf $HOME/.m2/repository/org/sonarsource/sonarqube - - find $HOME/.m2 -name resolver-status.properties -exec rm {} \; + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ + - rm -fr $HOME/.gradle/caches/*/fileHashes/ + - rm -fr $HOME/.gradle/caches/*/scripts/ notifications: email: false diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000000..4ba10851def --- /dev/null +++ b/build.gradle @@ -0,0 +1,296 @@ +buildscript { + repositories { + maven { + url 'https://plugins.gradle.org/m2/' + } + } + dependencies { + // check updates with https://plugins.gradle.org/ + // Ordered alphabeticly to avoid duplication + classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2' + classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.4' + classpath 'com.moowork.gradle:gradle-node-plugin:1.2.0' + classpath 'io.spring.gradle:dependency-management-plugin:1.0.4.RELEASE' + classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.6.2' + classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2' + } +} + +// Analyze SonarQube with SonarQube! +apply plugin: 'org.sonarqube' +sonarqube { + properties { + property 'sonar.projectName', projectTitle + } +} + +allprojects { + apply plugin: 'com.jfrog.artifactory' + apply plugin: 'maven-publish' + + // Replaces the version defined in sources, usually x.y-SNAPSHOT, by a version identifying the build. + def buildNumber = System.getProperty("buildNumber") + if (version.endsWith('-SNAPSHOT') && buildNumber != null) { + version = version.replace('-SNAPSHOT', ".0.$buildNumber") + } + + ext { + release = project.hasProperty('release') && project.getProperty('release') + } + + repositories { + def repository = project.hasProperty('cix') ? 'sonarsource-qa' : 'sonarsource' + maven { + url "https://repox.sonarsource.com/${repository}" + def artifactoryUsername = System.env.'ARTIFACTORY_PRIVATE_USERNAME' + def artifactoryPassword = System.env.'ARTIFACTORY_PRIVATE_PASSWORD' + if (artifactoryUsername && artifactoryPassword) { + credentials { + username artifactoryUsername + password artifactoryPassword + } + } + } + } +} + +subprojects { + apply plugin: 'io.spring.dependency-management' + apply plugin: 'java' + // protobuf must be applied after java + apply plugin: 'com.google.protobuf' + apply plugin: "jacoco" + apply plugin: 'idea' + + // do not deploy to Artifactory by default + artifactoryPublish.skip = true + + ext { + elasticsearchVersion = '5.6.3' + protobufVersion = '3.5.1' + } + + sonarqube { + properties { + property 'sonar.moduleKey', project.group + ':' + project.name + } + } + + // Central place for definition dependency versions and exclusions. + dependencyManagement { + dependencies { + // please keep this list alphabetically ordered + dependencySet(group: 'ch.qos.logback', version: '1.2.3') { + entry 'logback-access' + entry 'logback-classic' + entry 'logback-core' + } + dependency('commons-beanutils:commons-beanutils:1.8.3') { + exclude 'commons-logging:commons-logging' + } + dependency 'commons-codec:commons-codec:1.8' + dependency 'commons-dbcp:commons-dbcp:1.4' + dependency 'commons-dbutils:commons-dbutils:1.5' + dependency 'commons-io:commons-io:2.4' + dependency 'commons-lang:commons-lang:2.6' + dependencySet(group: 'com.fasterxml.jackson.core', version: '2.6.6') { + entry 'jackson-core' + entry 'jackson-databind' + entry 'jackson-annotations' + } + dependency 'com.github.kevinsawicki:http-request:5.4.1' + dependency 'com.github.tlrx:elasticsearch-test:1.2.1' + dependency 'com.googlecode.java-diff-utils:diffutils:1.2' + dependency('com.googlecode.json-simple:json-simple:1.1.1') { + exclude 'junit:junit' + } + dependency 'com.google.code.findbugs:jsr305:3.0.2' + dependency 'com.google.code.gson:gson:2.3.1' + dependency 'com.google.guava:guava:18.0' + dependency "com.google.protobuf:protobuf-java:${protobufVersion}" + dependency 'com.h2database:h2:1.3.176' + dependencySet(group: 'com.hazelcast', version: '3.8.6') { + entry 'hazelcast' + entry 'hazelcast-client' + } + dependency 'com.ibm.icu:icu4j:3.4.4' + dependency 'com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8' + dependency 'com.oracle.jdbc:ojdbc8:12.2.0.1.0' + dependencySet(group: 'com.squareup.okhttp3', version: '3.7.0') { + entry 'okhttp' + entry 'mockwebserver' + } + dependency 'com.tngtech.java:junit-dataprovider:1.9.2' + dependency 'io.jsonwebtoken:jjwt:0.9.0' + dependency 'javax.servlet:javax.servlet-api:3.0.1' + dependency 'javax.xml.bind:jaxb-api:2.3.0' + dependency 'junit:junit:4.12' + dependency 'mysql:mysql-connector-java:5.1.42' + dependency 'net.jpountz.lz4:lz4:1.3.0' + dependency 'org.apache.commons:commons-csv:1.4' + dependency 'org.apache.commons:commons-email:1.5' + dependency('org.apache.httpcomponents:httpclient:4.5.2'){ + exclude 'commons-logging:commons-logging' + } + // Be aware that Log4j is used by Elasticsearch client + dependencySet(group: 'org.apache.logging.log4j', version: '2.8.2') { + entry 'log4j-api' + entry 'log4j-to-slf4j' + entry 'log4j-core' + } + dependencySet(group: 'org.apache.tomcat.embed', version: '8.5.23') { + entry 'tomcat-embed-core' + entry('tomcat-embed-jasper') { + exclude 'org.eclipse.jdt.core.compiler:ecj' + } + } + dependency 'org.assertj:assertj-core:3.9.0' + dependency 'org.assertj:assertj-guava:3.1.0' + dependency('org.codehaus.sonar:sonar-channel:4.1') { + exclude 'org.slf4j:slf4j-api' + } + dependency 'org.codehaus.sonar:sonar-classloader:1.0' + dependency('org.codehaus.woodstox:woodstox-core-lgpl:4.4.0') { + exclude 'javax.xml.stream:stax-api' + } + dependency 'org.codehaus.sonar.runner:sonar-runner-api:2.4' + dependency('org.codehaus.sonar:sonar-squid:4.1') { + exclude 'org.codehaus.sonar:sonar-check-api' + } + dependency('org.codehaus.staxmate:staxmate:2.0.1') { + exclude 'org.codehaus.woodstox:stax2-api' + exclude 'stax:stax-api' + exclude 'org.codehaus.woodstox:woodstox-core-asl' + } + dependency('org.codehaus.woodstox:stax2-api:3.1.4') { + exclude 'stax:stax-api' + } + dependency('org.dbunit:dbunit:2.4.5') { + exclude 'commons-lang:commons-lang' + exclude 'xerces:xmlParserAPIs' + exclude 'xerces:xercesImpl' + } + dependency 'org.eclipse.jetty:jetty-server:8.1.12.v20130726' + dependency 'org.eclipse.jetty:test-jetty-servlet:8.1.12.v20130726' + dependency("org.elasticsearch.client:transport:${elasticsearchVersion}") { + exclude 'org.elasticsearch.plugin:lang-mustache-client' + exclude 'org.elasticsearch.plugin:transport-netty3-client' + exclude 'commons-logging:commons-logging' + exclude 'org.elasticsearch.plugin:reindex-client' + } + dependency 'org.freemarker:freemarker:2.3.20' + dependency 'org.hamcrest:hamcrest-all:1.3' + dependency('org.mockito:mockito-core:2.13.0') { + exclude 'org.hamcrest:hamcrest-core' + } + dependency 'org.mybatis:mybatis:3.4.4' + dependency 'org.nanohttpd:nanohttpd:2.3.0' + dependency 'org.picocontainer:picocontainer:2.15' + dependencySet(group: 'org.slf4j', version: '1.7.25') { + entry 'slf4j-api' + entry 'jul-to-slf4j' + entry 'log4j-over-slf4j' + } + dependency 'org.postgresql:postgresql:42.2.1' + dependency 'org.reflections:reflections:0.9.9' + dependency 'org.simpleframework:simple:4.1.21' + dependency 'org.sonarsource.orchestrator:sonar-orchestrator:3.16.1.1446' + dependency('org.sonarsource:sonar-persistit:3.3.2') { + exclude 'commons-logging:commons-logging' + } + dependency 'org.sonarsource.update-center:sonar-update-center-common:1.18.0.487' + dependency 'org.subethamail:subethasmtp:3.1.7' + dependency 'xml-apis:xml-apis:1.4.01' + + // please keep this list alphabetically ordered + } + } + + sourceCompatibility = 1.8 + tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' + } + + tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') + } + + task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource + } + + task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir + } + + test { + systemProperty 'java.awt.headless', true + jacoco.enabled = project.hasProperty('jacocoEnabled') + testLogging { + exceptionFormat 'full' // log the full stack trace (default is the 1st line of the stack trace) + events "skipped", "failed" // verbose log for failed and skipped tests (by default the name of the tests are not logged) + } + } + + def protoMainSrc = 'src/main/protobuf' + def protoTestSrc = 'src/test/protobuf' + if (file(protoMainSrc).exists() || file(protoTestSrc).exists()) { + 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}" + } + } + idea { + module { + sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java") + testSourceDirs += file("${protobuf.generatedFilesBaseDir}/test/java") + } + } + } + + if (release) { + jar { + // do not break incremental build on non-release versions + manifest { + attributes( + 'Version': "${version}", + 'Implementation-Build': 'git rev-parse HEAD'.execute().text.trim(), + 'Build-Time': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ) + } + } + } +} + +artifactory { + clientConfig.setIncludeEnvVars(true) + clientConfig.setEnvVarsExcludePatterns('*password*,*PASSWORD*,*secret*,*MAVEN_CMD_LINE_ARGS*,sun.java.command,*token*,*TOKEN*,*LOGIN*,*login*') + contextUrl = System.getenv('ARTIFACTORY_URL') + publish { + repository { + repoKey = System.getenv('ARTIFACTORY_DEPLOY_REPO') + username = System.getenv('ARTIFACTORY_DEPLOY_USERNAME') + password = System.getenv('ARTIFACTORY_DEPLOY_PASSWORD') + } + defaults { + properties = [ + 'vcs.revision': System.getenv('GIT_COMMIT'), + 'vcs.branch': System.getenv('GIT_BRANCH'), + 'build.name': 'sonarqube', + 'build.number': (System.getenv('BUILD_ID') ?: System.getenv('BUILD_NUMBER')) + ] + publications('mavenJava') + publishPom = true + publishIvy = false + } + } + clientConfig.info.setBuildNumber(System.getenv('BUILD_NUMBER')) + // Define the artifacts to be deployed to https://sonarsource.bintray.com on releases + clientConfig.info.addEnvironmentProperty('ARTIFACTS_TO_PUBLISH', "${project.group}:sonar-application: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}") +} diff --git a/build.sh b/build.sh index 47bc89e9e2b..91b40fb5166 100755 --- a/build.sh +++ b/build.sh @@ -2,6 +2,4 @@ ./stop.sh -# Parallel executions of maven modules and tests. -# Half of CPU core are used in to keep other half for OS and other programs. -mvn clean install -e -B -T0.5C -DforkCount=0.5C $* +./gradlew build $* diff --git a/cix.sh b/cix.sh index a6d4f3a2491..51d388eaab0 100755 --- a/cix.sh +++ b/cix.sh @@ -3,16 +3,20 @@ set -euo pipefail +REPOX_ARGS="-Dorchestrator.artifactory.apiKey=$REPOX_API_KEY -Dorchestrator.artifactory.repositories=sonarsource-qa" +TEST_ARGS="-Pcix=true -DbuildNumber=$CI_BUILD_NUMBER $REPOX_ARGS" + case "$RUN_ACTIVITY" in run-db-unit-tests-*) DB_ENGINE=$(sed "s/run-db-unit-tests-//g" <<< $RUN_ACTIVITY) - ./run-db-unit-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties" + ./run-db-unit-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties" \ + ${TEST_ARGS} ;; run-db-integration-tests-*) DB_ENGINE=$(sed "s/run-db-integration-tests-//g" <<< $RUN_ACTIVITY | cut -d \- -f 1) - CATEGORY_GROUP=$(sed "s/run-db-integration-tests-//g" <<< $RUN_ACTIVITY | cut -d \- -f 2) + CATEGORY=$(sed "s/run-db-integration-tests-//g" <<< $RUN_ACTIVITY | cut -d \- -f 2) if [[ "$GITHUB_BRANCH" != "PULLREQUEST-"* ]] && [[ "$GITHUB_BRANCH" != "master" ]] && [[ "$GITHUB_BRANCH" != "branch-"* ]] && [[ "$GITHUB_BRANCH" != "dogfood-on-next" ]]; then # do not execute QA tests on feature branch outside pull request @@ -27,70 +31,28 @@ case "$RUN_ACTIVITY" in exit 0 else - mvn clean package -B -e -V -f tests/plugins/pom.xml - - case "$CATEGORY_GROUP" in - Category1) - CATEGORY="Category1|authorization|measure|qualityGate|source" - ;; - - Category2) - CATEGORY="issue|test|qualityModel" - ;; - - Category3) - CATEGORY="Category3|component|project" - ;; - - Category4) - CATEGORY="Category4|duplication|user|webhook" - ;; - - Category5) - CATEGORY="Category5" - ;; - - Category6) - CATEGORY="Category6|organization" - ;; - - *) - echo "unknown CATEGORY_GROUP: $CATEGORY_GROUP" - exit 1 - ;; - esac - - mvn verify \ - -f tests/pom.xml \ + ./gradlew --no-daemon --console plain -i \ + :tests:integrationTest \ -Dcategory="$CATEGORY" \ -Dorchestrator.configUrl="http://infra.internal.sonarsource.com/jenkins/orch-$DB_ENGINE.properties" \ - -Pwith-db-drivers \ - -B -e -V + ${TEST_ARGS} fi ;; run-it-released-plugins) - ./run-integration-tests.sh "Plugins" "http://infra.internal.sonarsource.com/jenkins/orch-h2.properties" + ./run-integration-tests.sh "Plugins" "http://infra.internal.sonarsource.com/jenkins/orch-h2.properties" \ + ${TEST_ARGS} ;; run-perf-tests) - if [[ "$GITHUB_BRANCH" == "PULLREQUEST-"* ]]; then - # do not execute Perf tests on feature branch outside pull request - exit 0 - else - ./run-perf-tests.sh - fi + ./run-perf-tests.sh \ + ${TEST_ARGS} ;; run-upgrade-tests-*) DB_ENGINE=$(sed "s/run-upgrade-tests-//g" <<< $RUN_ACTIVITY) - if [[ "$GITHUB_BRANCH" != "master" ]] && [[ "$GITHUB_BRANCH" != "branch-"* ]] && [[ "$DB_ENGINE" != "postgresql93" ]]; then - # restrict upgrade tests to PostgreSQL on feature branches and dogfood - exit 0 - - else - ./run-upgrade-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties" - fi + ./run-upgrade-tests.sh "http://infra.internal.sonarsource.com/jenkins/orch-${DB_ENGINE}.properties" \ + ${TEST_ARGS} ;; *) diff --git a/cve-false-positives.xml b/cve-false-positives.xml deleted file mode 100644 index 39a01d9e778..00000000000 --- a/cve-false-positives.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ECB6E1F8E4B0E84C4B886C2F14A1500CAF309757 - cpe:/a:google:v8:2.3.1 - - - - 1F01F94B5B83C33950E22CDE224868407FDF8B99 - cpe:/a:apache:geronimo:1.0.m1 - - diff --git a/find-classpath-conflicts.sh b/find-classpath-conflicts.sh deleted file mode 100755 index 866de0e65b4..00000000000 --- a/find-classpath-conflicts.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -# Search for duplication of classes in classpath -# This check can not be automated in build yet as current -# conflicts must be fixed. - -mvn org.basepom.maven:duplicate-finder-maven-plugin:check diff --git a/format-headers.sh b/format-headers.sh deleted file mode 100755 index e354ddf14ad..00000000000 --- a/format-headers.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -# Set correct copyright headers - -mvn license:format -Ptests diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000000..6ecff8dc4e2 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,4 @@ +group = org.sonarsource.sonarqube +version = 7.1-SNAPSHOT +description = 'Open source platform for continuous inspection of code quality' +projectTitle = SonarQube diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..c44b679acd3f794ddbb3aa5e919244914911014a GIT binary patch literal 54333 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
K7|BUm`^7>V&Zk%^_d-%A~k@lFe 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

Qox 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 E17(ftEC2ui literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..568c50bf3a4 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 00000000000..cccdd3d517f --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000000..e95643d6a2c --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/plugins/build.gradle b/plugins/build.gradle new file mode 100644 index 00000000000..6b01df30596 --- /dev/null +++ b/plugins/build.gradle @@ -0,0 +1,3 @@ +sonarqube { + skipProject = true +} diff --git a/plugins/sonar-xoo-plugin/build.gradle b/plugins/sonar-xoo-plugin/build.gradle new file mode 100644 index 00000000000..ff4cd6c0080 --- /dev/null +++ b/plugins/sonar-xoo-plugin/build.gradle @@ -0,0 +1,44 @@ +configurations { + testCompile.extendsFrom(compileOnly) +} + +dependencies { + compile 'com.google.guava:guava' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'xoo', + 'Plugin-Version': project.version, + 'Plugin-Class': 'org.sonar.xoo.XooPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': project.version, + 'SonarLint-Supported': 'true', + 'Plugin-Name': 'Xoo' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} + +artifactoryPublish.skip = false + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/plugins/sonar-xoo-plugin/pom.xml b/plugins/sonar-xoo-plugin/pom.xml deleted file mode 100644 index 0dcffa82b49..00000000000 --- a/plugins/sonar-xoo-plugin/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - ../.. - - sonar-xoo-plugin - SonarQube :: Plugins :: Xoo - sonar-plugin - Sample of plugin to document and test available APIs - - - true - - - - - com.google.guava - guava - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.google.code.findbugs - jsr305 - provided - - - org.sonarsource.sonarqube - sonar-plugin-api - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - - xoo - Xoo - org.sonar.xoo.XooPlugin - true - - - - - diff --git a/pom.xml b/pom.xml deleted file mode 100644 index 6adcdfb8628..00000000000 --- a/pom.xml +++ /dev/null @@ -1,1554 +0,0 @@ - - - 4.0.0 - - org.sonarsource.parent - parent - 44 - - org.sonarsource.sonarqube - sonarqube - pom - 7.1-SNAPSHOT - SonarQube - http://www.sonarqube.org/ - Open source platform for continuous inspection of code quality - - - sonar-plugin-api-deps - sonar-application - sonar-scanner-engine - sonar-scanner-protocol - sonar-scanner-engine-shaded - sonar-check-api - sonar-core - sonar-duplications - sonar-home - sonar-markdown - sonar-plugin-api - server - sonar-ws - sonar-ws-generator - sonar-testing-harness - plugins/sonar-xoo-plugin - - - - SonarSource - http://www.sonarsource.com - - 2009 - - - jira - http://jira.sonarsource.com/browse/SONAR - - - - - - 6.7.1.4347 - - - 5.1.0.13090 - - - 4.0.0.5862 - - - 2.12.1.3018 - - - 1.9.0.2010 - - - 2.3 - - - 1.4.3.1027 - - 1.5.0.2122 - - 1.3.0.869 - - 1.6.0.860 - 1.18.0.487 - 1.3.176 - 8.1.12.v20130726 - 1.2.3 - 1.7.25 - - - 2.8.2 - 8.5.23 - 5.6.3 - 3.15.2.1322 - 3.7.0 - 2.6.6 - 0.9.0 - 3.5.1 - - 3.8.6 - - UTF-8 - 3.3.9 - ${maven.build.timestamp} - yyyy-MM-dd'T'HH:mm:ssZ - SonarQube - - false - - -Xmx512m -Djava.awt.headless=true - true - - - sonarqube - - ${project.groupId}:sonar-application:zip - - - - - - kr.motd.maven - os-maven-plugin - 1.5.0.Final - - - - - - - - com.github.eirslett - frontend-maven-plugin - 1.6 - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.0 - - - - - 420 - - 493 - 493 - - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.0.0 - - - org.apache.maven.plugins - maven-clean-plugin - 3.0.0 - - - org.apache.maven.plugins - maven-dependency-plugin - 3.0.2 - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M1 - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - org.jacoco - jacoco-maven-plugin - 0.7.9 - - - *_javassist_* - - - org.sonar.* - org.sonarqube.* - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.0.0-M1 - - false - true - - - - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 - - - org.apache.maven.plugins - maven-jxr-plugin - 2.5 - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - - org.apache.maven.plugins - maven-shade-plugin - 3.1.0 - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.20.1 - - - org.apache.maven.plugins - maven-war-plugin - 3.2.0 - - - - org.codehaus.sonar - sonar-dev-maven-plugin - 1.8 - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.18.0.372 - - - org.owasp - dependency-check-maven - 3.0.1 - - 8 - dependency-check-suppressions.xml - true - - - - - org.basepom.maven - duplicate-finder-maven-plugin - 1.1.1 - - true - - true - true - false - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - 0.5.1 - - - com.github.genthaler - beanshell-maven-plugin - 1.4 - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-rules - - enforce - - - - - Build reproducibility : always define plugin versions - true - true - clean,deploy - - - No SNAPSHOT versions allowed for dependencies - true - - - To build this project JDK ${jdk.min.version} (or upper) is required. Please install it. - - ${jdk.min.version} - - - [${maven.min.version},) - - - - commons-beanutils:commons-beanutils should be used instead - - commons-beanutils:commons-beanutils-core - - true - - - Definition of new repositories is not allowed in order to deploy to central repository. - - - - - - - - - - com.github.genthaler - beanshell-maven-plugin - - - randomize-environment - validate - - run - - - true - - - - - - - org.apache.maven.plugins - maven-jxr-plugin - - true - true - ${project.reporting.outputDirectory}/${project.version}/apidocs - - - - org.apache.maven.plugins - maven-surefire-plugin - - random - - - ${project.build.directory} - - ${testTimezone} - - 1 - - - - - - - - - - org.codehaus.sonar - sonar-channel - 4.1 - - - org.slf4j - slf4j-api - - - - - org.codehaus.sonar - sonar-classloader - 1.0 - - - ${project.groupId} - sonar-markdown - ${project.version} - - - ${project.groupId} - sonar-core - ${project.version} - - - ${project.groupId} - sonar-db-dao - ${project.version} - - - ${project.groupId} - sonar-db-migration - ${project.version} - - - ${project.groupId} - sonar-db-testing - ${project.version} - pom - - - ${project.groupId} - sonar-scanner-protocol - ${project.version} - - - ${project.groupId} - sonar-ws - ${project.version} - - - ${project.groupId} - sonar-home - ${project.version} - - - ${project.groupId} - sonar-plugin-api - ${project.version} - - - ${project.groupId} - sonar-process - ${project.version} - - - ${project.groupId} - sonar-server - ${project.version} - - - org.sonarsource.update-center - sonar-update-center-common - ${sonarUpdateCenter.version} - - - org.sonarsource.orchestrator - sonar-orchestrator - ${orchestrator.version} - - - org.codehaus.sonar - sonar-squid - 4.1 - - - - org.codehaus.sonar - sonar-check-api - - - - - org.sonarsource.sonarqube - sonar-xoo-plugin - ${project.version} - test - - - org.sonarsource.scm.git - sonar-scm-git-plugin - ${sonarGit.version} - sonar-plugin - - - - org.eclipse.jgit - org.eclipse.jgit - - - - - org.sonarsource.scm.svn - sonar-scm-svn-plugin - ${sonarSvn.version} - sonar-plugin - - - - org.tmatesoft.svnkit - svnkit - - - - - org.sonarsource.typescript - sonar-typescript-plugin - ${sonarTs.version} - sonar-plugin - - - org.sonarsource.analyzer-commons - sonar-analyzer-commons - - - - - org.sonarsource.sonarqube - sonar-db-core - ${project.version} - - - org.sonarsource.sonarqube - sonar-db-testing - ${project.version} - - - org.sonarsource.sonarqube - sonar-testing-harness - ${project.version} - - - org.sonarsource.sonarqube - sonar-plugin-bridge - ${project.version} - - - org.sonarsource.java - sonar-java-plugin - ${sonarJava.version} - sonar-plugin - - - - classworlds - classworlds - - - org.mockito - mockito-all - - - org.sonarsource.java - java-surefire - - - org.sonarsource.java - java-jacoco - - - org.sonarsource.java - java-frontend - - - org.sonarsource.java - java-checks - - - - - org.sonarsource.javascript - sonar-javascript-plugin - ${sonarJavaScript.version} - sonar-plugin - - - - org.sonarsource.javascript - javascript-frontend - - - org.sonarsource.javascript - javascript-checks - - - - - org.sonarsource.dotnet - sonar-csharp-plugin - ${sonarCSharp.version} - sonar-plugin - - - org.sonarsource.dotnet - sonar-dotnet-tests-library - - - org.sonarsource.dotnet - sonar-dotnet-shared-library - - - org.sonarsource.sslr-squid-bridge - sslr-squid-bridge - - - - - org.sonarsource.php - sonar-php-plugin - ${sonarPhp.version} - sonar-plugin - - - - org.sonarsource.php - php-frontend - - - org.sonarsource.php - php-checks - - - com.thoughtworks.xstream - xstream - - - - - org.sonarsource.python - sonar-python-plugin - ${sonarPython.version} - sonar-plugin - - - - org.sonarsource.python - python-squid - - - org.sonarsource.python - python-checks - - - org.codehaus.woodstox - woodstox-core-lgpl - - - org.codehaus.staxmate - staxmate - - - - - org.sonarsource.flex - sonar-flex-plugin - ${sonarFlex.version} - sonar-plugin - - - - org.sonarsource.flex - flex-squid - - - org.sonarsource.flex - flex-checks - - - - - org.sonarsource.xml - sonar-xml-plugin - ${sonarXml.version} - sonar-plugin - - - - xalan - xalan - - - xerces - xercesImpl - - - org.sonarsource.xml - xml-squid - - - - - com.hazelcast - hazelcast - ${hazelcast.version} - - - com.hazelcast - hazelcast-client - ${hazelcast.version} - - - org.elasticsearch.client - transport - ${elasticsearch.version} - - - org.elasticsearch.plugin - lang-mustache-client - - - org.elasticsearch.plugin - transport-netty3-client - - - - - com.github.tlrx - elasticsearch-test - 1.2.1 - - - com.google.guava - guava - 18.0 - - - com.google.code.findbugs - jsr305 - 3.0.2 - - - commons-dbutils - commons-dbutils - 1.5 - - - commons-io - commons-io - 2.4 - - - org.apache.commons - commons-csv - 1.4 - - - commons-codec - commons-codec - 1.8 - - - org.apache.commons - commons-email - 1.5 - - - commons-lang - commons-lang - 2.6 - - - commons-dbcp - commons-dbcp - 1.4 - - - com.ibm.icu - icu4j - - 3.4.4 - - - javax.xml.bind - jaxb-api - 2.3.0 - - - com.googlecode.json-simple - json-simple - 1.1.1 - - - junit - junit - - - - - io.jsonwebtoken - jjwt - ${jjwt.version} - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - org.yaml - snakeyaml - 1.15 - - - org.mybatis - mybatis - 3.4.4 - - - org.nanohttpd - nanohttpd - 2.3.0 - - - org.picocontainer - picocontainer - 2.15 - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - jul-to-slf4j - ${slf4j.version} - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - org.slf4j - log4j-over-slf4j - ${slf4j.version} - - - org.apache.logging.log4j - log4j-to-slf4j - ${log4j.version} - - - org.apache.logging.log4j - log4j-api - ${log4j.version} - - - org.apache.logging.log4j - log4j-core - ${log4j.version} - - - ch.qos.logback - logback-access - ${logback.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - ch.qos.logback - logback-core - ${logback.version} - - - com.h2database - h2 - ${h2.version} - - - com.microsoft.sqlserver - mssql-jdbc - 6.2.2.jre8 - - - mysql - mysql-connector-java - 5.1.42 - - - com.oracle.jdbc - ojdbc8 - - 12.2.0.1.0 - - - org.postgresql - postgresql - 42.2.1 - - - org.codehaus.woodstox - woodstox-core-lgpl - 4.4.0 - - - - javax.xml.stream - stax-api - - - - - org.codehaus.staxmate - staxmate - 2.0.1 - - - - org.codehaus.woodstox - stax2-api - - - stax - stax-api - - - org.codehaus.woodstox - woodstox-core-asl - - - - - org.mockito - mockito-core - 2.13.0 - - - org.hamcrest - hamcrest-core - - - - - org.assertj - assertj-core - 3.9.0 - - - org.assertj - assertj-guava - 3.0.0 - - - org.codehaus.woodstox - stax2-api - 3.1.4 - - - stax - stax-api - - - - - javax.servlet - javax.servlet-api - 3.0.1 - - - org.eclipse.jetty - jetty-server - ${jetty.version} - - - org.hamcrest - hamcrest-core - 1.3 - - - org.hamcrest - hamcrest-all - 1.3 - - - junit - junit - 4.12 - - - com.tngtech.java - junit-dataprovider - 1.9.2 - - - org.dbunit - dbunit - 2.4.5 - - - - commons-lang - commons-lang - - - xerces - xmlParserAPIs - - - xerces - xercesImpl - - - - - org.eclipse.jetty - test-jetty-servlet - ${jetty.version} - - - org.reflections - reflections - 0.9.9 - - - com.google.code.gson - gson - 2.3.1 - - - org.sonarsource - sonar-persistit - 3.3.2 - - - commons-logging - commons-logging - - - - - com.github.kevinsawicki - http-request - 5.4.1 - - - org.codehaus.sonar.runner - sonar-runner-api - 2.4 - - - org.freemarker - freemarker - 2.3.20 - - - com.google.protobuf - protobuf-java - ${protobuf.version} - - - net.jpountz.lz4 - lz4 - 1.3.0 - - - org.subethamail - subethasmtp - 3.1.7 - test - - - - - org.apache.tomcat.embed - tomcat-embed-core - ${tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-jasper - - - org.eclipse.jdt - ecj - - - - - com.squareup.okhttp3 - okhttp - ${okhttp.version} - - - com.squareup.okhttp3 - mockwebserver - ${okhttp.version} - - - - - xml-apis - xml-apis - 1.4.01 - provided - - - - - - - - SonarQube users mailing list - http://xircles.codehaus.org/projects/sonar/lists - http://xircles.codehaus.org/projects/sonar/lists - user@sonar.codehaus.org - http://www.nabble.com/Sonar-f30151.html - - - - - scm:git:git@github.com:SonarSource/sonarqube.git - scm:git:git@github.com:SonarSource/sonarqube.git - https://github.com/SonarSource/sonarqube - HEAD - - - - travis-ci - https://travis-ci.org/SonarSource/sonarqube - - - - - GNU LGPL 3 - http://www.gnu.org/licenses/lgpl.txt - repo - - - - - - - - bellingard - Fabrice Bellingard - fabrice.bellingard@sonarsource.com - SonarSource - +1 - - - dbolkensteyn - Dinesh Bolkensteyn - dinesh.bolkensteyn@sonarsource.com - SonarSource - +1 - - - dgageot - David Gageot - SonarSource - +1 - - - ehartmann - Eric Hartmann - SonarSource - +1 - - - fmallet - Freddy Mallet - freddy.mallet@sonarsource.com - SonarSource - +1 - - - Godin - Evgeny Mandrikov - evgeny.mandrikov@sonarsource.com - SonarSource - +3 - - - henryju - Julien Henry - julien.henry@sonarsource.com - SonarSource - +1 - - - jblievremont - Jean-Baptiste Lievremont - SonarSource - +1 - - - julienlancelot - Julien Lancelot - julien.lancelot@sonarsource.com - SonarSource - +1 - - - olivier.gaudin - Olivier Gaudin - olivier.gaudin@sonarsource.com - SonarSource - +1 - - - simonbrandhof - Simon Brandhof - simon.brandhof@sonarsource.com - SonarSource - +1 - - - sns-seb - Sebastien Lesaint - SonarSource - +1 - - - stas-vilchik - Stas Vilchik - SonarSource - +1 - - - teryk - Teryk Bellahsene - SonarSource - +1 - - - - - - dev - - true - true - - - - release - - - - org.apache.maven.plugins - maven-javadoc-plugin - - - attach-javadocs - - jar - - - - - - - - - - protobuf-compile - - - src/main/protobuf - - - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - - - generate-protobuf-java-sources - - compile - - - com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} - - ${project.basedir}/src/main/protobuf - ${project.build.directory}/generated-sources/protobuf - - - - - - com.google.protobuf - protoc - ${protobuf.version} - exe - ${os.detected.classifier} - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-protobuf-generated-sources - generate-sources - - add-source - - - - ${project.build.directory}/generated-sources/protobuf - - - - - - - - - - protobuf-test-compile - - - src/test/protobuf - - - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - - - generate-protobuf-java-tests - - test-compile - - - com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} - - ${project.basedir}/src/test/protobuf - ${project.build.directory}/generated-test-sources/protobuf - - - - - - com.google.protobuf - protoc - ${protobuf.version} - ${os.detected.classifier} - exe - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-protobuf-generated-tests - generate-test-sources - - add-test-source - - - - ${project.build.directory}/generated-test-sources/protobuf - - - - - - - - - - - - securityCheck - - - - org.owasp - dependency-check-maven - - - - check - - - - - - - - - - - tests - - tests - tests/plugins - - - - - deploy-sonarsource - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-deploy-settings - - enforce - - - - - gitRepositoryName - You must set name of Git repository in your pom - - - ARTIFACTORY_URL - - - ARTIFACTORY_DEPLOY_REPO - - - ARTIFACTORY_DEPLOY_USERNAME - - - ARTIFACTORY_DEPLOY_PASSWORD - - - true - - - - - - - org.jfrog.buildinfo - artifactory-maven-plugin - ${version.artifactory.plugin} - - - build-info - - publish - - - - - *password*,*PASSWORD*,*secret*,*MAVEN_CMD_LINE_ARGS*,sun.java.command,*token*,*TOKEN*,*LOGIN*,*login* - - true - 60 - - - ${gitRepositoryName} - {{BUILD_NUMBER}} - {{PULL_REQUEST_BRANCH_TARGET}} - {{PULL_REQUEST_NUMBER}} - {{GIT_BRANCH}} - {{GIT_COMMIT}} - ${project.version} - - - true - false - true - project,provided - licences-control@sonarsource.com - - - ${env.ARTIFACTORY_URL} - ${env.ARTIFACTORY_DEPLOY_REPO} - ${env.ARTIFACTORY_DEPLOY_USERNAME} - ${env.ARTIFACTORY_DEPLOY_PASSWORD} - true - true - - - ${gitRepositoryName} - {{BUILD_NUMBER}} - {{CI_BUILD_URL|BUILD_URL}} - {{GIT_COMMIT}} - - - - - - - - - - - - diff --git a/quick-build.sh b/quick-build.sh deleted file mode 100755 index b53a26a27f0..00000000000 --- a/quick-build.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh - -#export MAVEN_OPTS='-Xmx256m' - -cat << 'EOF' - - - uuuuuuu - uu$$$$$$$$$$$uu - uu$$$$$$$$$$$$$$$$$uu - u$$$$$$$$$$$$$$$$$$$$$u - u$$$$$$$$$$$$$$$$$$$$$$$u - u$$$$$$$$$$$$$$$$$$$$$$$$$u - u$$$$$$$$$$$$$$$$$$$$$$$$$u - u$$$$$$" "$$$" "$$$$$$u - "$$$$" u$u $$$$" - $$$u u$u u$$$ - $$$u u$$$u u$$$ - "$$$$uu$$$ $$$uu$$$$" - "$$$$$$$" "$$$$$$$" - u$$$$$$$u$$$$$$$u - u$"$"$"$"$"$"$u - uuu $$u$ $ $ $ $u$$ uuu - u$$$$ $$$$$u$u$u$$$ u$$$$ - $$$$$uu "$$$$$$$$$" uu$$$$$$ -u$$$$$$$$$$$uu """"" uuuu$$$$$$$$$$ -$$$$"""$$$$$$$$$$uuu uu$$$$$$$$$"""$$$" - """ ""$$$$$$$$$$$uu ""$""" - uuuu ""$$$$$$$$$$uuu - u$$$uuu$$$$$$$$$uu ""$$$$$$$$$$$uuu$$$ - $$$$$$$$$$"""" ""$$$$$$$$$$$" - "$$$$$" ""$$$$"" - $$$" $$$$" - - - TESTS ARE DISABLED - ARE U CRAZY ? - - - -EOF - -./stop.sh -mvn clean install -B -e -V -DskipTests=true -Dmaven.source.skip=true -Pdev,skipSanityChecks $* diff --git a/run-db-unit-tests.sh b/run-db-unit-tests.sh index 7eea321bbeb..6a3d7eceb9e 100755 --- a/run-db-unit-tests.sh +++ b/run-db-unit-tests.sh @@ -4,8 +4,10 @@ set -euo pipefail ORCHESTRATOR_CONFIG_URL=$1 shift -mvn verify \ - -pl :sonar-db-core,:sonar-db-migration,:sonar-db-dao \ +./gradlew --no-daemon \ + :server:sonar-db-core:createDB \ + :server:sonar-db-core:test \ + :server:sonar-db-migration:test \ + :server:sonar-db-dao:test \ -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL \ - -Dwith-db-drivers \ - -B -e -V $* + $* diff --git a/run-integration-tests.sh b/run-integration-tests.sh index 82ea7a8b1a2..78ce995c7c4 100755 --- a/run-integration-tests.sh +++ b/run-integration-tests.sh @@ -16,12 +16,8 @@ CATEGORY=$1 ORCHESTRATOR_CONFIG_URL=$2 shift 2 -cd tests/plugins -mvn clean package -B -e -V - -cd .. -mvn verify \ +./gradlew --no-daemon --console plain -i \ + :tests:integrationTest \ -Dcategory="$CATEGORY" \ - -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL \ - -Pwith-db-drivers \ - -B -e -V $* + -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL \ + $* diff --git a/run-perf-tests.sh b/run-perf-tests.sh index 4a5e6eba726..5374319ac43 100755 --- a/run-perf-tests.sh +++ b/run-perf-tests.sh @@ -2,5 +2,8 @@ set -euo pipefail echo 'Run performance tests' -cd tests -mvn verify -B -e -V -Dcategory=ServerPerformance $* + +./gradlew --no-daemon --console plain -i \ + :tests:integrationTest \ + -Dcategory=ServerPerformance \ + $* diff --git a/run-upgrade-tests.sh b/run-upgrade-tests.sh index 696d4eedf66..97a838557b7 100755 --- a/run-upgrade-tests.sh +++ b/run-upgrade-tests.sh @@ -13,8 +13,8 @@ set -euo pipefail ORCHESTRATOR_CONFIG_URL=$1 shift 1 -cd tests -mvn verify \ - -Pwith-db-drivers \ +./gradlew --no-daemon --console plain -i \ + :tests:integrationTest \ -Dorchestrator.configUrl=$ORCHESTRATOR_CONFIG_URL \ - -Dcategory=Upgrade -B -e -V $* + -Dcategory=Upgrade \ + $* \ No newline at end of file diff --git a/scripts/logs.sh b/scripts/logs.sh index 24a7a5e26a7..a553c4d2ffb 100755 --- a/scripts/logs.sh +++ b/scripts/logs.sh @@ -78,7 +78,7 @@ if [ "$script_name" == "logs.sh" ]; then checkLogArgument "$LOG" ROOT=$(pwd) - cd sonar-application/target/sonarqube-* + cd sonar-application/build/distributions/sonarqube-* SQ_HOME=$(pwd) cd "$ROOT" diff --git a/scripts/start.sh b/scripts/start.sh index 24240bf7e54..b82329e15f3 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -36,15 +36,15 @@ else OS='linux-x86-64' fi -if ! ls sonar-application/target/sonarqube-*.zip &> /dev/null; then +if ! ls sonar-application/build/distributions/sonar-application-*.zip &> /dev/null; then echo 'Sources are not built' "$ROOT"/build.sh fi -cd sonar-application/target/ +cd sonar-application/build/distributions/ if ! ls sonarqube-*/bin/$OS/sonar.sh &> /dev/null; then echo "Unzipping SQ..." - unzip -qq sonarqube-*.zip + unzip -qq sonar-application-*.zip fi cd $(find sonarqube-* -type d | head -1) diff --git a/server/build.gradle b/server/build.gradle new file mode 100644 index 00000000000..49d6218996b --- /dev/null +++ b/server/build.gradle @@ -0,0 +1,5 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Server :: Parent" + } +} diff --git a/server/pom.xml b/server/pom.xml deleted file mode 100644 index c4e4974bfb0..00000000000 --- a/server/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - server - pom - SonarQube :: Server :: Parent - - - sonar-process - sonar-main - sonar-db-core - sonar-db-migration - sonar-db-dao - sonar-db-testing - sonar-server - sonar-ce - sonar-plugin-bridge - sonar-web - sonar-qa-util - - - - - - - with-db-drivers - - - with-db-drivers - - - - - com.microsoft.sqlserver - mssql-jdbc - - - mysql - mysql-connector-java - - - org.postgresql - postgresql - - - com.oracle.jdbc - ojdbc8 - - - - - diff --git a/server/sonar-ce/build.gradle b/server/sonar-ce/build.gradle new file mode 100644 index 00000000000..12b42b98696 --- /dev/null +++ b/server/sonar-ce/build.gradle @@ -0,0 +1,24 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Compute Engine" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'com.google.protobuf:protobuf-java' + compile 'org.nanohttpd:nanohttpd' + compile project(':server:sonar-server') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.google.code.findbugs:jsr305' + testCompile 'com.h2database:h2' + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.assertj:assertj-guava' + testCompile 'org.mockito:mockito-core' + testCompile project(':server:sonar-db-testing') +} diff --git a/server/sonar-ce/pom.xml b/server/sonar-ce/pom.xml deleted file mode 100644 index 525eaf843e8..00000000000 --- a/server/sonar-ce/pom.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - .. - - sonar-ce - SonarQube :: Compute Engine - - - - ${project.groupId} - sonar-server - provided - - - org.nanohttpd - nanohttpd - - - com.google.protobuf - protobuf-java - - - - com.google.code.findbugs - jsr305 - provided - - - - - junit - junit - test - - - com.tngtech.java - junit-dataprovider - test - - - org.assertj - assertj-core - test - - - org.assertj - assertj-guava - test - - - org.mockito - mockito-core - test - - - ${project.groupId} - sonar-db-testing - pom - test - - - - diff --git a/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java b/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java index 5b093ff3156..de97563d60e 100644 --- a/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java +++ b/server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java @@ -28,9 +28,9 @@ import java.util.Optional; import java.util.Set; import javax.annotation.CheckForNull; import javax.annotation.Nullable; -import org.apache.log4j.Logger; import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.utils.System2; +import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Loggers; import org.sonar.ce.container.ComputeEngineStatus; import org.sonar.ce.monitoring.CEQueueStatus; @@ -50,7 +50,7 @@ import static java.util.Objects.requireNonNull; @ComputeEngineSide public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue { - private static final org.sonar.api.utils.log.Logger LOG = Loggers.get(InternalCeQueueImpl.class); + private static final Logger LOG = Loggers.get(InternalCeQueueImpl.class); private static final int MAX_EXECUTION_COUNT = 1; @@ -145,7 +145,7 @@ public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue printStream.flush(); return out.toString(); } catch (IOException e) { - Logger.getLogger(InternalCeQueueImpl.class).debug("Failed to getStacktrace out of error", e); + LOG.debug("Failed to getStacktrace out of error", e); return null; } } diff --git a/server/sonar-db-core/build.gradle b/server/sonar-db-core/build.gradle new file mode 100644 index 00000000000..bfb6921b78b --- /dev/null +++ b/server/sonar-db-core/build.gradle @@ -0,0 +1,71 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Database Core" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'ch.qos.logback:logback-classic' + compile 'ch.qos.logback:logback-core' + compile 'commons-codec:commons-codec' + compile 'commons-dbcp:commons-dbcp' + compile 'commons-dbutils:commons-dbutils' + compile 'net.jpountz.lz4:lz4' + compile 'org.apache.commons:commons-csv' + compile 'org.mybatis:mybatis' + compile 'org.slf4j:slf4j-api' + compile project(':server:sonar-process') + compile project(':sonar-core') + compile project(':sonar-scanner-protocol') + compile project(path: ':sonar-plugin-api', configuration: 'shadow') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.google.code.findbugs:jsr305' + testCompile 'com.h2database:h2' + testCompile 'com.microsoft.sqlserver:mssql-jdbc' + testCompile 'com.oracle.jdbc:ojdbc8' + testCompile 'junit:junit' + testCompile 'mysql:mysql-connector-java' + testCompile 'org.assertj:assertj-core' + testCompile 'org.dbunit:dbunit' + testCompile 'org.mockito:mockito-core' + testCompile 'org.postgresql:postgresql' + testCompile 'org.sonarsource.orchestrator:sonar-orchestrator' + testCompile project(':sonar-testing-harness') +} + +task createDB(type:JavaExec) { + main = 'org.sonar.db.CreateDb' + classpath = sourceSets.test.runtimeClasspath + systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl') + systemProperty 'sonar.runtimeVersion', version + systemProperty 'orchestrator.artifactory.apiKey', System.getProperty('orchestrator.artifactory.apiKey') + systemProperty 'orchestrator.artifactory.repositories', System.getProperty('orchestrator.artifactory.repositories') +} + +test { + if (System.hasProperty('orchestrator.configUrl')) + systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl') +} + +task testJar(type: Jar) { + classifier = 'tests' + from sourceSets.test.output +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact testJar + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/server/sonar-db-core/pom.xml b/server/sonar-db-core/pom.xml deleted file mode 100644 index 85e9af2469e..00000000000 --- a/server/sonar-db-core/pom.xml +++ /dev/null @@ -1,197 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - - - sonar-db-core - - SonarQube :: Database Core - Core Database support - - - - com.google.code.findbugs - jsr305 - provided - - - commons-codec - commons-codec - - - org.apache.commons - commons-csv - - - ${project.groupId} - sonar-scanner-protocol - - - ${project.groupId} - sonar-core - - - ${project.groupId} - sonar-plugin-api - - - org.mybatis - mybatis - - - commons-dbcp - commons-dbcp - - - commons-dbutils - commons-dbutils - - - net.jpountz.lz4 - lz4 - - - - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - - - ch.qos.logback - logback-core - - - ${project.groupId} - sonar-process - ${project.version} - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - org.dbunit - dbunit - test - - - ${project.groupId} - sonar-testing-harness - test - - - - - - mysql - mysql-connector-java - test - - - org.postgresql - postgresql - test - - - com.h2database - h2 - test - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - logback-test.xml - - - - - - - - - - - create-db - - - env.SONARSOURCE_QA - true - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - download-sq - - get - - generate-test-resources - - ${project.groupId}:sonar-application:${project.version}:zip - false - - - - - - org.sonarsource.orchestrator - orchestrator-maven-plugin - ${orchestrator.version} - - - create-db - - create-db - - generate-test-resources - - ${project.version} - - - - - - - - - diff --git a/server/sonar-db-core/src/test/java/org/sonar/db/CreateDb.java b/server/sonar-db-core/src/test/java/org/sonar/db/CreateDb.java new file mode 100644 index 00000000000..b448b25fa87 --- /dev/null +++ b/server/sonar-db-core/src/test/java/org/sonar/db/CreateDb.java @@ -0,0 +1,49 @@ +/* + * SonarQube + * Copyright (C) 2009-2018 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.db; + +import com.sonar.orchestrator.Orchestrator; +import com.sonar.orchestrator.OrchestratorBuilder; +import com.sonar.orchestrator.locator.FileLocation; +import org.apache.commons.lang.StringUtils; + +import java.io.File; + +public class CreateDb { + + public static void main(String[] args) { + OrchestratorBuilder builder = Orchestrator.builderEnv(); + String version = System.getProperty("sonar.runtimeVersion"); + if (StringUtils.isEmpty(version)) { + File zip = FileLocation.byWildcardMavenFilename(new File("../../sonar-application/build/distributions"), "sonar-application-*.zip").getFile(); + builder.setZipFile(zip); + } else { + builder.setSonarVersion(version); + } + builder.setOrchestratorProperty("orchestrator.workspaceDir", "build/it"); + + Orchestrator orchestrator = builder.build(); + try { + orchestrator.start(); + } finally { + orchestrator.stop(); + } + } +} diff --git a/server/sonar-db-dao/build.gradle b/server/sonar-db-dao/build.gradle new file mode 100644 index 00000000000..24a45f382e1 --- /dev/null +++ b/server/sonar-db-dao/build.gradle @@ -0,0 +1,51 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: DAO" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile project(':server:sonar-db-core') + compile project(':server:sonar-db-migration') + compile project(':sonar-core') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.h2database:h2' + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.assertj:assertj-guava' + testCompile 'org.dbunit:dbunit' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') + testCompile project(':server:sonar-db-core').sourceSets.test.output + + testCompileOnly 'com.google.code.findbugs:jsr305' +} + +test { + if (System.hasProperty('orchestrator.configUrl')) + systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl') +} + +task testJar(type: Jar) { + classifier = 'tests' + from sourceSets.test.output +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact testJar + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/server/sonar-db-dao/pom.xml b/server/sonar-db-dao/pom.xml deleted file mode 100644 index 0d240e996e4..00000000000 --- a/server/sonar-db-dao/pom.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - - - sonar-db-dao - - SonarQube :: DAO - DAO layer for SonarQube - - - - org.sonarsource.sonarqube - sonar-core - - - org.sonarsource.sonarqube - sonar-db-core - - - org.sonarsource.sonarqube - sonar-db-migration - - - com.google.code.findbugs - jsr305 - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.assertj - assertj-guava - test - - - org.mockito - mockito-core - test - - - com.tngtech.java - junit-dataprovider - test - - - ${project.groupId} - sonar-testing-harness - test - - - ${project.groupId} - sonar-db-core - ${project.version} - test-jar - test - - - org.dbunit - dbunit - test - - - com.h2database - h2 - test - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - logback-test.xml - - - - - - - - - - - diff --git a/server/sonar-db-migration/build.gradle b/server/sonar-db-migration/build.gradle new file mode 100644 index 00000000000..2198734c3a1 --- /dev/null +++ b/server/sonar-db-migration/build.gradle @@ -0,0 +1,42 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Database Migration" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile project(':server:sonar-db-core') + compile project(':sonar-core') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.google.code.findbugs:jsr305' + testCompile 'com.h2database:h2' + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.dbunit:dbunit' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') + testCompile project(':server:sonar-db-core').sourceSets.test.output +} + +test { + if (System.hasProperty('orchestrator.configUrl')) + systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl') +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/server/sonar-db-migration/pom.xml b/server/sonar-db-migration/pom.xml deleted file mode 100644 index 1d75a632dde..00000000000 --- a/server/sonar-db-migration/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - - - sonar-db-migration - - SonarQube :: Database Migration - Create SonarQube schema - - - - org.sonarsource.sonarqube - sonar-core - - - org.sonarsource.sonarqube - sonar-db-core - - - com.google.code.findbugs - jsr305 - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - com.tngtech.java - junit-dataprovider - test - - - ${project.groupId} - sonar-testing-harness - test - - - ${project.groupId} - sonar-db-core - ${project.version} - test-jar - test - - - org.dbunit - dbunit - test - - - com.h2database - h2 - test - - - - diff --git a/server/sonar-db-testing/build.gradle b/server/sonar-db-testing/build.gradle new file mode 100644 index 00000000000..a7fddde0420 --- /dev/null +++ b/server/sonar-db-testing/build.gradle @@ -0,0 +1,15 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: DB testing" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'org.dbunit:dbunit' + + compile project(':server:sonar-db-core').sourceSets.test.output + compile project(':server:sonar-db-dao').sourceSets.test.output + compile project(':sonar-testing-harness') +} diff --git a/server/sonar-db-testing/pom.xml b/server/sonar-db-testing/pom.xml deleted file mode 100644 index 6799c132ba3..00000000000 --- a/server/sonar-db-testing/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - - - sonar-db-testing - pom - - SonarQube :: DB testing - DB testing for SonarQube - - - - ${project.groupId} - sonar-testing-harness - - - ${project.groupId} - sonar-db-core - ${project.version} - test-jar - - - ${project.groupId} - sonar-db-dao - ${project.version} - test-jar - - - org.dbunit - dbunit - - - - - - - - - - diff --git a/server/sonar-main/build.gradle b/server/sonar-main/build.gradle new file mode 100644 index 00000000000..936ace8238d --- /dev/null +++ b/server/sonar-main/build.gradle @@ -0,0 +1,30 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Main Process" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'ch.qos.logback:logback-classic' + // Required by our usage of Guava for clustering : CeWorkerFactoryImpl.getClusteredWorkerUUIDs() + compile 'com.google.guava:guava' + compile 'com.hazelcast:hazelcast' + compile 'com.hazelcast:hazelcast-client' + compile 'org.apache.logging.log4j:log4j-to-slf4j' + compile 'org.apache.logging.log4j:log4j-api' + compile 'org.elasticsearch.client:transport' + compile 'org.slf4j:slf4j-api' + compile 'org.yaml:snakeyaml' + compile project(':server:sonar-process') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.google.code.findbugs:jsr305' + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') +} diff --git a/server/sonar-main/pom.xml b/server/sonar-main/pom.xml deleted file mode 100644 index 2540b6c76d9..00000000000 --- a/server/sonar-main/pom.xml +++ /dev/null @@ -1,120 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - ../ - - - sonar-main - SonarQube :: Main Process - Server process used to bootstrap Elasticsearch, Web Server and - Compute Engine processes. Could be merged with sonar-application. - - - - ${project.version} - - - - - ${project.groupId} - sonar-process - ${project.version} - - - org.slf4j - slf4j-api - - - org.apache.logging.log4j - log4j-to-slf4j - - - org.apache.logging.log4j - log4j-api - - - org.apache.logging.log4j - log4j-core - - - ch.qos.logback - logback-classic - - - com.hazelcast - hazelcast - - - com.hazelcast - hazelcast-client - - - org.yaml - snakeyaml - - - - com.google.guava - guava - - - org.elasticsearch.client - transport - - - - com.google.code.findbugs - jsr305 - provided - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - ${project.groupId} - sonar-testing-harness - test - - - com.tngtech.java - junit-dataprovider - test - - - - - - - - - src/main/resources - true - - - - diff --git a/server/sonar-main/src/main/java/org/sonar/application/command/CommandFactoryImpl.java b/server/sonar-main/src/main/java/org/sonar/application/command/CommandFactoryImpl.java index 7c4c8c1b340..fdf1937b95d 100644 --- a/server/sonar-main/src/main/java/org/sonar/application/command/CommandFactoryImpl.java +++ b/server/sonar-main/src/main/java/org/sonar/application/command/CommandFactoryImpl.java @@ -152,8 +152,7 @@ public class CommandFactoryImpl implements CommandFactory { .setEnvVariable(PATH_LOGS.getKey(), props.nonNullValue(PATH_LOGS.getKey())) .setArgument("sonar.cluster.web.startupLeader", Boolean.toString(leader)) .setClassName("org.sonar.server.app.WebServer") - .addClasspath("./lib/common/*") - .addClasspath("./lib/server/*"); + .addClasspath("./lib/common/*"); String driverPath = props.value(JDBC_DRIVER_PATH.getKey()); if (driverPath != null) { command.addClasspath(driverPath); @@ -176,9 +175,7 @@ public class CommandFactoryImpl implements CommandFactory { .setArguments(props.rawProperties()) .setJvmOptions(jvmOptions) .setClassName("org.sonar.ce.app.CeServer") - .addClasspath("./lib/common/*") - .addClasspath("./lib/server/*") - .addClasspath("./lib/ce/*"); + .addClasspath("./lib/common/*"); String driverPath = props.value(JDBC_DRIVER_PATH.getKey()); if (driverPath != null) { command.addClasspath(driverPath); diff --git a/server/sonar-main/src/test/java/org/sonar/application/command/CommandFactoryImplTest.java b/server/sonar-main/src/test/java/org/sonar/application/command/CommandFactoryImplTest.java index 4438fb768b6..08cf403ea09 100644 --- a/server/sonar-main/src/test/java/org/sonar/application/command/CommandFactoryImplTest.java +++ b/server/sonar-main/src/test/java/org/sonar/application/command/CommandFactoryImplTest.java @@ -96,7 +96,7 @@ public class CommandFactoryImplTest { } @Test - public void createEsCommand_throws_ISE_if_es_binary_is_not_found() throws Exception { + public void createEsCommand_throws_ISE_if_es_binary_is_not_found() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Cannot find elasticsearch binary"); @@ -194,13 +194,13 @@ public class CommandFactoryImplTest { } @Test - public void createWebCommand_returns_command_for_default_settings() throws Exception { + public void createWebCommand_returns_command_for_default_settings() { JavaCommand command = newFactory(new Properties()).createWebCommand(true); assertThat(command.getClassName()).isEqualTo("org.sonar.server.app.WebServer"); assertThat(command.getWorkDir().getAbsolutePath()).isEqualTo(homeDir.getAbsolutePath()); assertThat(command.getClasspath()) - .containsExactlyInAnyOrder("./lib/common/*", "./lib/server/*"); + .containsExactly("./lib/common/*"); assertThat(command.getJvmOptions().getAll()) // enforced values .contains("-Djava.awt.headless=true", "-Dfile.encoding=UTF-8") @@ -219,13 +219,13 @@ public class CommandFactoryImplTest { } @Test - public void createCeCommand_returns_command_for_default_settings() throws Exception { + public void createCeCommand_returns_command_for_default_settings() { JavaCommand command = newFactory(new Properties()).createCeCommand(); assertThat(command.getClassName()).isEqualTo("org.sonar.ce.app.CeServer"); assertThat(command.getWorkDir().getAbsolutePath()).isEqualTo(homeDir.getAbsolutePath()); assertThat(command.getClasspath()) - .containsExactlyInAnyOrder("./lib/common/*", "./lib/server/*", "./lib/ce/*"); + .containsExactly("./lib/common/*"); assertThat(command.getJvmOptions().getAll()) // enforced values .contains("-Djava.awt.headless=true", "-Dfile.encoding=UTF-8") @@ -244,7 +244,7 @@ public class CommandFactoryImplTest { } @Test - public void createWebCommand_configures_command_with_overridden_settings() throws Exception { + public void createWebCommand_configures_command_with_overridden_settings() { Properties props = new Properties(); props.setProperty("sonar.web.port", "1234"); props.setProperty("sonar.web.javaOpts", "-Xmx10G"); @@ -275,7 +275,7 @@ public class CommandFactoryImplTest { JavaCommand command = newFactory(props).createWebCommand(true); assertThat(command.getClasspath()) - .containsExactlyInAnyOrder("./lib/common/*", "./lib/server/*", driverFile.getAbsolutePath()); + .containsExactlyInAnyOrder("./lib/common/*", driverFile.getAbsolutePath()); } private void prepareEsFileSystem() throws IOException { @@ -283,7 +283,7 @@ public class CommandFactoryImplTest { FileUtils.touch(new File(homeDir, "elasticsearch/bin/elasticsearch.bat")); } - private CommandFactoryImpl newFactory(Properties userProps) throws IOException { + private CommandFactoryImpl newFactory(Properties userProps) { return newFactory(userProps, System2.INSTANCE); } diff --git a/server/sonar-plugin-bridge/build.gradle b/server/sonar-plugin-bridge/build.gradle new file mode 100644 index 00000000000..ea490280280 --- /dev/null +++ b/server/sonar-plugin-bridge/build.gradle @@ -0,0 +1,27 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Priviledged Plugin Bridge" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile project(path: ':sonar-plugin-api', configuration: 'shadow') + compile project(':sonar-core') + + compileOnly 'com.google.code.findbugs:jsr305' +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/server/sonar-plugin-bridge/pom.xml b/server/sonar-plugin-bridge/pom.xml deleted file mode 100644 index efb105c904a..00000000000 --- a/server/sonar-plugin-bridge/pom.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - .. - - sonar-plugin-bridge - SonarQube :: Priviledged Plugin Bridge - - - - ${project.groupId} - sonar-plugin-api - - - ${project.groupId} - sonar-core - - - com.google.code.findbugs - jsr305 - provided - - - - diff --git a/server/sonar-process/build.gradle b/server/sonar-process/build.gradle new file mode 100644 index 00000000000..b88b1371edb --- /dev/null +++ b/server/sonar-process/build.gradle @@ -0,0 +1,49 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Process" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'ch.qos.logback:logback-classic' + compile 'commons-codec:commons-codec' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compile 'com.google.guava:guava' + compile 'com.hazelcast:hazelcast' + compile 'org.slf4j:jul-to-slf4j' + compile 'org.slf4j:slf4j-api' + + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly 'com.google.protobuf:protobuf-java' + compileOnly 'org.nanohttpd:nanohttpd' + + testCompile 'com.google.code.findbugs:jsr305' + testCompile 'com.google.protobuf:protobuf-java' + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') + // Workaround to resolve dependencies of eclipse specific packaging: https://issues.gradle.org/browse/GRADLE-2076 + testCompile module('org.eclipse.jetty:jetty-server') { + dependencies( + "org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016@jar", + "org.eclipse.jetty:jetty-continuation:8.1.2.v20120308", + "org.eclipse.jetty:jetty-http:8.1.2.v20120308" + ) + } +} + +artifactoryPublish.skip = false + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/server/sonar-process/pom.xml b/server/sonar-process/pom.xml deleted file mode 100644 index 11de60a732b..00000000000 --- a/server/sonar-process/pom.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - ../ - - - sonar-process - SonarQube :: Process - Library shared by all kinds of server processes: main, web and compute engine - - - target/generated-sources/**/* - - - - - com.hazelcast - hazelcast - - - org.slf4j - slf4j-api - - - org.slf4j - jul-to-slf4j - - - ch.qos.logback - logback-classic - - - commons-codec - commons-codec - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.google.guava - guava - - - com.google.code.findbugs - jsr305 - provided - - - - org.nanohttpd - nanohttpd - true - - - - com.google.protobuf - protobuf-java - true - - - - org.assertj - assertj-core - test - - - com.tngtech.java - junit-dataprovider - test - - - ${project.groupId} - sonar-testing-harness - test - - - org.mockito - mockito-core - test - - - org.eclipse.jetty - jetty-server - test - - - diff --git a/server/sonar-qa-util/build.gradle b/server/sonar-qa-util/build.gradle new file mode 100644 index 00000000000..aab7d38eb88 --- /dev/null +++ b/server/sonar-qa-util/build.gradle @@ -0,0 +1,29 @@ +sonarqube { + skipProject = true +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'com.codeborne:selenide:4.8' + // required version 23.0 for selenide + compile 'com.google.guava:guava:23.0' + compile 'org.assertj:assertj-core' + compile 'org.sonarsource.orchestrator:sonar-orchestrator' + compile project(':sonar-ws') + + compileOnly 'com.google.code.findbugs:jsr305' +} + +artifactoryPublish.skip = false + +// Required for core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/server/sonar-qa-util/pom.xml b/server/sonar-qa-util/pom.xml deleted file mode 100644 index 601b9c7b2c1..00000000000 --- a/server/sonar-qa-util/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - .. - - sonar-qa-util - SonarQube :: Utilities for QA Tests - - - src/main/java/**/* - - - - - org.sonarsource.sonarqube - sonar-ws - ${project.version} - - - com.codeborne - selenide - 4.8 - - - com.google.guava - guava - - 23.0 - - - org.assertj - assertj-core - - - org.sonarsource.orchestrator - sonar-orchestrator - ${orchestrator.version} - - - - com.google.code.findbugs - jsr305 - provided - - - - diff --git a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/SelenideConfig.java b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/SelenideConfig.java index 30d8b84d573..65696d65689 100644 --- a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/SelenideConfig.java +++ b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/SelenideConfig.java @@ -57,7 +57,7 @@ public class SelenideConfig { Configuration.browser = browser.name(); Configuration.baseUrl = orchestrator.getServer().getUrl(); Configuration.timeout = 8_000; - Configuration.reportsFolder = "target/screenshots"; + Configuration.reportsFolder = "build/screenshots"; Configuration.screenshots = true; Configuration.captureJavascriptErrors = true; Configuration.savePageSource = true; diff --git a/server/sonar-server/build.gradle b/server/sonar-server/build.gradle new file mode 100644 index 00000000000..327e4a3ad86 --- /dev/null +++ b/server/sonar-server/build.gradle @@ -0,0 +1,96 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Server" + } +} + +sourceSets { + test { + resources { + srcDirs += ['src/test/projects'] + } + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'ch.qos.logback:logback-access' + compile 'ch.qos.logback:logback-classic' + compile 'ch.qos.logback:logback-core' + compile 'commons-dbcp:commons-dbcp' + compile 'commons-dbutils:commons-dbutils' + compile 'com.googlecode.java-diff-utils:diffutils' + compile 'com.google.code.gson:gson' + compile 'com.google.protobuf:protobuf-java' + compile 'com.hazelcast:hazelcast-client' + compile 'io.jsonwebtoken:jjwt' + compile 'javax.xml.bind:jaxb-api' + compile 'org.apache.commons:commons-email' + compile 'org.apache.httpcomponents:httpclient' + compile 'org.apache.logging.log4j:log4j-api' + compile 'org.apache.tomcat.embed:tomcat-embed-core' + compile 'org.elasticsearch.client:transport' + compile 'org.picocontainer:picocontainer' + compile 'org.slf4j:jul-to-slf4j' + compile 'org.slf4j:slf4j-api' + compile 'org.sonarsource.update-center:sonar-update-center-common' + + compile project(':server:sonar-db-dao') + compile project(':server:sonar-db-migration') + compile project(':server:sonar-plugin-bridge') + compile project(':server:sonar-process') + compile project(':sonar-core') + compile project(':sonar-scanner-protocol') + compile(project(':sonar-markdown')) { + // already shaded with sonar-plugin-api + exclude group: 'org.codehaus.sonar', module: 'sonar-channel' + } + compile project(path: ':sonar-plugin-api', configuration: 'shadow') + compile project(':sonar-ws') + + compileOnly 'com.google.code.findbugs:jsr305' + // not a transitive dep. At runtime lib/jdbc/h2 is used + compileOnly 'com.h2database:h2' + + testCompile 'com.github.kevinsawicki:http-request' + testCompile 'com.github.tlrx:elasticsearch-test' + testCompile 'com.google.code.findbugs:jsr305' + testCompile 'com.h2database:h2' + testCompile 'com.squareup.okhttp3:mockwebserver' + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'junit:junit' + testCompile 'org.apache.logging.log4j:log4j-api' + testCompile 'org.apache.logging.log4j:log4j-core' + testCompile 'org.assertj:assertj-core' + testCompile 'org.assertj:assertj-guava' + testCompile("org.elasticsearch.test:framework:${elasticsearchVersion}") { + // should be excluded to avoid ES go into "test mode" and require to run EsTester-based UTs with RandomizedRunner + exclude group: 'com.carrotsearch.randomizedtesting', module: 'randomizedtesting-runner' + exclude group: 'org.elasticsearch', module: 'securemock' + } + testCompile 'org.hamcrest:hamcrest-all' + testCompile 'org.mockito:mockito-core' + testCompile 'org.reflections:reflections' + testCompile 'org.subethamail:subethasmtp' + testCompile project(':server:sonar-db-testing') +} + +task testJar(type: Jar) { + classifier = 'tests' + from sourceSets.test.output +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact testJar + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/server/sonar-server/pom.xml b/server/sonar-server/pom.xml deleted file mode 100644 index c9b9bd499fb..00000000000 --- a/server/sonar-server/pom.xml +++ /dev/null @@ -1,344 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - .. - - sonar-server - SonarQube :: Server - - - - org.slf4j - slf4j-api - - - org.slf4j - jcl-over-slf4j - - - org.slf4j - jul-to-slf4j - - - org.apache.logging.log4j - log4j-api - - - org.apache.logging.log4j - log4j-core - - - ch.qos.logback - logback-access - - - ch.qos.logback - logback-classic - - - ch.qos.logback - logback-core - - - org.apache.tomcat.embed - tomcat-embed-core - - - com.google.code.gson - gson - - - com.h2database - h2 - - - ${project.groupId} - sonar-core - - - ${project.groupId} - sonar-db-dao - - - ${project.groupId} - sonar-db-migration - - - ${project.groupId} - sonar-scanner-protocol - - - ${project.groupId} - sonar-markdown - - - - org.codehaus.sonar - sonar-channel - - - - - ${project.groupId} - sonar-process - ${project.version} - - - ${project.groupId} - sonar-plugin-api - ${project.version} - - - - com.google.code.findbugs - jsr305 - - - org.apache.maven.shared - maven-dependency-tree - - - org.apache.maven.shared - maven-common-artifact-filters - - - org.apache.maven - maven-project - - - - - ${project.groupId} - sonar-ws - ${project.version} - - - ${project.groupId} - sonar-plugin-bridge - ${project.version} - - - org.sonarsource.update-center - sonar-update-center-common - - - commons-dbutils - commons-dbutils - - - org.apache.commons - commons-email - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.googlecode.java-diff-utils - diffutils - 1.2 - - - org.picocontainer - picocontainer - - - commons-codec - commons-codec - - - commons-dbcp - commons-dbcp - - - org.apache.httpcomponents - httpclient - 4.5.2 - - - org.elasticsearch.client - transport - ${elasticsearch.version} - - - org.elasticsearch.test - framework - ${elasticsearch.version} - test - - - - com.carrotsearch.randomizedtesting - randomizedtesting-runner - - - org.elasticsearch - securemock - - - - - com.hazelcast - hazelcast-client - - - com.google.protobuf - protobuf-java - - - javax.xml.bind - jaxb-api - - - com.google.code.findbugs - jsr305 - provided - - - io.jsonwebtoken - jjwt - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.assertj - assertj-guava - test - - - org.mockito - mockito-core - test - - - - org.hamcrest - hamcrest-all - test - - - ${project.groupId} - sonar-db-testing - pom - test - - - com.github.tlrx - elasticsearch-test - test - - - com.tngtech.java - junit-dataprovider - test - - - com.github.kevinsawicki - http-request - test - - - org.reflections - reflections - test - - - org.subethamail - subethasmtp - test - - - com.squareup.okhttp3 - mockwebserver - test - - - - - - - - src/main/resources - true - - build.properties - - - - src/main/resources - false - - build.properties - - - - - - src/test/resources - false - - - src/test/projects - false - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - logback-test.xml - - - - - - - - true - org.sonar.server.app.App - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - - org.apache.logging.log4j:log4j-to-slf4j - - - - - - - diff --git a/server/sonar-server/src/main/java/org/sonar/ce/log/CeLogging.java b/server/sonar-server/src/main/java/org/sonar/ce/log/CeLogging.java index f9408af6976..b6569cdaf91 100644 --- a/server/sonar-server/src/main/java/org/sonar/ce/log/CeLogging.java +++ b/server/sonar-server/src/main/java/org/sonar/ce/log/CeLogging.java @@ -19,7 +19,7 @@ */ package org.sonar.ce.log; -import org.apache.log4j.MDC; +import org.slf4j.MDC; import org.sonar.ce.queue.CeTask; public class CeLogging { diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java b/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java index 4992c82be62..0d53ec3bb5b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java +++ b/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java @@ -61,6 +61,7 @@ class EmbeddedTomcat { tomcat.start(); new TomcatStartupLogs(Loggers.get(getClass())).log(tomcat); } catch (LifecycleException e) { + Loggers.get(EmbeddedTomcat.class).error("Fail to start web server", e); Throwables.propagate(e); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/es/EsClientProvider.java b/server/sonar-server/src/main/java/org/sonar/server/es/EsClientProvider.java index ff85a78bac9..319bb38f0bf 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/es/EsClientProvider.java +++ b/server/sonar-server/src/main/java/org/sonar/server/es/EsClientProvider.java @@ -32,7 +32,6 @@ import org.elasticsearch.common.network.NetworkModule; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.transport.TransportAddress; -import org.elasticsearch.index.reindex.ReindexPlugin; import org.elasticsearch.join.ParentJoinPlugin; import org.elasticsearch.percolator.PercolatorPlugin; import org.elasticsearch.transport.Netty4Plugin; @@ -103,7 +102,7 @@ public class EsClientProvider extends ProviderAdapter { static class MinimalTransportClient extends TransportClient { MinimalTransportClient(Settings settings) { - super(settings, unmodifiableList(Arrays.asList(Netty4Plugin.class, ReindexPlugin.class, PercolatorPlugin.class, ParentJoinPlugin.class))); + super(settings, unmodifiableList(Arrays.asList(Netty4Plugin.class, PercolatorPlugin.class, ParentJoinPlugin.class))); } @Override diff --git a/server/sonar-web/build.gradle b/server/sonar-web/build.gradle new file mode 100644 index 00000000000..ee71411cf03 --- /dev/null +++ b/server/sonar-web/build.gradle @@ -0,0 +1,44 @@ +sonarqube { + properties { + property "sonar.projectName", "${projectTitle} :: Web" + property "sonar.sources", "src/main/js" + property "sonar.tests", "src/main/js" + property "sonar.test.inclusions", "src/main/js/**/__tests__/**" + property "sonar.exclusions", "src/main/js/libs/third-party/**/*,src/main/js/libs/require.js,src/main/js/**/__tests__/**" + } +} + +apply plugin: 'com.moowork.node' +apply plugin: 'war' + +configurations { + branding +} +dependencies { + branding 'com.sonarsource:sonarsource-branding:1.3.0.307@war' +} +task unzipBranding(type: Copy) { + into projectDir + from { zipTree(configurations.branding.singleFile) } + include '**/*.js' + include '**/*.svg' + includeEmptyDirs = false +} + +node { + version = '8.5.0' + yarnVersion = '1.1.0' + download = true +} + +yarn_run { + if (release) { dependsOn unzipBranding } + inputs.dir('scripts') + inputs.dir('src/main/js') + inputs.file('build.gradle') + outputs.dir('src/main/webapp') + + args = ['build'] +} + +war.dependsOn yarn_run diff --git a/server/sonar-web/pom.xml b/server/sonar-web/pom.xml deleted file mode 100644 index 7f51af819f5..00000000000 --- a/server/sonar-web/pom.xml +++ /dev/null @@ -1,256 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - server - 7.1-SNAPSHOT - .. - - sonar-web - war - SonarQube :: Web - - - - src/main/js - src/main/js - src/main/js/**/__tests__/** - src/main/js/libs/third-party/**/*,src/main/js/libs/require.js,src/main/js/**/__tests__/** - build - - - - - - src/main/resources - true - - - - - - maven-clean-plugin - - - - ${basedir}/src/main/webapp/deploy - - **/* - - - readme.txt - - - - - - - org.apache.maven.plugins - maven-resources-plugin - - - process-resources - - copy-resources - - - ${project.build.directory}/${project.build.finalName}/ - - - ${basedir}/src/main/webapp - false - - - - - - copy-generated-webapp - - process-resources - - copy-resources - - - ${project.build.directory}/${project.build.finalName} - true - - - src/main/webapp/build - false - - - - - - - - com.github.eirslett - frontend-maven-plugin - - - install node and yarn - - install-node-and-yarn - - - v8.5.0 - v1.1.0 - - - - yarn install - - yarn - - - - generate-resources - yarn run script - - yarn - - - run ${yarn.script} - - - - - - org.apache.maven.plugins - maven-war-plugin - - - **/*.log,*.iml,WEB-INF/script/,WEB-INF/test/,javascripts/*-min.js,stylesheets/*-min.css,javascripts/tests/**/*, - build/**,templates/** - - - js/**,css/** - - - - ${project.version} - - ${buildNumber} - ${timestamp} - - - - - - com.mycila - license-maven-plugin - - - src/main/webapp/**/* - - - - - - - - - release - - - - maven-clean-plugin - - - - ${basedir}/node - - **/* - - - - ${basedir}/node_modules - - **/* - - - - ${basedir}/src/main/webapp/deploy - - **/* - - - readme.txt - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-branding - initialize - - unpack - - - - - - - com.sonarsource - sonarsource-branding - war - true - ${project.basedir} - **/*.js,**/*.svg - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - empty-javadoc-jar - package - - jar - - - javadoc - - - - empty-sources-jar - package - - jar - - - sources - - - - - - - - - com.sonarsource - sonarsource-branding - 1.3.0.307 - war - runtime - - - - - dev - - build-fast - - - - - diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 00000000000..0009ccb1366 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,61 @@ +rootProject.name = 'sonarqube' + +include 'plugins:sonar-xoo-plugin' + +include 'server:sonar-ce' +include 'server:sonar-db-testing' +include 'server:sonar-db-core' +include 'server:sonar-db-dao' +include 'server:sonar-db-migration' +include 'server:sonar-main' +include 'server:sonar-plugin-bridge' +include 'server:sonar-process' +include 'server:sonar-qa-util' +include 'server:sonar-server' +include 'server:sonar-web' + +include 'sonar-application' +include 'sonar-check-api' +include 'sonar-core' +include 'sonar-duplications' +include 'sonar-home' +include 'sonar-markdown' +include 'sonar-plugin-api' +include 'sonar-plugin-api-deps' +include 'sonar-scanner-engine' +include 'sonar-scanner-engine-shaded' +include 'sonar-scanner-protocol' +include 'sonar-testing-harness' +include 'sonar-ws' +include 'sonar-ws-generator' + +include 'tests:plugins:access-secured-props-plugin' +include 'tests:plugins:backdating-customplugin' +include 'tests:plugins:backdating-plugin-v1' +include 'tests:plugins:backdating-plugin-v2' +include 'tests:plugins:base-auth-plugin' +include 'tests:plugins:batch-plugin' +include 'tests:plugins:extension-lifecycle-plugin' +include 'tests:plugins:fake-billing-plugin' +include 'tests:plugins:fake-governance-plugin' +include 'tests:plugins:foo-plugin-v1' +include 'tests:plugins:foo-plugin-v2' +include 'tests:plugins:global-property-change-plugin' +include 'tests:plugins:issue-filter-plugin' +include 'tests:plugins:l10n-fr-pack' +include 'tests:plugins:license-plugin' +include 'tests:plugins:oauth2-auth-plugin' +include 'tests:plugins:posttask-plugin' +include 'tests:plugins:project-builder-plugin' +include 'tests:plugins:property-relocation-plugin' +include 'tests:plugins:property-sets-plugin' +include 'tests:plugins:security-plugin' +include 'tests:plugins:server-plugin' +include 'tests:plugins:settings-encryption-plugin' +include 'tests:plugins:settings-plugin' +include 'tests:plugins:sonar-fake-plugin' +include 'tests:plugins:sonar-subcategories-plugin' +include 'tests:plugins:ui-extensions-plugin' +include 'tests:plugins:wait-at-platform-level4-plugin' +include 'tests:plugins:ws-plugin' +include 'tests' diff --git a/sonar-application/assembly-common.xml b/sonar-application/assembly-common.xml deleted file mode 100644 index 8d85b77149b..00000000000 --- a/sonar-application/assembly-common.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - common-lib-dir - - dir - - / - - - - / - true - false - runtime - - - - - diff --git a/sonar-application/assembly.xml b/sonar-application/assembly.xml deleted file mode 100644 index ccbf0a97315..00000000000 --- a/sonar-application/assembly.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - distribution - - ${assembly.format} - - true - - - - lib - false - false - true - - org.sonarsource.sonarqube:sonar-application - - - - - lib/jsw - false - false - false - - tanukisoft:wrapper - - provided - - - - lib/server - false - true - true - - org.sonarsource.sonarqube:sonar-server - - provided - - - - lib/ce - false - true - true - - org.sonarsource.sonarqube:sonar-ce - - provided - - - - - lib/scanner - false - - org.sonarsource.sonarqube:sonar-scanner-engine-shaded - - provided - - - - lib/bundled-plugins - false - - org.sonarsource.*:sonar-*-plugin - - provided - - - - web - - org.sonarsource.sonarqube:sonar-web - - true - provided - - - - lib/jdbc/mssql/ - - com.microsoft.sqlserver:mssql-jdbc - - false - provided - - - lib/jdbc/mysql/ - - mysql:mysql-connector-java - - false - provided - - - lib/jdbc/postgresql/ - - org.postgresql:postgresql - - false - provided - - - lib/jdbc/h2/ - - com.h2database:h2 - - false - provided - - - - - - - target/common - lib/common - - - - src/main/assembly - - - bin/*/lib/*.so - bin/*/lib/*.jnilib - bin/*/lib/*.dll - bin/*/wrapper - bin/*/wrapper.exe - elasticsearch/bin/elasticsearch - elasticsearch/bin/elasticsearch.bat - - 0755 - - - - src/main/assembly - - - conf/** - - - dos - 0644 - - - - src/main/assembly - - - **/*.bat - **/*.cmd - - dos - 0644 - - - - src/main/assembly - - - **/*.sh - **/ant - **/antRun - - unix - 0755 - - - - src/main/assembly - - - conf/** - **/*.bat - **/*.cmd - **/*.sh - **/ant - **/antRun - - elasticsearch/modules/lang-expression/ - elasticsearch/modules/lang-groovy/ - elasticsearch/modules/lang-mustache/ - elasticsearch/modules/lang-painless/ - elasticsearch/modules/transport-netty3/ - - 0644 - - - - src/main/assembly - extensions/jdbc-driver/oracle/ - - **/* - - - - src/main/assembly - logs/ - - **/* - - - - src/main/assembly - elasticsearch/plugins - - */** - - - - diff --git a/sonar-application/build.gradle b/sonar-application/build.gradle new file mode 100644 index 00000000000..bb8b58b74dc --- /dev/null +++ b/sonar-application/build.gradle @@ -0,0 +1,148 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Application" + } +} + +configurations { + ce + jsw + scanner + server + webapp + jdbc_mssql { + transitive = false + } + jdbc_mysql { + transitive = false + } + jdbc_postgresql { + transitive = false + } + jdbc_h2 { + transitive = false + } + bundledPlugin { + transitive = false + } +} + +dependencies { + compile 'org.elasticsearch.client:transport' + compile project(':server:sonar-main') + compile project(':server:sonar-process') + + compileOnly 'com.google.code.findbugs:jsr305' + + ce project(':server:sonar-ce') + jsw 'tanukisoft:wrapper:3.2.3' + scanner project(path: ':sonar-scanner-engine-shaded', configuration: 'shadow') + server project(':server:sonar-server') + webapp project(path: ':server:sonar-web', configuration: 'archives') + + jdbc_mssql 'com.microsoft.sqlserver:mssql-jdbc' + jdbc_mysql 'mysql:mysql-connector-java' + jdbc_postgresql 'org.postgresql:postgresql' + jdbc_h2 'com.h2database:h2' + + bundledPlugin 'org.sonarsource.java:sonar-java-plugin:5.1.0.13090@jar' + bundledPlugin 'org.sonarsource.javascript:sonar-javascript-plugin:4.0.0.5862@jar' + bundledPlugin 'org.sonarsource.dotnet:sonar-csharp-plugin:6.7.1.4347@jar' + bundledPlugin 'org.sonarsource.scm.git:sonar-scm-git-plugin:1.4.0.1037@jar' + bundledPlugin 'org.sonarsource.scm.svn:sonar-scm-svn-plugin:1.7.0.1017@jar' + bundledPlugin 'org.sonarsource.php:sonar-php-plugin:2.12.1.3018@jar' + bundledPlugin 'org.sonarsource.python:sonar-python-plugin:1.9.0.2010@jar' + bundledPlugin 'org.sonarsource.flex:sonar-flex-plugin:2.3@jar' + bundledPlugin 'org.sonarsource.xml:sonar-xml-plugin:1.4.3.1027@jar' + bundledPlugin 'org.sonarsource.typescript:sonar-typescript-plugin:1.5.0.2122@jar' + + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + +} + +jar { + manifest { + attributes( + 'Class-Path': configurations.compile.collect { "common/${it.getName()}" }.join(' '), + 'Main-Class': 'org.sonar.application.App' + ) + } +} + +task zip(type: Zip) { + duplicatesStrategy DuplicatesStrategy.EXCLUDE + def archiveDir = "sonarqube-$version" + into("${archiveDir}/") { + from file('src/main/assembly') + exclude 'elasticsearch/modules/lang-expression/**' + exclude 'elasticsearch/modules/lang-groovy/**' + exclude 'elasticsearch/modules/lang-mustache/**' + exclude 'elasticsearch/modules/lang-painless/**' + exclude 'elasticsearch/modules/transport-netty3/**' + } + // Create the empty dir (plugins) required by elasticsearch + into("${archiveDir}/elasticsearch/") { + from "$buildDir/elasticsearch" + } + into("${archiveDir}/lib/") { + from jar + } + into("${archiveDir}/lib/bundled-plugins/") { + from configurations.bundledPlugin + } + into("${archiveDir}/lib/jsw/") { + from configurations.jsw + } + into("${archiveDir}/lib/scanner/") { + from configurations.scanner + } + into("${archiveDir}/lib/common/") { + from configurations.ce + configurations.server + configurations.compile + } + dependsOn configurations.webapp + into("${archiveDir}/web/") { + from { + configurations.webapp.files.collect { zipTree(it) } + } + } + into("${archiveDir}/lib/jdbc/mssql/") { + from configurations.jdbc_mssql + } + into("${archiveDir}/lib/jdbc/mysql/") { + from configurations.jdbc_mysql + } + into("${archiveDir}/lib/jdbc/postgresql/") { + from configurations.jdbc_postgresql + } + into("${archiveDir}/lib/jdbc/h2/") { + from configurations.jdbc_h2 + } +} +// Create the empty dir required by elasticsearch +zip.doFirst { + new File(buildDir, 'elasticsearch/plugins').mkdirs() +} +// Check the size of the archive +zip.doLast { + def minLength = 155000000 + def maxLength = 170000000 + def length = new File(distsDir, archiveName).length() + if (length < minLength) + throw new GradleException("$archiveName size ($length) too small. Min is $minLength") + if (length > maxLength) + throw new GradleException("$distsDir/$archiveName size ($length) too large. Max is $maxLength") +} + +assemble.dependsOn zip + +artifactoryPublish.skip = false + +publishing { + publications { + mavenJava(MavenPublication) { + artifact zip + } + } +} diff --git a/sonar-application/pom.xml b/sonar-application/pom.xml deleted file mode 100644 index f599fb98c6a..00000000000 --- a/sonar-application/pom.xml +++ /dev/null @@ -1,271 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-application - jar - SonarQube :: Application - Package the standalone distribution - - - true - zip - true - - - - - ${project.groupId} - sonar-process - ${project.version} - - - ${project.groupId} - sonar-main - ${project.version} - - - - - org.elasticsearch.client - transport - - - - com.google.code.findbugs - jsr305 - provided - - - - ${project.groupId} - sonar-server - ${project.version} - provided - - - ${project.groupId} - sonar-ce - ${project.version} - provided - - - ${project.groupId} - sonar-scanner-engine-shaded - ${project.version} - provided - - - ${project.groupId} - sonar-web - ${project.version} - war - provided - - - - com.microsoft.sqlserver - mssql-jdbc - provided - - - mysql - mysql-connector-java - provided - - - org.postgresql - postgresql - provided - - - com.h2database - h2 - provided - - - - - org.sonarsource.java - sonar-java-plugin - sonar-plugin - provided - - - org.sonarsource.javascript - sonar-javascript-plugin - sonar-plugin - provided - - - org.sonarsource.dotnet - sonar-csharp-plugin - sonar-plugin - provided - - - org.sonarsource.flex - sonar-flex-plugin - sonar-plugin - provided - - - org.sonarsource.scm.git - sonar-scm-git-plugin - sonar-plugin - provided - - - org.sonarsource.scm.svn - sonar-scm-svn-plugin - sonar-plugin - provided - - - org.sonarsource.php - sonar-php-plugin - sonar-plugin - provided - - - org.sonarsource.python - sonar-python-plugin - sonar-plugin - provided - - - org.sonarsource.typescript - sonar-typescript-plugin - sonar-plugin - provided - - - org.sonarsource.xml - sonar-xml-plugin - sonar-plugin - provided - - - - tanukisoft - wrapper - 3.2.3 - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - true - - true - common - org.sonar.application.App - - - distribution - ${project.url} - - - - - - maven-assembly-plugin - - - assemble-common-lib-dir - prepare-package - - single - - - false - common - - assembly-common.xml - - - - - assemble-distribution-zip - package - - single - - - false - sonarqube-${project.version} - - assembly.xml - - ${assembly.recompressZippedFiles} - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - - - enforce-distribution-size - - enforce - - verify - - - - 155000000 - 170000000 - - ${project.build.directory}/sonarqube-${project.version}.zip - - - - - - - - - - - - dev - - false - - - - - diff --git a/sonar-application/src/main/assembly/logs/README.txt b/sonar-application/src/main/assembly/logs/README.txt new file mode 100644 index 00000000000..5608b3348d8 --- /dev/null +++ b/sonar-application/src/main/assembly/logs/README.txt @@ -0,0 +1 @@ +This directory contains log files. See advanced configuration in conf/sonar.properties. diff --git a/sonar-check-api/build.gradle b/sonar-check-api/build.gradle new file mode 100644 index 00000000000..c7749e3dd38 --- /dev/null +++ b/sonar-check-api/build.gradle @@ -0,0 +1,11 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Check API" + } +} + +dependencies { + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'junit:junit' +} diff --git a/sonar-check-api/pom.xml b/sonar-check-api/pom.xml deleted file mode 100644 index 76cc534f50f..00000000000 --- a/sonar-check-api/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - .. - - sonar-check-api - SonarQube :: Check API - Check API - - - - com.google.code.findbugs - jsr305 - provided - - - junit - junit - test - - - diff --git a/sonar-core/build.gradle b/sonar-core/build.gradle new file mode 100644 index 00000000000..e9cd948163e --- /dev/null +++ b/sonar-core/build.gradle @@ -0,0 +1,53 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Core" + } +} + +configurations { + includeInResources +} + +dependencies { + compileOnly 'com.google.code.findbugs:jsr305' + compile 'commons-codec:commons-codec' + compile 'org.apache.commons:commons-csv' + compile 'org.picocontainer:picocontainer' + compile 'com.google.protobuf:protobuf-java' + compile 'org.codehaus.sonar:sonar-classloader' + compile project(path: ':sonar-plugin-api', configuration: 'shadow') + compile 'org.sonarsource.update-center:sonar-update-center-common' + compile 'org.slf4j:slf4j-api' + compile 'ch.qos.logback:logback-classic' + compile 'ch.qos.logback:logback-core' + + includeInResources project(path: ':sonar-plugin-api-deps', configuration: 'shadow') + + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') + testCompile 'org.simpleframework:simple' + testCompileOnly 'com.google.code.findbugs:jsr305' +} + +// sonar-plugin-api.jar is copied into target JAR file +processResources { + into('/') { + from configurations.includeInResources + rename '(.*)-' + project.version + '-all.jar', '$1.jar' + } +} + +// Used by sonar-db-core to run DB Unit Tests +artifactoryPublish.skip = false +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-core/pom.xml b/sonar-core/pom.xml deleted file mode 100644 index a0e5e0af6ac..00000000000 --- a/sonar-core/pom.xml +++ /dev/null @@ -1,166 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-core - - SonarQube :: Core - Library shared by analyzer and server - - - target/generated-sources/**/*,target/generated-test-sources/**/* - - - - - com.google.code.findbugs - jsr305 - provided - - - commons-codec - commons-codec - - - org.apache.commons - commons-csv - - - org.picocontainer - picocontainer - - - com.google.protobuf - protobuf-java - - - org.codehaus.sonar - sonar-classloader - - - ${project.groupId} - sonar-plugin-api - - - org.sonarsource.update-center - sonar-update-center-common - - - - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - - - ch.qos.logback - logback-core - - - org.slf4j - jcl-over-slf4j - - - org.slf4j - log4j-over-slf4j - - - - - ${project.groupId} - sonar-plugin-api-deps - ${project.version} - true - runtime - - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - com.tngtech.java - junit-dataprovider - test - - - org.mockito - mockito-core - test - - - ${project.groupId} - sonar-testing-harness - test - - - org.simpleframework - simple - 4.1.21 - test - - - - - - - - org.basepom.maven - duplicate-finder-maven-plugin - - - - ${project.groupId} - sonar-plugin-api-deps - - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-deprecated-api-deps - generate-resources - - copy - - - - - ${project.groupId} - sonar-plugin-api-deps - sonar-plugin-api-deps.jar - - - ${project.build.outputDirectory} - false - true - - - - - - - diff --git a/sonar-duplications/build.gradle b/sonar-duplications/build.gradle new file mode 100644 index 00000000000..540f457de8f --- /dev/null +++ b/sonar-duplications/build.gradle @@ -0,0 +1,18 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Duplications" + } +} + +dependencies { + compile 'org.codehaus.sonar:sonar-channel' + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'ch.qos.logback:logback-classic' + testCompile 'commons-io:commons-io' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + testCompile 'pmd:pmd:4.3' +} diff --git a/sonar-duplications/pom.xml b/sonar-duplications/pom.xml deleted file mode 100644 index 8c7d106fb8a..00000000000 --- a/sonar-duplications/pom.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-duplications - - SonarQube :: Duplications - Detect duplicated code - - - true - - - - - org.codehaus.sonar - sonar-channel - - - com.google.code.findbugs - jsr305 - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - commons-io - commons-io - test - - - pmd - pmd - 4.3 - test - - - xml-apis - xml-apis - - - xerces - xercesImpl - - - - - ch.qos.logback - logback-classic - test - - - diff --git a/sonar-home/build.gradle b/sonar-home/build.gradle new file mode 100644 index 00000000000..a367fdd6c35 --- /dev/null +++ b/sonar-home/build.gradle @@ -0,0 +1,28 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Home" + } +} + +dependencies { + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'commons-codec:commons-codec' + testCompile 'commons-io:commons-io' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-home/pom.xml b/sonar-home/pom.xml deleted file mode 100644 index 658a04347bf..00000000000 --- a/sonar-home/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-home - - SonarQube :: Home - Access the user home directory that contains cache of files - - - - com.google.code.findbugs - jsr305 - provided - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - commons-io - commons-io - test - - - - commons-codec - commons-codec - test - - - - - diff --git a/sonar-markdown/build.gradle b/sonar-markdown/build.gradle new file mode 100644 index 00000000000..28282eadad5 --- /dev/null +++ b/sonar-markdown/build.gradle @@ -0,0 +1,28 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Markdown" + } +} + +dependencies { + compile 'commons-lang:commons-lang' + compile 'org.codehaus.sonar:sonar-channel' + compile 'org.slf4j:slf4j-api' + + testCompile 'ch.qos.logback:logback-classic' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-markdown/pom.xml b/sonar-markdown/pom.xml deleted file mode 100644 index d02542ac8be..00000000000 --- a/sonar-markdown/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - .. - - - sonar-markdown - SonarQube :: Markdown - - - - org.codehaus.sonar - sonar-channel - - - commons-lang - commons-lang - - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - test - - - junit - junit - test - - - org.assertj - assertj-core - test - - - diff --git a/sonar-plugin-api-deps/build.gradle b/sonar-plugin-api-deps/build.gradle new file mode 100644 index 00000000000..0c99ac23fb6 --- /dev/null +++ b/sonar-plugin-api-deps/build.gradle @@ -0,0 +1,39 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Plugin API Dependencies" + } +} + +apply plugin: 'com.github.johnrengelman.shadow' + +dependencies { + // Versions must not be changed and overridden from root build.gradle (see dependencyManagement section). + // These are the versions defined in SQ 5.1 + compile 'com.google.code.gson:gson:2.3.1' + compile 'com.google.guava:guava:10.0.1' + compile 'commons-beanutils:commons-beanutils:1.9.3' + compile 'commons-codec:commons-codec:1.8' + compile 'commons-collections:commons-collections:3.2.2' + compile 'org.apache.commons:commons-email:1.3.2' + compile 'commons-io:commons-io:2.4' + compile 'commons-lang:commons-lang:2.6' + compile('dom4j:dom4j:1.6.1') { + exclude group: 'xml-apis' + } + compile 'org.picocontainer:picocontainer:2.14.3' + compile 'org.slf4j:slf4j-api:1.7.10' + compile 'ch.qos.logback:logback-classic:1.1.2' + compile 'ch.qos.logback:logback-core:1.1.2' + compile('org.apache.maven:maven-core:3.0.5') { + exclude group: 'classworlds', module: 'classworlds' + exclude group: 'org.sonatype.sisu', module: 'sisu-guava' + } + compile 'org.apache.maven:maven-artifact:3.0.5' + compile('org.codehaus.sonar:sonar-squid:4.1') { + exclude group: 'org.codehaus.sonar', module: 'sonar-check-api' + } + compile('org.codehaus.sonar:sonar-java-api:5.1') { + exclude group: 'org.codehaus.sonar', module: 'sonar-deprecated' + exclude group: 'org.codehaus.sonar', module: 'sonar-plugin-api' + } +} diff --git a/sonar-plugin-api-deps/pom.xml b/sonar-plugin-api-deps/pom.xml deleted file mode 100644 index 5576fb917ee..00000000000 --- a/sonar-plugin-api-deps/pom.xml +++ /dev/null @@ -1,231 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-plugin-api-deps - - SonarQube :: Plugin API Dependencies - Deprecated transitive dependencies of sonar-plugin-api - - - true - - - - - - - - com.google.code.gson - gson - 2.3.1 - - - com.google.guava - guava - 10.0.1 - - - commons-beanutils - commons-beanutils - 1.9.3 - - - commons-codec - commons-codec - 1.8 - - - commons-collections - commons-collections - 3.2.2 - - - org.apache.commons - commons-email - 1.3.2 - - - commons-io - commons-io - 2.4 - - - commons-lang - commons-lang - 2.6 - - - dom4j - dom4j - 1.6.1 - - - xml-apis - xml-apis - 1.4.01 - - - org.picocontainer - picocontainer - 2.14.3 - - - org.slf4j - slf4j-api - 1.7.10 - - - ch.qos.logback - logback-classic - 1.1.2 - - - ch.qos.logback - logback-core - 1.1.2 - - - - org.apache.maven - maven-core - 3.0.5 - - - - classworlds - classworlds - - - - org.sonatype.sisu - sisu-guava - - - - - org.apache.maven - maven-artifact - 3.0.5 - - - org.codehaus.sonar - sonar-squid - 4.1 - - - - org.codehaus.sonar - sonar-check-api - - - - - org.codehaus.sonar - sonar-java-api - 5.1 - - - org.codehaus.sonar - sonar-deprecated - - - org.codehaus.sonar - sonar-plugin-api - - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - false - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - empty-javadoc-jar - package - - jar - - - javadoc - - - - empty-sources-jar - package - - jar - - - sources - - - - - - - - - - - - securityCheck - - - - org.owasp - dependency-check-maven - - - - check - - - true - - - - - - - - - - diff --git a/sonar-plugin-api/build.gradle b/sonar-plugin-api/build.gradle new file mode 100644 index 00000000000..8bf8e28798b --- /dev/null +++ b/sonar-plugin-api/build.gradle @@ -0,0 +1,82 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Plugin API" + } +} + +apply plugin: 'com.github.johnrengelman.shadow' + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'commons-codec:commons-codec' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compile 'com.google.code.gson:gson' + compile 'com.google.guava:guava' + + // shaded, but not relocated + compile project(':sonar-check-api') + compile(project(':sonar-duplications')) { + exclude group: 'org.slf4', module: 'slf4j-api' + } + + shadow 'org.codehaus.staxmate:staxmate' + shadow 'org.codehaus.woodstox:stax2-api' + shadow 'org.codehaus.woodstox:woodstox-core-lgpl' + + compileOnly 'ch.qos.logback:logback-classic' + compileOnly 'ch.qos.logback:logback-core' + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly 'javax.servlet:javax.servlet-api' + compileOnly 'junit:junit' + compileOnly 'org.slf4j:slf4j-api' + + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') +} + +sourceSets { + // Make the compileOnly dependencies available when compiling/running tests + test.compileClasspath += configurations.compileOnly + configurations.shadow + test.runtimeClasspath += configurations.compileOnly + configurations.shadow +} + +def on3Digits(version) { + def projectversion3digits = version - ~/-\w+/ + projectversion3digits = projectversion3digits.tokenize('.').plus(0).take(3).join('.') +} + +import org.apache.tools.ant.filters.ReplaceTokens +processResources { + filter ReplaceTokens, tokens: [ + // The build version is composed of 4 fields, including the semantic version and the build number provided by Travis. + 'project.buildVersion': project.version.endsWith('SNAPSHOT') ? project.version : on3Digits(project.version) + '.' + System.getProperty("buildNumber"), + 'project.version.3digits': project.version.endsWith('SNAPSHOT') ? project.version : on3Digits(project.version) + ] +} + +shadowJar { + configurations = [project.configurations.default] + relocate('com.google', 'org.sonar.api.internal.google') + relocate('org.apache.commons', 'org.sonar.api.internal.apachecommons') + dependencies { + exclude(dependency('org.codehaus.woodstox:woodstox-core-lgpl')) + exclude(dependency('org.codehaus.woodstox:stax2-api')) + exclude(dependency('org.codehaus.staxmate:staxmate')) + } +} + +artifactoryPublish.skip = false + +publishing { + publications { + mavenJava(MavenPublication) { + artifact source: shadowJar, classifier: null + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-plugin-api/pom.xml b/sonar-plugin-api/pom.xml deleted file mode 100644 index ab8dc7cef4f..00000000000 --- a/sonar-plugin-api/pom.xml +++ /dev/null @@ -1,282 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-plugin-api - jar - - SonarQube :: Plugin API - - - - ${project.version} - - - ${buildVersion} - - - - - - - com.google.code.gson - gson - - - com.google.guava - guava - - - commons-codec - commons-codec - - - commons-io - commons-io - - - commons-lang - commons-lang - - - - - ${project.groupId} - sonar-check-api - ${project.version} - - - ${project.groupId} - sonar-duplications - ${project.version} - - - org.slf4j - slf4j-api - - - - - - - org.codehaus.woodstox - woodstox-core-lgpl - - - stax - stax-api - - - - - org.codehaus.woodstox - stax2-api - - - org.codehaus.staxmate - staxmate - - - - com.google.code.findbugs - jsr305 - provided - - - org.slf4j - slf4j-api - true - provided - - - javax.servlet - javax.servlet-api - 3.0.1 - provided - true - - - ch.qos.logback - logback-classic - provided - true - - - ch.qos.logback - logback-core - provided - true - - - junit - junit - provided - true - - - - - com.tngtech.java - junit-dataprovider - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - ${project.groupId} - sonar-testing-harness - test - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - true - true - - - org.codehaus.woodstox:woodstox-core-lgpl - org.codehaus.woodstox:stax2-api - org.codehaus.staxmate:staxmate - - - - - - ${project.groupId}:sonar-duplications - - ** - - - - org.codehaus.sonar:sonar-channel - - ** - - - - org.sonarsource.sonarqube:sonar-check-api - - ** - - - - - - com.google - org.sonar.api.internal.google - - - org.apache.commons - org.sonar.api.internal.apachecommons - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - logback-test.xml - - - - - - - com.github.genthaler - beanshell-maven-plugin - - - compute-version-on-three-fields - generate-resources - - run - - - - - - - - - - - - - src/main/resources - true - - - - - diff --git a/sonar-plugin-api/src/main/resources/sonar-api-version.txt b/sonar-plugin-api/src/main/resources/sonar-api-version.txt index 6b7ce460f25..d2193c1c60f 100644 --- a/sonar-plugin-api/src/main/resources/sonar-api-version.txt +++ b/sonar-plugin-api/src/main/resources/sonar-api-version.txt @@ -1 +1 @@ -${buildVersion} +@project.buildVersion@ \ No newline at end of file diff --git a/sonar-plugin-api/src/main/resources/sq-version.txt b/sonar-plugin-api/src/main/resources/sq-version.txt index ab8c87a30ad..b3f131da385 100644 --- a/sonar-plugin-api/src/main/resources/sq-version.txt +++ b/sonar-plugin-api/src/main/resources/sq-version.txt @@ -1 +1 @@ -${buildVersionOnThreeFields} +@project.version.3digits@ \ No newline at end of file diff --git a/sonar-scanner-engine-shaded/build.gradle b/sonar-scanner-engine-shaded/build.gradle new file mode 100644 index 00000000000..9d32f9d396c --- /dev/null +++ b/sonar-scanner-engine-shaded/build.gradle @@ -0,0 +1,11 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Scanner Engine Shaded" + } +} + +apply plugin: 'com.github.johnrengelman.shadow' + +dependencies { + compile project(':sonar-scanner-engine') +} diff --git a/sonar-scanner-engine-shaded/pom.xml b/sonar-scanner-engine-shaded/pom.xml deleted file mode 100644 index 2ccd95b2a02..00000000000 --- a/sonar-scanner-engine-shaded/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-scanner-engine-shaded - SonarQube :: Scanner Engine Shaded - All Scanner Engine dependencies in a single jar - - - - ${project.groupId} - sonar-scanner-engine - ${project.version} - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - empty-javadoc-jar - package - - jar - - - javadoc - - - - empty-sources-jar - package - - jar - - - sources - - - - - - - diff --git a/sonar-scanner-engine/build.gradle b/sonar-scanner-engine/build.gradle new file mode 100644 index 00000000000..e5ee1087be7 --- /dev/null +++ b/sonar-scanner-engine/build.gradle @@ -0,0 +1,63 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Scanner Engine" + } +} + +// Excluding scanner files in order to benefit of incremental build support +sourceSets.test.resources { + exclude '**/.sonar/**' +} + +configurations { + testCompile.extendsFrom(compileOnly) +} + +dependencies { + compile 'commons-codec:commons-codec' + compile 'commons-lang:commons-lang' + compile 'com.google.code.gson:gson' + compile 'com.google.guava:guava' + compile 'org.freemarker:freemarker' + compile 'org.slf4j:jul-to-slf4j' + compile 'org.slf4j:log4j-over-slf4j' + compile 'org.slf4j:slf4j-api' + compile 'org.sonarsource:sonar-persistit' + compile project(':sonar-core') + compile project(':sonar-scanner-protocol') + compile project(':sonar-ws') + compile project(':sonar-home') + compile project(path: ':sonar-plugin-api', configuration: 'shadow') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.tngtech.java:junit-dataprovider' + testCompile 'javax.servlet:javax.servlet-api' + testCompile 'junit:junit' + // Workaround to resolve dependencies of eclipse specific packaging: https://issues.gradle.org/browse/GRADLE-2076 + testCompile module('org.eclipse.jetty:jetty-server') { + dependencies( + "org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016@jar", + "org.eclipse.jetty:jetty-continuation:8.1.2.v20120308", + "org.eclipse.jetty:jetty-http:8.1.2.v20120308" + ) + } + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + testCompile 'net.javacrumbs.json-unit:json-unit-assertj:0.0.15' + testCompile project(':plugins:sonar-xoo-plugin') + testCompile project(':sonar-plugin-api').sourceSets.test.output +} + +artifactoryPublish.skip = false + +// Used by core plugins +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-scanner-engine/pom.xml b/sonar-scanner-engine/pom.xml deleted file mode 100644 index 622c760e457..00000000000 --- a/sonar-scanner-engine/pom.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-scanner-engine - SonarQube :: Scanner Engine - - - false - - - - - com.google.code.findbugs - jsr305 - provided - - - org.sonarsource - sonar-persistit - - - com.google.guava - guava - - - ${project.groupId} - sonar-core - - - ${project.groupId} - sonar-scanner-protocol - - - ${project.groupId} - sonar-ws - - - ${project.groupId} - sonar-home - - - ${project.groupId} - sonar-plugin-api - - - org.slf4j - slf4j-api - - - org.slf4j - jcl-over-slf4j - - - org.slf4j - log4j-over-slf4j - - - org.slf4j - jul-to-slf4j - - - commons-lang - commons-lang - - - commons-codec - commons-codec - - - com.google.code.gson - gson - - - - org.freemarker - freemarker - - - - - junit - junit - test - - - com.tngtech.java - junit-dataprovider - test - - - org.assertj - assertj-core - test - - - net.javacrumbs.json-unit - json-unit-assertj - 0.0.15 - test - - - org.mockito - mockito-core - test - - - ${project.groupId} - sonar-plugin-api - test-jar - test - ${project.version} - - - org.eclipse.jetty - jetty-server - test - - - javax.servlet - javax.servlet-api - test - - - ${project.groupId} - sonar-xoo-plugin - test - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - - - - runBenchmarks - - - runBenchmarks - - - - true - - - - diff --git a/sonar-scanner-protocol/build.gradle b/sonar-scanner-protocol/build.gradle new file mode 100644 index 00000000000..b852cfa3e16 --- /dev/null +++ b/sonar-scanner-protocol/build.gradle @@ -0,0 +1,34 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Scanner :: Protocol" + property 'sonar.exclusions', 'src/main/java/org/sonar/scanner/protocol/viewer/**' + } +} + +dependencies { + compile 'commons-io:commons-io' + compile 'com.google.code.gson:gson' + compile 'com.google.protobuf:protobuf-java' + compile 'net.jpountz.lz4:lz4' + compile project(':sonar-core') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.google.guava:guava' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + testCompile 'net.javacrumbs.json-unit:json-unit-assertj:0.0.15' +} + +// Used by sonar-db-core to run DB Unit Tests +artifactoryPublish.skip = false +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-scanner-protocol/pom.xml b/sonar-scanner-protocol/pom.xml deleted file mode 100644 index 82d52b7179e..00000000000 --- a/sonar-scanner-protocol/pom.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-scanner-protocol - SonarQube :: Scanner :: Protocol - - Classes used for communication between scanner and server - - - - target/generated-sources/**/*,src/main/java/org/sonar/scanner/protocol/viewer/** - target/generated-test-sources/**/* - - - - - net.jpountz.lz4 - lz4 - - - com.google.protobuf - protobuf-java - - - com.google.code.gson - gson - - - com.google.code.findbugs - jsr305 - provided - - - commons-io - commons-io - - - ${project.groupId} - sonar-core - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - net.javacrumbs.json-unit - json-unit-assertj - 0.0.15 - test - - - com.google.guava - guava - test - - - - - - - maven-assembly-plugin - - scanner-report-viewer-${project.version} - - - org.sonar.scanner.protocol.viewer.ScannerReportViewerApp - - - - src/main/assembly/viewer.xml - - - - - make-assembly - package - - single - - - - - - - diff --git a/sonar-testing-harness/build.gradle b/sonar-testing-harness/build.gradle new file mode 100644 index 00000000000..3908c075238 --- /dev/null +++ b/sonar-testing-harness/build.gradle @@ -0,0 +1,29 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Testing Harness" + } +} + +dependencies { + compile 'commons-io:commons-io' + compile 'com.googlecode.json-simple:json-simple' + compile 'com.google.code.gson:gson' + compile 'junit:junit' + compile 'org.hamcrest:hamcrest-core' + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'org.assertj:assertj-core' +} + +// Used by sonar-db-core to run DB Unit Tests +artifactoryPublish.skip = false +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-testing-harness/pom.xml b/sonar-testing-harness/pom.xml deleted file mode 100644 index 3b776e847eb..00000000000 --- a/sonar-testing-harness/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - sonar-testing-harness - jar - SonarQube :: Testing Harness - - - - com.googlecode.json-simple - json-simple - - - com.google.code.gson - gson - - - junit - junit - - - org.hamcrest - hamcrest-core - - - commons-io - commons-io - - - - com.google.code.findbugs - jsr305 - provided - - - - org.assertj - assertj-core - test - - - diff --git a/sonar-testing-harness/src/main/java/org/sonar/test/i18n/BundleSynchronizedMatcher.java b/sonar-testing-harness/src/main/java/org/sonar/test/i18n/BundleSynchronizedMatcher.java index 00e6e6096a0..ec7aa2c2a81 100644 --- a/sonar-testing-harness/src/main/java/org/sonar/test/i18n/BundleSynchronizedMatcher.java +++ b/sonar-testing-harness/src/main/java/org/sonar/test/i18n/BundleSynchronizedMatcher.java @@ -83,7 +83,7 @@ public class BundleSynchronizedMatcher extends BaseMatcher { @Override public void describeTo(Description description) { // report file - File dumpFile = new File("target/l10n/" + bundleName + ".report.txt"); + File dumpFile = new File("build/l10n/" + bundleName + ".report.txt"); // prepare message StringBuilder details = prepareDetailsMessage(dumpFile); diff --git a/sonar-ws-generator/build.gradle b/sonar-ws-generator/build.gradle new file mode 100644 index 00000000000..01c9b640ea6 --- /dev/null +++ b/sonar-ws-generator/build.gradle @@ -0,0 +1,23 @@ +sonarqube { + skipProject = true +} + +dependencies { + compile 'com.google.code.gson:gson:2.8.2' + compile 'com.google.guava:guava' + compile 'org.apache.velocity:velocity:1.7' + compile 'org.slf4j:log4j-over-slf4j' + compile 'org.sonarsource.orchestrator:sonar-orchestrator' + compile project(':sonar-ws') + + compileOnly 'com.google.code.findbugs:jsr305' +} + +task fatJar(type: Jar) { + manifest { + attributes 'Main-Class': 'org.sonarqube.wsgenerator.Generator' + } + classifier = 'jar-with-dependencies' + from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } + with jar +} diff --git a/sonar-ws-generator/pom.xml b/sonar-ws-generator/pom.xml deleted file mode 100644 index 80a7bc25329..00000000000 --- a/sonar-ws-generator/pom.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-ws-generator - SonarQube :: Web Service :: Generator - Generate source files of sonar-ws - - - src/**/* - - - - - org.apache.velocity - velocity - 1.7 - - - org.slf4j - log4j-over-slf4j - 1.7.25 - - - org.sonarsource.orchestrator - sonar-orchestrator - - - ${project.groupId} - sonar-ws - ${project.version} - - - com.google.code.gson - gson - 2.8.2 - - - com.google.guava - guava - - - com.google.code.findbugs - jsr305 - provided - - - - - - run-ws-generator - - - - org.apache.maven.plugins - maven-assembly-plugin - - - assemble-all - package - - single - - - - jar-with-dependencies - - - - org.sonarqube.wsgenerator.Generator - - - - - - - - - - - - diff --git a/sonar-ws-generator/run.sh b/sonar-ws-generator/run.sh index f785bcb4032..ddc5a73bc82 100755 --- a/sonar-ws-generator/run.sh +++ b/sonar-ws-generator/run.sh @@ -3,7 +3,9 @@ set -euo pipefail SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" -cd $SCRIPTPATH -mvn clean package -Prun-ws-generator -java -jar target/sonar-ws-generator-*-SNAPSHOT-jar-with-dependencies.jar -cp -R target/generated-sources/results/org/sonarqube/ws/client/* ../sonar-ws/src/main/java/org/sonarqube/ws/client +pushd $SCRIPTPATH/.. +pwd +./gradlew :sonar-ws-generator:build :sonar-ws-generator:fatJar +popd +java -jar build/libs/sonar-ws-generator-*-SNAPSHOT-jar-with-dependencies.jar +cp -R build/generated-sources/results/org/sonarqube/ws/client/* ../sonar-ws/src/main/java/org/sonarqube/ws/client diff --git a/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/ApiDefinitionDownloader.java b/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/ApiDefinitionDownloader.java index 29e210241fa..8c232851c21 100644 --- a/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/ApiDefinitionDownloader.java +++ b/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/ApiDefinitionDownloader.java @@ -20,6 +20,7 @@ package org.sonarqube.wsgenerator; import com.sonar.orchestrator.Orchestrator; +import com.sonar.orchestrator.OrchestratorBuilder; import com.sonar.orchestrator.http.HttpCall; import com.sonar.orchestrator.http.HttpResponse; import com.sonar.orchestrator.locator.FileLocation; @@ -32,10 +33,10 @@ public class ApiDefinitionDownloader { } public static String downloadApiDefinition() { - Orchestrator orchestrator = Orchestrator - .builderEnv() - .setZipFile(FileLocation.byWildcardMavenFilename(new File("../sonar-application/target"), "sonarqube-*.zip").getFile()) - .build(); + OrchestratorBuilder builder = Orchestrator.builderEnv(); + builder.setZipFile(FileLocation.byWildcardMavenFilename(new File("../sonar-application/build/distributions"), "sonar-application-*.zip").getFile()) + .setOrchestratorProperty("orchestrator.workspaceDir", "build"); + Orchestrator orchestrator = builder.build(); orchestrator.start(); try { diff --git a/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/Helper.java b/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/Helper.java index f76decd69a6..0d12506fd38 100644 --- a/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/Helper.java +++ b/sonar-ws-generator/src/main/java/org/sonarqube/wsgenerator/Helper.java @@ -37,7 +37,7 @@ import static java.util.Arrays.asList; public class Helper { static final Set PATH_EXCLUSIONS = new HashSet<>(asList("api/orchestrator")); - private static final String OUTPUT_DIR = "target/generated-sources/results"; + private static final String OUTPUT_DIR = "build/generated-sources/results"; private final Map> responseTypes; public Helper() { diff --git a/sonar-ws/build.gradle b/sonar-ws/build.gradle new file mode 100644 index 00000000000..5695a5a774d --- /dev/null +++ b/sonar-ws/build.gradle @@ -0,0 +1,39 @@ +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: Web Service" + property 'sonar.exclusions', 'src/main/java/org/sonarqube/ws/client/*/*.java' + } +} + +configurations { + testCompile.extendsFrom(compileOnly) +} + +dependencies { + compile 'commons-io:commons-io' + compile 'com.google.guava:guava' + compile 'com.google.protobuf:protobuf-java' + compile 'com.squareup.okhttp3:okhttp' + + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + + testCompile 'commons-lang:commons-lang' + testCompile 'com.squareup.okhttp3:mockwebserver' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') +} + +artifactoryPublish.skip = false + +publishing { + publications { + mavenJava(MavenPublication) { + from components.java + artifact sourcesJar + artifact javadocJar + } + } +} diff --git a/sonar-ws/pom.xml b/sonar-ws/pom.xml deleted file mode 100644 index ba4a480ae05..00000000000 --- a/sonar-ws/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - sonar-ws - SonarQube :: Web Service - Protocol Buffers specification of Web Services - - - target/generated-sources/**/*,src/main/java/org/sonarqube/ws/client/*/*.java - target/generated-test-sources/**/*,src/test/java/org/sonarqube/ws/client/*/*.java - - - - - com.google.protobuf - protobuf-java - - - com.google.guava - guava - - - com.squareup.okhttp3 - okhttp - - - com.google.code.findbugs - jsr305 - provided - - - commons-io - commons-io - - - org.sonarsource.sonarqube - sonar-plugin-api - provided - true - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - ${project.groupId} - sonar-testing-harness - ${project.version} - test - - - com.squareup.okhttp3 - mockwebserver - test - - - commons-lang - commons-lang - test - - - diff --git a/stop.sh b/stop.sh index 056b97401ad..e06029e1baf 100755 --- a/stop.sh +++ b/stop.sh @@ -8,7 +8,7 @@ else OS='linux-x86-64' fi -SONAR_SH=sonar-application/target/sonarqube-*/bin/$OS/sonar.sh +SONAR_SH=sonar-application/build/distributions/sonarqube-*/bin/$OS/sonar.sh if [ -f $SONAR_SH ]; then sh $SONAR_SH stop fi diff --git a/tests/build.gradle b/tests/build.gradle new file mode 100644 index 00000000000..3f4d6d8c61e --- /dev/null +++ b/tests/build.gradle @@ -0,0 +1,149 @@ +ext { + jettyVersion = '9.3.11.v20160721' + bytemanVersion = '3.0.10' +} + +configurations { + sqZip + includeInTestResources +} + +def pluginsForITs = [ + ':plugins:sonar-xoo-plugin', + ':tests:plugins:access-secured-props-plugin', + ':tests:plugins:base-auth-plugin', + ':tests:plugins:batch-plugin', + ':tests:plugins:extension-lifecycle-plugin', + ':tests:plugins:fake-billing-plugin', + ':tests:plugins:fake-governance-plugin', + ':tests:plugins:foo-plugin-v1', + ':tests:plugins:foo-plugin-v2', + ':tests:plugins:global-property-change-plugin', + ':tests:plugins:issue-filter-plugin', + ':tests:plugins:l10n-fr-pack', + ':tests:plugins:license-plugin', + ':tests:plugins:oauth2-auth-plugin', + ':tests:plugins:project-builder-plugin', + ':tests:plugins:property-relocation-plugin', + ':tests:plugins:property-sets-plugin', + ':tests:plugins:security-plugin', + ':tests:plugins:server-plugin', + ':tests:plugins:settings-encryption-plugin', + ':tests:plugins:settings-plugin', + ':tests:plugins:sonar-fake-plugin', + ':tests:plugins:sonar-subcategories-plugin', + ':tests:plugins:ui-extensions-plugin', + ':tests:plugins:posttask-plugin', + ':tests:plugins:wait-at-platform-level4-plugin', + ':tests:plugins:ws-plugin', + ':tests:plugins:backdating-plugin-v1', + ':tests:plugins:backdating-plugin-v2', + ':tests:plugins:backdating-customplugin' +] + +dependencies { + testCompile 'org.sonarsource.orchestrator:sonar-orchestrator' + testCompile project(':server:sonar-qa-util') + testCompile project(':sonar-ws') + // required version 23.0 for selenide + testCompile 'com.google.guava:guava:23.0' + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' + testCompile 'org.assertj:assertj-guava' + testCompile 'com.googlecode.json-simple:json-simple' + testCompile 'org.skyscreamer:jsonassert:1.2.0' + testCompile 'com.squareup.okhttp3:mockwebserver' + testCompile 'org.subethamail:subethasmtp' + testCompile "org.eclipse.jetty:jetty-server:${jettyVersion}" + testCompile "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + testCompile "org.eclipse.jetty:jetty-proxy:${jettyVersion}" + testCompile "org.jboss.byteman:byteman-submit:${bytemanVersion}" + testCompile 'com.microsoft.sqlserver:mssql-jdbc' + testCompile 'mysql:mysql-connector-java' + testCompile 'org.postgresql:postgresql' + testCompile 'com.oracle.jdbc:ojdbc8' + + includeInTestResources "org.jboss.byteman:byteman:${bytemanVersion}" +} + +sonarqube { + skipProject = true +} + +//UT are excluding in order for ITs to only run when needed +test{ + exclude '*' +} + +task integrationTest(type: Test) { + description = 'Runs integration tests' + + for (plugin in pluginsForITs) { + dependsOn project(plugin).assemble + } + + jacoco.enabled = false + + systemProperty 'orchestrator.configUrl', System.getProperty('orchestrator.configUrl') + systemProperty 'orchestrator.artifactory.apiKey', System.getProperty('orchestrator.artifactory.apiKey') + systemProperty 'orchestrator.artifactory.repositories', System.getProperty('orchestrator.artifactory.repositories') + if (project.hasProperty('cix')) { + systemProperty 'sonar.runtimeVersion', version + } + + def category = System.getProperty('category') + filter { + switch (category) { + case 'Lite': + includeTestsMatching 'org.sonarqube.tests.lite.*Suite' + break + case 'Category1': + includeTestsMatching 'org.sonarqube.tests.Category1Suite' + includeTestsMatching 'org.sonarqube.tests.authorization.*Suite' + includeTestsMatching 'org.sonarqube.tests.measure.*Suite' + includeTestsMatching 'org.sonarqube.tests.qualityGate.*Suite' + includeTestsMatching 'org.sonarqube.tests.source.*Suite' + break + case 'Category2': + includeTestsMatching 'org.sonarqube.tests.issue.*Suite' + includeTestsMatching 'org.sonarqube.tests.test.*Suite' + includeTestsMatching 'org.sonarqube.tests.qualityModel.*Suite' + break + case 'Category3': + includeTestsMatching 'org.sonarqube.tests.Category3Suite' + includeTestsMatching 'org.sonarqube.tests.component.*Suite' + includeTestsMatching 'org.sonarqube.tests.project.*Suite' + break + case 'Category4': + includeTestsMatching 'org.sonarqube.tests.Category4Suite' + includeTestsMatching 'org.sonarqube.tests.duplication.*Suite' + includeTestsMatching 'org.sonarqube.tests.user.*Suite' + includeTestsMatching 'org.sonarqube.tests.webhook.*Suite' + break + case 'Category5': + includeTestsMatching 'org.sonarqube.tests.Category5Suite' + break + case 'Category6': + includeTestsMatching 'org.sonarqube.tests.Category6Suite' + includeTestsMatching 'org.sonarqube.tests.organization.*Suite' + break + case 'Plugins': + includeTestsMatching 'org.sonarqube.tests.plugins.PluginsSuite' + break + case 'Upgrade': + includeTestsMatching 'org.sonarqube.tests.upgrade.UpgradeSuite' + break + case 'ServerPerformance': + includeTestsMatching 'org.sonarqube.tests.performance.server.ServerPerformanceSuite' + break + } + } +} + +processTestResources() { + into('/') { + from configurations.includeInTestResources + // TODO cache not invalidated when pattern changes? + rename '(.*)-' + bytemanVersion + '.jar', '$1.jar' + } +} diff --git a/tests/plugins/access-secured-props-plugin/build.gradle b/tests/plugins/access-secured-props-plugin/build.gradle new file mode 100644 index 00000000000..b41c78ff478 --- /dev/null +++ b/tests/plugins/access-secured-props-plugin/build.gradle @@ -0,0 +1,19 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'AccessSecuredPropsPlugin', + 'Plugin-Version': '1.0.2.42', + 'Plugin-Display-Version': '1.0.2 (build 42)', + 'Plugin-Class': 'AccessSecuredPropsPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Access Secured PropertiesFoo', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/access-secured-props-plugin/pom.xml b/tests/plugins/access-secured-props-plugin/pom.xml deleted file mode 100644 index 55fe1f96b98..00000000000 --- a/tests/plugins/access-secured-props-plugin/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - access-secured-props-plugin - sonar-plugin - Plugins :: Access Secured Properties - 1.0.2.42 - Access .secured properties - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.18.0.372 - true - - AccessSecuredPropsPlugin - - - - - diff --git a/tests/plugins/backdating-customplugin/build.gradle b/tests/plugins/backdating-customplugin/build.gradle new file mode 100644 index 00000000000..1e047a85029 --- /dev/null +++ b/tests/plugins/backdating-customplugin/build.gradle @@ -0,0 +1,31 @@ +sonarqube { + skipProject = true +} + +dependencies { + compile 'com.google.guava:guava' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + compileOnly project(':tests:plugins:backdating-plugin-v1') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'custombackdating', + 'Plugin-Version': version, + 'Plugin-Class': 'org.sonar.backdating.custom.BackdatingPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Custom', + 'Plugin-License': 'GNU LGPL 3', + 'Plugin-Base': 'backdating' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/backdating-customplugin/pom.xml b/tests/plugins/backdating-customplugin/pom.xml deleted file mode 100644 index 2072ab6b84b..00000000000 --- a/tests/plugins/backdating-customplugin/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - ../.. - - backdating-customplugin - SonarQube :: Plugins :: Backdating (custom) - sonar-plugin - Sample of custom rule plugin to test issue backdating - - - true - - - - - com.google.guava - guava - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.google.code.findbugs - jsr305 - provided - - - org.sonarsource.sonarqube - sonar-plugin-api - provided - - - org.sonarsource.sonarqube - backdating-plugin-v1 - ${project.version} - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - - custombackdating - Custom - backdating - org.sonar.backdating.custom.BackdatingPlugin - - - - - diff --git a/tests/plugins/backdating-plugin-v1/build.gradle b/tests/plugins/backdating-plugin-v1/build.gradle new file mode 100644 index 00000000000..8ef8bb8177d --- /dev/null +++ b/tests/plugins/backdating-plugin-v1/build.gradle @@ -0,0 +1,29 @@ +sonarqube { + skipProject = true +} + +dependencies { + compile 'com.google.guava:guava' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'backdating', + 'Plugin-Version': version, + 'Plugin-Class': 'org.sonar.plugins.backdating.BackdatingPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Foo', + 'Plugin-License': 'GNU LGPL 3' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/backdating-plugin-v1/pom.xml b/tests/plugins/backdating-plugin-v1/pom.xml deleted file mode 100644 index f1f567bc73f..00000000000 --- a/tests/plugins/backdating-plugin-v1/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - ../.. - - backdating-plugin-v1 - SonarQube :: Plugins :: Backdating (V1) - sonar-plugin - Sample of plugin to test issue backdating - - - true - - - - - com.google.guava - guava - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.google.code.findbugs - jsr305 - provided - - - org.sonarsource.sonarqube - sonar-plugin-api - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - - backdating - Foo - org.sonar.plugins.backdating.BackdatingPlugin - - - - - diff --git a/tests/plugins/backdating-plugin-v2/build.gradle b/tests/plugins/backdating-plugin-v2/build.gradle new file mode 100644 index 00000000000..202d2bbeebc --- /dev/null +++ b/tests/plugins/backdating-plugin-v2/build.gradle @@ -0,0 +1,29 @@ +sonarqube { + skipProject = true +} + +dependencies { + compile 'com.google.guava:guava' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + compileOnly 'com.google.code.findbugs:jsr305' +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'backdating', + 'Plugin-Version': version, + 'Plugin-Class': 'org.sonar.plugins.backdating.BackdatingPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Foo', + 'Plugin-License': 'GNU LGPL 3' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/backdating-plugin-v2/pom.xml b/tests/plugins/backdating-plugin-v2/pom.xml deleted file mode 100644 index fefc6bba2fd..00000000000 --- a/tests/plugins/backdating-plugin-v2/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - ../.. - - backdating-plugin-v2 - SonarQube :: Plugins :: Backdating (V2) - sonar-plugin - Sample of plugin to test issue backdating - - - true - - - - - com.google.guava - guava - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.google.code.findbugs - jsr305 - provided - - - org.sonarsource.sonarqube - sonar-plugin-api - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - - backdating - Foo - org.sonar.plugins.backdating.BackdatingPlugin - - - - - diff --git a/tests/plugins/base-auth-plugin/build.gradle b/tests/plugins/base-auth-plugin/build.gradle new file mode 100644 index 00000000000..ee1c6490082 --- /dev/null +++ b/tests/plugins/base-auth-plugin/build.gradle @@ -0,0 +1,25 @@ +dependencies { + compile('com.google.guava:guava:17.0') { + exclude group: 'com.google.code.findbugs', module: 'jsr305' + } + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + compileOnly 'javax.servlet:javax.servlet-api:3.0.1' +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'baseauthplugin', + 'Plugin-Version': version, + 'Plugin-Class': 'FakeBaseAuthPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Fake Base Authentication Plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/base-auth-plugin/pom.xml b/tests/plugins/base-auth-plugin/pom.xml deleted file mode 100644 index 7b2555b98f8..00000000000 --- a/tests/plugins/base-auth-plugin/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - base-auth-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Fake Base Authentication Plugin - Test for base authentication plugin (like openid) - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - javax.servlet - javax.servlet-api - 3.0.1 - provided - - - com.google.guava - guava - 17.0 - - - - com.google.code.findbugs - jsr305 - - - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - - FakeBaseAuthPlugin - - - - - diff --git a/tests/plugins/batch-plugin/build.gradle b/tests/plugins/batch-plugin/build.gradle new file mode 100644 index 00000000000..e21395aa1be --- /dev/null +++ b/tests/plugins/batch-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'batch-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'com.sonarsource.BatchPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: Batch', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/batch-plugin/pom.xml b/tests/plugins/batch-plugin/pom.xml deleted file mode 100644 index 4bd7041393a..00000000000 --- a/tests/plugins/batch-plugin/pom.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - batch-plugin - 1.0-SNAPSHOT - sonar-plugin - SonarQube Integration Tests :: Plugins :: Batch - Main plugin for batch tests - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - true - - com.sonarsource.BatchPlugin - - - - - diff --git a/tests/plugins/extension-lifecycle-plugin/build.gradle b/tests/plugins/extension-lifecycle-plugin/build.gradle new file mode 100644 index 00000000000..92d5faefce3 --- /dev/null +++ b/tests/plugins/extension-lifecycle-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'extension-lifecycle-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'ExtensionLifecyclePlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Extension Lifecycle', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/extension-lifecycle-plugin/pom.xml b/tests/plugins/extension-lifecycle-plugin/pom.xml deleted file mode 100644 index 73e6a088a4e..00000000000 --- a/tests/plugins/extension-lifecycle-plugin/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - extension-lifecycle-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Extension Lifecycle - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - ExtensionLifecyclePlugin - - - - - diff --git a/tests/plugins/fake-billing-plugin/build.gradle b/tests/plugins/fake-billing-plugin/build.gradle new file mode 100644 index 00000000000..fe1303c5633 --- /dev/null +++ b/tests/plugins/fake-billing-plugin/build.gradle @@ -0,0 +1,19 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + compileOnly project(':server:sonar-server') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'billing', + 'Plugin-Version': version, + 'Plugin-Class': 'FakeBillingPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Fake Billing Plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/fake-billing-plugin/pom.xml b/tests/plugins/fake-billing-plugin/pom.xml deleted file mode 100644 index a5430e50a1a..00000000000 --- a/tests/plugins/fake-billing-plugin/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - fake-billing-plugin - sonar-plugin - Plugins :: Fake Billing Plugin - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - org.sonarsource.sonarqube - sonar-server - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - FakeBillingPlugin - billing - - - - - diff --git a/tests/plugins/fake-governance-plugin/build.gradle b/tests/plugins/fake-governance-plugin/build.gradle new file mode 100644 index 00000000000..225751ba344 --- /dev/null +++ b/tests/plugins/fake-governance-plugin/build.gradle @@ -0,0 +1,19 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + compileOnly project(':server:sonar-server') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'governance', + 'Plugin-Version': version, + 'Plugin-Class': 'FakeGovernancePlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Fake Governance Plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/fake-governance-plugin/pom.xml b/tests/plugins/fake-governance-plugin/pom.xml deleted file mode 100644 index 1442c73d770..00000000000 --- a/tests/plugins/fake-governance-plugin/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - fake-governance-plugin - sonar-plugin - Plugins :: Fake Governance Plugin - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - org.sonarsource.sonarqube - sonar-server - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - FakeGovernancePlugin - governance - - - - - diff --git a/tests/plugins/foo-plugin-v1/build.gradle b/tests/plugins/foo-plugin-v1/build.gradle new file mode 100644 index 00000000000..c768ae45a98 --- /dev/null +++ b/tests/plugins/foo-plugin-v1/build.gradle @@ -0,0 +1,29 @@ +sonarqube { + skipProject = true +} + +dependencies { + compile 'com.google.guava:guava' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'foo', + 'Plugin-Version': version, + 'Plugin-Class': 'org.sonar.foo.FooPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Foo', + 'Plugin-License': 'GNU LGPL 3' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/foo-plugin-v1/pom.xml b/tests/plugins/foo-plugin-v1/pom.xml deleted file mode 100644 index ce6bec89282..00000000000 --- a/tests/plugins/foo-plugin-v1/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - ../.. - - foo-plugin-v1 - SonarQube :: Plugins :: Foo (V1) - sonar-plugin - Sample of plugin to document and test available APIs - - - true - - - - - com.google.guava - guava - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.google.code.findbugs - jsr305 - provided - - - org.sonarsource.sonarqube - sonar-plugin-api - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - - foo - Foo - org.sonar.foo.FooPlugin - - - - - diff --git a/tests/plugins/foo-plugin-v2/build.gradle b/tests/plugins/foo-plugin-v2/build.gradle new file mode 100644 index 00000000000..c768ae45a98 --- /dev/null +++ b/tests/plugins/foo-plugin-v2/build.gradle @@ -0,0 +1,29 @@ +sonarqube { + skipProject = true +} + +dependencies { + compile 'com.google.guava:guava' + compile 'commons-io:commons-io' + compile 'commons-lang:commons-lang' + compileOnly 'com.google.code.findbugs:jsr305' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'foo', + 'Plugin-Version': version, + 'Plugin-Class': 'org.sonar.foo.FooPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Foo', + 'Plugin-License': 'GNU LGPL 3' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/foo-plugin-v2/pom.xml b/tests/plugins/foo-plugin-v2/pom.xml deleted file mode 100644 index 1bd47c6e5c7..00000000000 --- a/tests/plugins/foo-plugin-v2/pom.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - ../.. - - foo-plugin-v2 - SonarQube :: Plugins :: Foo (V2) - sonar-plugin - Sample of plugin to document and test available APIs - - - true - - - - - com.google.guava - guava - - - commons-io - commons-io - - - commons-lang - commons-lang - - - com.google.code.findbugs - jsr305 - provided - - - org.sonarsource.sonarqube - sonar-plugin-api - provided - - - - - junit - junit - test - - - org.assertj - assertj-core - test - - - org.mockito - mockito-core - test - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - - foo - Foo - org.sonar.foo.FooPlugin - - - - - diff --git a/tests/plugins/global-property-change-plugin/build.gradle b/tests/plugins/global-property-change-plugin/build.gradle new file mode 100644 index 00000000000..6832540b178 --- /dev/null +++ b/tests/plugins/global-property-change-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'global-property-change-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'GlobalPropertyChangePlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Plugins :: Global Property Change', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/global-property-change-plugin/pom.xml b/tests/plugins/global-property-change-plugin/pom.xml deleted file mode 100644 index c906feaf2af..00000000000 --- a/tests/plugins/global-property-change-plugin/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - global-property-change-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Global Property Change - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - GlobalPropertyChangePlugin - - - - - diff --git a/tests/plugins/issue-filter-plugin/build.gradle b/tests/plugins/issue-filter-plugin/build.gradle new file mode 100644 index 00000000000..63fe9a1d629 --- /dev/null +++ b/tests/plugins/issue-filter-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'issue-filter-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'IssueFilterPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'IT :: Issue Filter', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/issue-filter-plugin/pom.xml b/tests/plugins/issue-filter-plugin/pom.xml deleted file mode 100644 index 6027229a423..00000000000 --- a/tests/plugins/issue-filter-plugin/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - issue-filter-plugin - 1.0-SNAPSHOT - sonar-plugin - IT :: Issue Filter - IT :: Issue Filter - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - IssueFilterPlugin - - - - - diff --git a/tests/plugins/l10n-fr-pack/build.gradle b/tests/plugins/l10n-fr-pack/build.gradle new file mode 100644 index 00000000000..0e528ef2cf1 --- /dev/null +++ b/tests/plugins/l10n-fr-pack/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'l10n-fr-pack', + 'Plugin-Version': version, + 'Plugin-Class': 'SimpleFrenchPackPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'l10n-fr-pack', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/l10n-fr-pack/pom.xml b/tests/plugins/l10n-fr-pack/pom.xml deleted file mode 100644 index 59f84aaedbe..00000000000 --- a/tests/plugins/l10n-fr-pack/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - l10n-fr-pack - 1.0-SNAPSHOT - sonar-plugin - IT :: Simple French Language Pack - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - l10nen - SimpleFrenchPackPlugin - - - - org.codehaus.mojo - native2ascii-maven-plugin - 1.0-beta-1 - - - - native2ascii - - - - - - - diff --git a/tests/plugins/license-plugin/build.gradle b/tests/plugins/license-plugin/build.gradle new file mode 100644 index 00000000000..8ec6c368508 --- /dev/null +++ b/tests/plugins/license-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'license-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'LicensePlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'license-plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/license-plugin/pom.xml b/tests/plugins/license-plugin/pom.xml deleted file mode 100644 index a3754d95edc..00000000000 --- a/tests/plugins/license-plugin/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - license-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: License - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - LicensePlugin - - - - - diff --git a/tests/plugins/oauth2-auth-plugin/build.gradle b/tests/plugins/oauth2-auth-plugin/build.gradle new file mode 100644 index 00000000000..f0d08a98294 --- /dev/null +++ b/tests/plugins/oauth2-auth-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'oauth2-auth-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'FakeOAuth2AuthPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Fake OAuth2 Authentication Plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/oauth2-auth-plugin/pom.xml b/tests/plugins/oauth2-auth-plugin/pom.xml deleted file mode 100644 index 700b6354589..00000000000 --- a/tests/plugins/oauth2-auth-plugin/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - oauth2-auth-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Fake OAuth2 Authentication Plugin - Test for OAuth2 authentication plugin (like openid) - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - javax.servlet - javax.servlet-api - 3.0.1 - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - - FakeOAuth2AuthPlugin - - - - - diff --git a/tests/plugins/pom.xml b/tests/plugins/pom.xml deleted file mode 100644 index fb1746c1363..00000000000 --- a/tests/plugins/pom.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - ../../pom.xml - - org.sonarsource.sonarqube.tests - plugins - SonarQube Integration Tests :: Plugins - The fake plugins used by integration tests - pom - - - true - true - true - true - ${project.parent.version} - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - - - access-secured-props-plugin - base-auth-plugin - batch-plugin - extension-lifecycle-plugin - fake-billing-plugin - fake-governance-plugin - foo-plugin-v1 - foo-plugin-v2 - global-property-change-plugin - issue-filter-plugin - l10n-fr-pack - license-plugin - oauth2-auth-plugin - project-builder-plugin - property-relocation-plugin - property-sets-plugin - security-plugin - server-plugin - settings-encryption-plugin - settings-plugin - sonar-fake-plugin - sonar-subcategories-plugin - ui-extensions-plugin - posttask-plugin - wait-at-platform-level4-plugin - ws-plugin - backdating-plugin-v1 - backdating-plugin-v2 - backdating-customplugin - - diff --git a/tests/plugins/posttask-plugin/build.gradle b/tests/plugins/posttask-plugin/build.gradle new file mode 100644 index 00000000000..da9560a10dd --- /dev/null +++ b/tests/plugins/posttask-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'posttask-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'PostTaskPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: PostTask', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/posttask-plugin/pom.xml b/tests/plugins/posttask-plugin/pom.xml deleted file mode 100644 index 6b1dbe398d4..00000000000 --- a/tests/plugins/posttask-plugin/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - posttask-plugin - 1.0-SNAPSHOT - sonar-plugin - SonarQube Integration Tests :: Plugins :: PostTask - Plugin testing the Compute Engine Post Task API - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - PostTaskPlugin - - - - - diff --git a/tests/plugins/project-builder-plugin/build.gradle b/tests/plugins/project-builder-plugin/build.gradle new file mode 100644 index 00000000000..ca035179e9a --- /dev/null +++ b/tests/plugins/project-builder-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'project-builder-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'ProjectBuilderPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Project Builder', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/project-builder-plugin/pom.xml b/tests/plugins/project-builder-plugin/pom.xml deleted file mode 100644 index 98ed082222d..00000000000 --- a/tests/plugins/project-builder-plugin/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - project-builder-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Project Builder - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - ProjectBuilderPlugin - - - - - diff --git a/tests/plugins/property-relocation-plugin/build.gradle b/tests/plugins/property-relocation-plugin/build.gradle new file mode 100644 index 00000000000..14ed5d44966 --- /dev/null +++ b/tests/plugins/property-relocation-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'property-relocation-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'PropertyRelocationPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'property-relocation-plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/property-relocation-plugin/pom.xml b/tests/plugins/property-relocation-plugin/pom.xml deleted file mode 100644 index a5915c85909..00000000000 --- a/tests/plugins/property-relocation-plugin/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - property-relocation-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Property Relocation - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - PropertyRelocationPlugin - - - - - diff --git a/tests/plugins/property-sets-plugin/build.gradle b/tests/plugins/property-sets-plugin/build.gradle new file mode 100644 index 00000000000..6ce9d77d5ee --- /dev/null +++ b/tests/plugins/property-sets-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'property-sets-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'PropertySetsPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'property-sets-plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/property-sets-plugin/pom.xml b/tests/plugins/property-sets-plugin/pom.xml deleted file mode 100644 index c8081a72fa1..00000000000 --- a/tests/plugins/property-sets-plugin/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - property-sets-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Property Sets - - - UTF-8 - - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - PropertySetsPlugin - - - - - diff --git a/tests/plugins/security-plugin/build.gradle b/tests/plugins/security-plugin/build.gradle new file mode 100644 index 00000000000..cfd4d2bbe0f --- /dev/null +++ b/tests/plugins/security-plugin/build.gradle @@ -0,0 +1,29 @@ +configurations { + testCompile.extendsFrom(compileOnly) +} + +dependencies { + compile 'commons-lang:commons-lang' + compile 'com.google.guava:guava' + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') + testCompile 'junit:junit' + testCompile 'org.assertj:assertj-core' +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'security-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'SecurityPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'security-plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/security-plugin/pom.xml b/tests/plugins/security-plugin/pom.xml deleted file mode 100644 index 5664abd0c66..00000000000 --- a/tests/plugins/security-plugin/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - security-plugin - sonar-plugin - 1.0-SNAPSHOT - Plugins :: Security - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - commons-lang - commons-lang - 2.6 - - - junit - junit - 4.12 - - - org.assertj - assertj-core - 2.0.0 - - - org.assertj - assertj-guava - 1.3.1 - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - SecurityPlugin - - - - - - diff --git a/tests/plugins/server-plugin/build.gradle b/tests/plugins/server-plugin/build.gradle new file mode 100644 index 00000000000..685e50ec050 --- /dev/null +++ b/tests/plugins/server-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'server-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'ServerPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: Server', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/server-plugin/pom.xml b/tests/plugins/server-plugin/pom.xml deleted file mode 100644 index ea012d4ab81..00000000000 --- a/tests/plugins/server-plugin/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - server-plugin - 1.0-SNAPSHOT - sonar-plugin - SonarQube Integration Tests :: Plugins :: Server - Main plugin for Server tests - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - ServerPlugin - - - - - diff --git a/tests/plugins/settings-encryption-plugin/build.gradle b/tests/plugins/settings-encryption-plugin/build.gradle new file mode 100644 index 00000000000..c7fb784e794 --- /dev/null +++ b/tests/plugins/settings-encryption-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'settings-encryption-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'SettingsEncryptionPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'settings-encryption-plugin', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/settings-encryption-plugin/pom.xml b/tests/plugins/settings-encryption-plugin/pom.xml deleted file mode 100644 index c3395957065..00000000000 --- a/tests/plugins/settings-encryption-plugin/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - settings-encryption-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Settings Encryption - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - SettingsEncryptionPlugin - - - - - diff --git a/tests/plugins/settings-plugin/build.gradle b/tests/plugins/settings-plugin/build.gradle new file mode 100644 index 00000000000..44489319a50 --- /dev/null +++ b/tests/plugins/settings-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'settings-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'SettingsPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Settings', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/settings-plugin/pom.xml b/tests/plugins/settings-plugin/pom.xml deleted file mode 100644 index db0bb95516a..00000000000 --- a/tests/plugins/settings-plugin/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - settings-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Settings - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - SettingsPlugin - Settings - - - - - diff --git a/tests/plugins/sonar-fake-plugin/build.gradle b/tests/plugins/sonar-fake-plugin/build.gradle new file mode 100644 index 00000000000..0696ae95234 --- /dev/null +++ b/tests/plugins/sonar-fake-plugin/build.gradle @@ -0,0 +1,19 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'fake', + 'Plugin-Version': version, + 'Plugin-Class': 'FakePlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Fake', + 'Plugin-License': 'GNU LGPL 3', + 'Plugin-Organization': 'SonarSource' + ) + } +} diff --git a/tests/plugins/sonar-fake-plugin/pom.xml b/tests/plugins/sonar-fake-plugin/pom.xml deleted file mode 100644 index d0945e97d09..00000000000 --- a/tests/plugins/sonar-fake-plugin/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - sonar-fake-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Fake - SonarQube Integration Tests :: Fake Plugin - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - - FakePlugin - fake - - - - - diff --git a/tests/plugins/sonar-subcategories-plugin/build.gradle b/tests/plugins/sonar-subcategories-plugin/build.gradle new file mode 100644 index 00000000000..53ad942de98 --- /dev/null +++ b/tests/plugins/sonar-subcategories-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'sonar-subcategories-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'SubCategoriesPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: SubCategories', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/sonar-subcategories-plugin/pom.xml b/tests/plugins/sonar-subcategories-plugin/pom.xml deleted file mode 100644 index 85ea4f9714c..00000000000 --- a/tests/plugins/sonar-subcategories-plugin/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - sonar-subcategories-plugin - 1.0-SNAPSHOT - sonar-plugin - - Plugins :: SubCategories - Plugins :: SubCategories - - - UTF-8 - - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - SubCategoriesPlugin - - - - - - org.codehaus.mojo - native2ascii-maven-plugin - 1.0-beta-1 - - - - native2ascii - - - - - - - diff --git a/tests/plugins/ui-extensions-plugin/build.gradle b/tests/plugins/ui-extensions-plugin/build.gradle new file mode 100644 index 00000000000..5f85c3dd294 --- /dev/null +++ b/tests/plugins/ui-extensions-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'ui-extensions-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'UiExtensionsPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: UI extensions', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/ui-extensions-plugin/pom.xml b/tests/plugins/ui-extensions-plugin/pom.xml deleted file mode 100644 index 1bbd2a52ccf..00000000000 --- a/tests/plugins/ui-extensions-plugin/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - ui-extensions-plugin - 1.0-SNAPSHOT - sonar-plugin - SonarQube Integration Tests :: Plugins :: UI extensions - Main plugin for UT extensions tests - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - true - - UiExtensionsPlugin - - - - - diff --git a/tests/plugins/wait-at-platform-level4-plugin/build.gradle b/tests/plugins/wait-at-platform-level4-plugin/build.gradle new file mode 100644 index 00000000000..626dad0d2a2 --- /dev/null +++ b/tests/plugins/wait-at-platform-level4-plugin/build.gradle @@ -0,0 +1,18 @@ +dependencies { + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'wait-at-platform-level4-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'WaitAtPlaformLevel4Plugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'Plugins :: Wait at platform level4 initialization phase', + 'Plugin-License': 'GNU LGPL 3' + ) + } +} diff --git a/tests/plugins/wait-at-platform-level4-plugin/pom.xml b/tests/plugins/wait-at-platform-level4-plugin/pom.xml deleted file mode 100644 index dc68f3f652d..00000000000 --- a/tests/plugins/wait-at-platform-level4-plugin/pom.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - wait-at-platform-level4-plugin - 1.0-SNAPSHOT - sonar-plugin - Plugins :: Wait at platform level4 initialization phase - Test for failing Elasticsearch on platform4 - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - com.google.guava - guava - 17.0 - - - - com.google.code.findbugs - jsr305 - - - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - 1.15 - - WaitAtPlaformLevel4Plugin - - - - - diff --git a/tests/plugins/ws-plugin/build.gradle b/tests/plugins/ws-plugin/build.gradle new file mode 100644 index 00000000000..879e3df31f0 --- /dev/null +++ b/tests/plugins/ws-plugin/build.gradle @@ -0,0 +1,22 @@ +dependencies { + compile project(':sonar-ws') + compileOnly project(path: ':sonar-plugin-api', configuration: 'shadow') +} + +jar { + manifest { + attributes( + 'Plugin-Key': 'ws-plugin', + 'Plugin-Version': version, + 'Plugin-Class': 'WsPlugin', + 'Plugin-ChildFirstClassLoader': 'false', + 'Sonar-Version': '7.1-SNAPSHOT', + 'SonarLint-Supported': 'false', + 'Plugin-Name': 'SonarQube Integration Tests :: Plugins :: Ws', + 'Plugin-License': 'GNU LGPL 3' + ) + } + into('META-INF/lib') { + from configurations.compile + } +} diff --git a/tests/plugins/ws-plugin/pom.xml b/tests/plugins/ws-plugin/pom.xml deleted file mode 100644 index c0c0d8e6dca..00000000000 --- a/tests/plugins/ws-plugin/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - org.sonarsource.sonarqube.tests - plugins - 7.1-SNAPSHOT - - - ws-plugin - 1.0-SNAPSHOT - sonar-plugin - SonarQube Integration Tests :: Plugins :: Ws - Plugin for WS tests - - - - org.sonarsource.sonarqube - sonar-plugin-api - ${apiVersion} - provided - - - org.sonarsource.sonarqube - sonar-ws - ${apiVersion} - - - - - - - org.sonarsource.sonar-packaging-maven-plugin - sonar-packaging-maven-plugin - true - - WsPlugin - - - - - diff --git a/tests/pom.xml b/tests/pom.xml deleted file mode 100644 index 09a4a0aa7a4..00000000000 --- a/tests/pom.xml +++ /dev/null @@ -1,282 +0,0 @@ - - - 4.0.0 - - - org.sonarsource.sonarqube - sonarqube - 7.1-SNAPSHOT - - - org.sonarsource.sonarqube.tests - tests - SonarQube Integration Tests - Integration, performance, upgrade tests - - - true - true - true - true - ../sonar-application/target - * - false - 9.3.11.v20160721 - 3.0.10 - - - - - - com.sonarsource.license - sonar-dev-license-plugin - - 3.2.0.1163 - runtime - - - - com.google.guava - guava - 23.0 - test - - - - org.sonarsource.orchestrator - sonar-orchestrator - test - - - - org.codehaus.sonar - sonar-ws-client - 5.0 - - - org.sonarsource.sonarqube - sonar-application - ${project.version} - zip - provided - - - org.sonarsource.sonarqube - sonar-qa-util - ${project.version} - test - - - org.sonarsource.sonarqube - sonar-process - ${project.version} - provided - - - org.sonarsource.sonarqube - sonar-ws - ${project.version} - provided - - - junit - junit - - - org.assertj - assertj-core - - - org.assertj - assertj-guava - - - com.googlecode.json-simple - json-simple - - - org.skyscreamer - jsonassert - 1.2.0 - - - com.squareup.okhttp3 - mockwebserver - - - org.subethamail - subethasmtp - - - org.eclipse.jetty - jetty-server - ${jetty.version} - - - org.eclipse.jetty - jetty-servlet - ${jetty.version} - - - org.eclipse.jetty - jetty-proxy - ${jetty.version} - - - org.sonarsource.scanner.cli - sonar-scanner-cli - 2.7 - zip - - - org.jboss.byteman - byteman-submit - ${byteman.version} - - - - - mysql - mysql-connector-java - - - org.postgresql - postgresql - - - com.microsoft.sqlserver - mssql-jdbc - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - -Dsonar.runtimeVersion=${project.version} - -Dmaven.localRepository=${settings.localRepository} - - ${skipIts} - - %regex[.*/(${category})/.*Suite.class] - - - %regex[.*/(${category})Suite.class] - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-byteman-for-resilience-tests - generate-test-resources - - copy - - - - - org.jboss.byteman - byteman - ${byteman.version} - false - byteman.jar - - - ${project.basedir}/target - false - false - - - - - - - - - - - with-db-drivers - - - with-db-drivers - - - - - com.oracle.jdbc - ojdbc8 - - - - - - qa - - - env.SONARSOURCE_QA - true - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - copy-sonarqube-zip - generate-test-resources - - copy - - - - - org.sonarsource.sonarqube - sonar-application - ${project.version} - zip - true - - - ${project.basedir}/../sonar-application/target - true - true - - - - copy-xoo-plugin - generate-test-resources - - copy - - - - - org.sonarsource.sonarqube - sonar-xoo-plugin - ${project.version} - sonar-plugin - true - - - ${project.basedir}/../plugins/sonar-xoo-plugin/target - true - true - - - - - - - - - diff --git a/tests/src/test/java/org/sonarqube/tests/Byteman.java b/tests/src/test/java/org/sonarqube/tests/Byteman.java index f32647f153d..26e21b4a31b 100644 --- a/tests/src/test/java/org/sonarqube/tests/Byteman.java +++ b/tests/src/test/java/org/sonarqube/tests/Byteman.java @@ -20,11 +20,11 @@ package org.sonarqube.tests; import com.sonar.orchestrator.OrchestratorBuilder; +import com.sonar.orchestrator.util.NetworkUtils; import java.io.File; import java.net.InetAddress; import java.util.Collections; import org.jboss.byteman.agent.submit.Submit; -import org.sonar.process.NetworkUtilsImpl; import static java.lang.String.format; @@ -50,16 +50,15 @@ public class Byteman { public Byteman(OrchestratorBuilder builder, Process process) { this.builder = builder; String jar = findBytemanJar(); - port = NetworkUtilsImpl.INSTANCE.getNextAvailablePort(InetAddress.getLoopbackAddress()); + port = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress()); String bytemanArg = format("-javaagent:%s=boot:%s,port:%d", jar, jar, port); builder.setServerProperty(process.argument, bytemanArg); } private static String findBytemanJar() { - // see pom.xml, Maven copies and renames the artifact. - File jar = new File("target/byteman.jar"); + File jar = new File("build/resources/test/byteman.jar"); if (!jar.exists()) { - throw new IllegalStateException("Can't find " + jar + ". Please execute 'mvn generate-test-resources' once in directory tests/."); + throw new IllegalStateException("Can't find " + jar + ". Please execute './gradlew tests:processIntegrationTestResources'."); } return jar.getAbsolutePath(); } diff --git a/tests/src/test/java/org/sonarqube/tests/Category1Suite.java b/tests/src/test/java/org/sonarqube/tests/Category1Suite.java index 89368b1488a..09e1edb94d4 100644 --- a/tests/src/test/java/org/sonarqube/tests/Category1Suite.java +++ b/tests/src/test/java/org/sonarqube/tests/Category1Suite.java @@ -29,6 +29,7 @@ import org.sonarqube.tests.settings.EmailsTest; import org.sonarqube.tests.settings.PropertySetsTest; import org.sonarqube.tests.settings.SettingsTest; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -48,7 +49,7 @@ import static util.ItUtils.xooPlugin; public class Category1Suite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .setServerProperty("sonar.notifications.delay", "1") .addPlugin(pluginArtifact("property-sets-plugin")) .addPlugin(pluginArtifact("sonar-subcategories-plugin")) @@ -67,9 +68,6 @@ public class Category1Suite { .addPlugin(pluginArtifact("posttask-plugin")) - // reduce memory for Elasticsearch to 128M - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .addPlugin(xooPlugin()) .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/Category3Suite.java b/tests/src/test/java/org/sonarqube/tests/Category3Suite.java index 2924b41373f..3a59293a07a 100644 --- a/tests/src/test/java/org/sonarqube/tests/Category3Suite.java +++ b/tests/src/test/java/org/sonarqube/tests/Category3Suite.java @@ -40,6 +40,7 @@ import org.sonarqube.tests.analysis.TempFolderTest; import org.sonarqube.tests.plugins.VersionPluginTest; import org.sonarqube.tests.webhook.WebhooksTest; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -70,7 +71,7 @@ import static util.ItUtils.xooPlugin; public class Category3Suite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) .setOrchestratorProperty("javaVersion", "LATEST_RELEASE").addPlugin("java") @@ -89,9 +90,5 @@ public class Category3Suite { // used by ProjectBuilderTest .addPlugin(pluginArtifact("project-builder-plugin")) - // reduce memory for Elasticsearch to 128M - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") -// .setServerProperty("sonar.web.javaAdditionalOpts", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") - .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/Category4Suite.java b/tests/src/test/java/org/sonarqube/tests/Category4Suite.java index 332ef87afe1..b0296eaf19c 100644 --- a/tests/src/test/java/org/sonarqube/tests/Category4Suite.java +++ b/tests/src/test/java/org/sonarqube/tests/Category4Suite.java @@ -39,6 +39,7 @@ import org.sonarqube.tests.ui.UiTest; import org.sonarqube.tests.ws.WsLocalCallTest; import org.sonarqube.tests.ws.WsTest; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -75,7 +76,7 @@ import static util.ItUtils.xooPlugin; public class Category4Suite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) // Used in UiExtensionsTest @@ -87,8 +88,7 @@ public class Category4Suite { // Used by LogsTest .setServerProperty("sonar.web.accessLogs.pattern", LogsTest.ACCESS_LOGS_PATTERN) - // reduce memory for Elasticsearch to 128M - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") + .setServerProperty("sonar.web.javaAdditionalOpts", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8001") .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/Category6Suite.java b/tests/src/test/java/org/sonarqube/tests/Category6Suite.java index dd8ecd2876b..842aa61711c 100644 --- a/tests/src/test/java/org/sonarqube/tests/Category6Suite.java +++ b/tests/src/test/java/org/sonarqube/tests/Category6Suite.java @@ -39,6 +39,7 @@ import org.sonarqube.tests.rule.RulesMarkdownTest; import org.sonarqube.tests.rule.RulesWsTest; import org.sonarqube.tests.user.OrganizationIdentityProviderTest; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -70,7 +71,7 @@ public class Category6Suite { public static final int SEARCH_HTTP_PORT = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress()); @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() // for ES resiliency tests .setServerProperty("sonar.search.httpPort", "" + SEARCH_HTTP_PORT) @@ -82,8 +83,5 @@ public class Category6Suite { .addPlugin(pluginArtifact("base-auth-plugin")) .addPlugin(pluginArtifact("ui-extensions-plugin")) - // reduce memory for Elasticsearch to 128M - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java b/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java index 3385fad3a5a..eee7c8edf6b 100644 --- a/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java +++ b/tests/src/test/java/org/sonarqube/tests/analysis/AnalysisEsResilienceTest.java @@ -53,6 +53,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static org.sonarqube.tests.Byteman.Process.CE; import static org.sonarqube.ws.Ce.TaskStatus.FAILED; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.projectDir; public class AnalysisEsResilienceTest { @@ -63,7 +64,7 @@ public class AnalysisEsResilienceTest { private static final int esHttpPort = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress()); static { - byteman = new Byteman(Orchestrator.builderEnv(), CE); + byteman = new Byteman(newOrchestratorBuilder(), CE); orchestrator = byteman .getOrchestratorBuilder() .addPlugin(ItUtils.xooPlugin()) diff --git a/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java b/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java index f29f8d2e318..23c03e7888c 100644 --- a/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/authorization/AuthorizationSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -33,6 +34,7 @@ import static util.ItUtils.xooPlugin; IssuePermissionTest.class, PermissionSearchTest.class, PermissionTemplatePageTest.class, + ProvisioningPermissionTest.class, QualityProfileAdminPermissionTest.class, SystemPasscodeTest.class @@ -40,10 +42,7 @@ import static util.ItUtils.xooPlugin; public class AuthorizationSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() // for SystemPasscodeTest // this privileged plugin provides the WS api/system_passcode/check // that is used by the tests @@ -52,5 +51,4 @@ public class AuthorizationSuite { .addPlugin(xooPlugin()) .build(); - } diff --git a/tests/src/test/java/org/sonarqube/tests/ce/CeShutdownTest.java b/tests/src/test/java/org/sonarqube/tests/ce/CeShutdownTest.java index 62dabd40247..ce8678dc292 100644 --- a/tests/src/test/java/org/sonarqube/tests/ce/CeShutdownTest.java +++ b/tests/src/test/java/org/sonarqube/tests/ce/CeShutdownTest.java @@ -37,6 +37,7 @@ import util.ItUtils; import static com.google.common.base.Preconditions.checkState; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; public class CeShutdownTest { @@ -115,7 +116,7 @@ public class CeShutdownTest { pauseFile = temp.newFile(); FileUtils.touch(pauseFile); - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .setServerProperty("sonar.ce.pauseTask.path", pauseFile.getAbsolutePath()) .setServerProperty("sonar.ce.gracefulStopTimeOutInMs", "" + timeOutInMs) .addPlugin(ItUtils.xooPlugin()) diff --git a/tests/src/test/java/org/sonarqube/tests/ce/CeWorkersTest.java b/tests/src/test/java/org/sonarqube/tests/ce/CeWorkersTest.java index 82453df03d6..64d85836fdb 100644 --- a/tests/src/test/java/org/sonarqube/tests/ce/CeWorkersTest.java +++ b/tests/src/test/java/org/sonarqube/tests/ce/CeWorkersTest.java @@ -58,6 +58,7 @@ import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; import static org.assertj.core.api.Assertions.assertThat; import static util.ItUtils.newAdminWsClient; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -82,7 +83,7 @@ public class CeWorkersTest { public static void setUp() throws Exception { sharedMemory = temporaryFolder.newFile(); - OrchestratorBuilder builder = Orchestrator.builderEnv() + OrchestratorBuilder builder = newOrchestratorBuilder() .addPlugin(pluginArtifact("fake-governance-plugin")) .setServerProperty("fakeGoverance.workerLatch.sharedMemoryFile", sharedMemory.getAbsolutePath()) // overwrite default value to display heap dump on OOM and reduce max heap diff --git a/tests/src/test/java/org/sonarqube/tests/component/ComponentSuite.java b/tests/src/test/java/org/sonarqube/tests/component/ComponentSuite.java index 5053112626c..0384ce9562b 100644 --- a/tests/src/test/java/org/sonarqube/tests/component/ComponentSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/component/ComponentSuite.java @@ -23,6 +23,7 @@ import com.sonar.orchestrator.Orchestrator; import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import util.ItUtils; import static util.ItUtils.xooPlugin; @@ -35,9 +36,7 @@ import static util.ItUtils.xooPlugin; public class ComponentSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") + public static final Orchestrator ORCHESTRATOR = ItUtils.newOrchestratorBuilder() .addPlugin(xooPlugin()) diff --git a/tests/src/test/java/org/sonarqube/tests/duplication/DuplicationSuite.java b/tests/src/test/java/org/sonarqube/tests/duplication/DuplicationSuite.java index bbe5e540ea6..e8c1833f402 100644 --- a/tests/src/test/java/org/sonarqube/tests/duplication/DuplicationSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/duplication/DuplicationSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; @RunWith(Suite.class) @@ -36,11 +37,8 @@ import static util.ItUtils.xooPlugin; }) public class DuplicationSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) - // reduce Elasticsearch memory - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/issue/IssueCreationDatePluginChangedTest.java b/tests/src/test/java/org/sonarqube/tests/issue/IssueCreationDatePluginChangedTest.java index af2fbd1e1a6..cff4e0f1aa5 100644 --- a/tests/src/test/java/org/sonarqube/tests/issue/IssueCreationDatePluginChangedTest.java +++ b/tests/src/test/java/org/sonarqube/tests/issue/IssueCreationDatePluginChangedTest.java @@ -43,6 +43,7 @@ import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.newUserWsClient; import static util.ItUtils.pluginArtifact; import static util.ItUtils.projectDir; @@ -68,7 +69,7 @@ public class IssueCreationDatePluginChangedTest { private static final String USER_EMAIL = "tester@example.org"; @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) .addPlugin(ItUtils.pluginArtifact("backdating-plugin-v1")) .addPlugin(ItUtils.pluginArtifact("backdating-customplugin")) diff --git a/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java b/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java index ed6bf7a60a7..8ff714fe6e3 100644 --- a/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -51,7 +52,7 @@ import static util.ItUtils.xooPlugin; public class IssueSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .setServerProperty("sonar.search.httpPort", "9025") .addPlugin(xooPlugin()) @@ -63,9 +64,6 @@ public class IssueSuite { .setServerProperty("organization.enabled", "true") - // reduce memory for Elasticsearch to 128M - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java index 2babb0d1985..85381682159 100644 --- a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; @RunWith(Suite.class) @@ -33,12 +34,9 @@ import static util.ItUtils.xooPlugin; public class OrganizationIssueSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) - // reduce memory for Elasticsearch to 128M - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/lite/LiteTest.java b/tests/src/test/java/org/sonarqube/tests/lite/LiteTest.java index 8551fd35d3c..0c89f7cd8fe 100644 --- a/tests/src/test/java/org/sonarqube/tests/lite/LiteTest.java +++ b/tests/src/test/java/org/sonarqube/tests/lite/LiteTest.java @@ -38,6 +38,7 @@ import org.sonarqube.ws.client.measures.MeasuresService; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.runProjectAnalysis; import static util.ItUtils.xooPlugin; @@ -45,7 +46,7 @@ public class LiteTest { private static final String PROJECT_KEY = "com.sonarsource.it.samples:multi-modules-sample"; - private static Orchestrator orchestrator = Orchestrator.builderEnv() + private static Orchestrator orchestrator = newOrchestratorBuilder() .setOrchestratorProperty("sonar.web.context", "/sonarqube") .addPlugin(xooPlugin()) .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/marketplace/UpdateCenterTest.java b/tests/src/test/java/org/sonarqube/tests/marketplace/UpdateCenterTest.java index e1c851aaae1..8e50a080451 100644 --- a/tests/src/test/java/org/sonarqube/tests/marketplace/UpdateCenterTest.java +++ b/tests/src/test/java/org/sonarqube/tests/marketplace/UpdateCenterTest.java @@ -28,6 +28,7 @@ import org.sonarqube.qa.util.pageobjects.MarketplacePage; import org.sonarqube.qa.util.pageobjects.Navigation; import util.user.UserRule; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; /** @@ -36,7 +37,7 @@ import static util.ItUtils.pluginArtifact; public class UpdateCenterTest { @ClassRule - public static final Orchestrator orchestrator = Orchestrator.builderEnv() + public static final Orchestrator orchestrator = newOrchestratorBuilder() .setServerProperty("sonar.updatecenter.url", UpdateCenterTest.class.getResource("/marketplace/UpdateCenterTest/update-center.properties").toString()) .addPlugin(pluginArtifact("sonar-fake-plugin")) .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/measure/MeasureSuite.java b/tests/src/test/java/org/sonarqube/tests/measure/MeasureSuite.java index 7bd56dc9686..ea6ad5d0e7f 100644 --- a/tests/src/test/java/org/sonarqube/tests/measure/MeasureSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/measure/MeasureSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -44,10 +45,7 @@ import static util.ItUtils.xooPlugin; public class MeasureSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) // used by DecimalScaleMetricTest diff --git a/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java b/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java index 7511f41200c..024a8849b41 100644 --- a/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -40,14 +41,11 @@ import static util.ItUtils.xooPlugin; public class OrganizationSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) .addPlugin(pluginArtifact("fake-billing-plugin")) .addPlugin(pluginArtifact("ui-extensions-plugin")) - - // reduce memory for Elasticsearch to 128M - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/performance/scanner/ScannerPerformanceSuite.java b/tests/src/test/java/org/sonarqube/tests/performance/scanner/ScannerPerformanceSuite.java index 1b789600e24..918cb4ba7a6 100644 --- a/tests/src/test/java/org/sonarqube/tests/performance/scanner/ScannerPerformanceSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/performance/scanner/ScannerPerformanceSuite.java @@ -29,6 +29,9 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.sonarqube.tests.performance.AbstractPerfTest; +import static util.ItUtils.newOrchestratorBuilder; +import static util.ItUtils.xooPlugin; + @RunWith(Suite.class) @Suite.SuiteClasses({ BootstrappingTest.class, @@ -41,9 +44,8 @@ import org.sonarqube.tests.performance.AbstractPerfTest; public class ScannerPerformanceSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator - .builderEnv() - .addPlugin(FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar")) + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() + .addPlugin(xooPlugin()) // should not be so high, but required as long embedded h2 is used -> requires more memory on server .setServerProperty("sonar.web.javaOpts", "-Xmx1G -XX:+HeapDumpOnOutOfMemoryError") // Needed by DuplicationTest::hugeJavaFile diff --git a/tests/src/test/java/org/sonarqube/tests/performance/server/ComputeEnginePerfTest.java b/tests/src/test/java/org/sonarqube/tests/performance/server/ComputeEnginePerfTest.java index 7ee7fa84624..f6e15a279a1 100644 --- a/tests/src/test/java/org/sonarqube/tests/performance/server/ComputeEnginePerfTest.java +++ b/tests/src/test/java/org/sonarqube/tests/performance/server/ComputeEnginePerfTest.java @@ -34,6 +34,9 @@ import org.junit.rules.TemporaryFolder; import org.sonarqube.tests.performance.AbstractPerfTest; import org.sonarqube.tests.performance.ServerLogs; +import static util.ItUtils.newOrchestratorBuilder; +import static util.ItUtils.xooPlugin; + public class ComputeEnginePerfTest extends AbstractPerfTest { private static int MAX_HEAP_SIZE_IN_MEGA = 600; @@ -41,9 +44,8 @@ public class ComputeEnginePerfTest extends AbstractPerfTest { public static TemporaryFolder temp = new TemporaryFolder(); @ClassRule - public static Orchestrator orchestrator = Orchestrator - .builderEnv() - .addPlugin(FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar")) + public static Orchestrator orchestrator = newOrchestratorBuilder() + .addPlugin(xooPlugin()) .setServerProperty( "sonar.web.javaOpts", String.format("-Xms%dm -Xmx%dm -XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless=true", MAX_HEAP_SIZE_IN_MEGA, MAX_HEAP_SIZE_IN_MEGA)) diff --git a/tests/src/test/java/org/sonarqube/tests/performance/server/ServerPerfTest.java b/tests/src/test/java/org/sonarqube/tests/performance/server/ServerPerfTest.java index 3de0d05c8cc..2d147551db5 100644 --- a/tests/src/test/java/org/sonarqube/tests/performance/server/ServerPerfTest.java +++ b/tests/src/test/java/org/sonarqube/tests/performance/server/ServerPerfTest.java @@ -33,6 +33,8 @@ import org.sonarqube.tests.performance.AbstractPerfTest; import org.sonarqube.tests.performance.ServerLogs; import static org.apache.commons.io.FileUtils.readLines; +import static util.ItUtils.newOrchestratorBuilder; +import static util.ItUtils.xooPlugin; public class ServerPerfTest extends AbstractPerfTest { private static final int TIMEOUT_3_MINUTES = 1000 * 60 * 3; @@ -44,8 +46,8 @@ public class ServerPerfTest extends AbstractPerfTest { @Test public void server_startup_and_shutdown() throws Exception { String defaultWebJavaOptions = "-Xmx768m -XX:+HeapDumpOnOutOfMemoryError -Djava.awt.headless=true -Dfile.encoding=UTF-8"; - Orchestrator orchestrator = Orchestrator.builderEnv() - .addPlugin(FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar")) + Orchestrator orchestrator = newOrchestratorBuilder() + .addPlugin(xooPlugin()) // See http://wiki.apache.org/tomcat/HowTo/FasterStartUp // Sometimes source of entropy is too small and Tomcat spends ~20 seconds on the step : diff --git a/tests/src/test/java/org/sonarqube/tests/plugins/CompressPluginsTest.java b/tests/src/test/java/org/sonarqube/tests/plugins/CompressPluginsTest.java index ca57e9fc7e4..f2601bdaa1a 100644 --- a/tests/src/test/java/org/sonarqube/tests/plugins/CompressPluginsTest.java +++ b/tests/src/test/java/org/sonarqube/tests/plugins/CompressPluginsTest.java @@ -24,7 +24,6 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.sonar.orchestrator.Orchestrator; import com.sonar.orchestrator.build.SonarScanner; -import org.json.JSONException; import org.junit.Before; import org.junit.ClassRule; import org.junit.Rule; @@ -34,6 +33,7 @@ import org.sonarqube.ws.client.GetRequest; import org.sonarqube.ws.client.WsResponse; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.projectDir; import static util.ItUtils.xooPlugin; @@ -42,7 +42,7 @@ import static util.ItUtils.xooPlugin; */ public class CompressPluginsTest { @ClassRule - public static Orchestrator orchestrator = Orchestrator.builderEnv() + public static Orchestrator orchestrator = newOrchestratorBuilder() .addPlugin(xooPlugin()) .setServerProperty("sonar.pluginsCompression.enable", "true") .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/plugins/PluginsTest.java b/tests/src/test/java/org/sonarqube/tests/plugins/PluginsTest.java index eb32eebbc6c..bcde9c81ca2 100644 --- a/tests/src/test/java/org/sonarqube/tests/plugins/PluginsTest.java +++ b/tests/src/test/java/org/sonarqube/tests/plugins/PluginsTest.java @@ -24,8 +24,6 @@ import com.sonar.orchestrator.OrchestratorBuilder; import com.sonar.orchestrator.build.BuildResult; import com.sonar.orchestrator.build.SonarScanner; import com.sonar.orchestrator.locator.MavenLocation; -import java.io.File; -import java.net.MalformedURLException; import java.util.Arrays; import java.util.List; import org.junit.BeforeClass; @@ -50,8 +48,8 @@ import org.sonarqube.tests.plugins.checks.SwiftCheck; import org.sonarqube.tests.plugins.checks.Validation; import org.sonarqube.tests.plugins.checks.WebCheck; -import static com.sonar.orchestrator.locator.FileLocation.byWildcardMavenFilename; import static org.assertj.core.api.Assertions.fail; +import static util.ItUtils.newOrchestratorBuilder; /** * Verify that latest releases of the plugins available in update center @@ -83,8 +81,7 @@ public class PluginsTest { @BeforeClass public static void startServer() { - OrchestratorBuilder builder = Orchestrator.builderEnv() - .setZipFile(byWildcardMavenFilename(new File("../sonar-application/target"), "sonar*.zip").getFile()); + OrchestratorBuilder builder = newOrchestratorBuilder(); builder.addPlugin(MavenLocation.of("com.sonarsource.license", "sonar-dev-license-plugin", "3.2.0.1163")); diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java index 575f42abf47..eaf2ba850be 100644 --- a/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java @@ -26,6 +26,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -50,9 +51,7 @@ public class ProjectSuite { static final int SEARCH_HTTP_PORT = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress()); @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() // for ES resiliency tests .setServerProperty("sonar.search.httpPort", "" + SEARCH_HTTP_PORT) .setServerProperty("sonar.search.recovery.delayInMs", "1000") diff --git a/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java b/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java index 872029f36d6..d65f7b52c37 100644 --- a/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; @RunWith(Suite.class) @@ -33,7 +34,7 @@ import static util.ItUtils.xooPlugin; public class SonarCloudProjectSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) .setServerProperty("sonar.sonarcloud.enabled", "true") .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java b/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java index 574957407de..985f8b3a3dc 100644 --- a/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -36,13 +37,10 @@ import static util.ItUtils.xooPlugin; public class OrganizationQualityGateSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() // required for notification tests .setServerProperty("sonar.notifications.delay", "1") - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .addPlugin(pluginArtifact("posttask-plugin")) .addPlugin(xooPlugin()) .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateSuite.java b/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateSuite.java index 3ce87ad9528..910144e75cb 100644 --- a/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -38,13 +39,10 @@ import static util.ItUtils.xooPlugin; public class QualityGateSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() // required for notification tests .setServerProperty("sonar.notifications.delay", "1") - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .addPlugin(pluginArtifact("posttask-plugin")) .addPlugin(xooPlugin()) .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/qualityModel/QualityModelSuite.java b/tests/src/test/java/org/sonarqube/tests/qualityModel/QualityModelSuite.java index c7431a8bbff..b796cfe6b84 100644 --- a/tests/src/test/java/org/sonarqube/tests/qualityModel/QualityModelSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/qualityModel/QualityModelSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; @RunWith(Suite.class) @@ -40,12 +41,9 @@ import static util.ItUtils.xooPlugin; public class QualityModelSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/qualityProfile/ActiveRuleEsResilienceTest.java b/tests/src/test/java/org/sonarqube/tests/qualityProfile/ActiveRuleEsResilienceTest.java index 869beb0154b..44a91226fda 100644 --- a/tests/src/test/java/org/sonarqube/tests/qualityProfile/ActiveRuleEsResilienceTest.java +++ b/tests/src/test/java/org/sonarqube/tests/qualityProfile/ActiveRuleEsResilienceTest.java @@ -38,6 +38,7 @@ import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.sonarqube.tests.Byteman.Process.WEB; +import static util.ItUtils.newOrchestratorBuilder; public class ActiveRuleEsResilienceTest { private static final String RULE_ONE_BUG_PER_LINE = "xoo:OneBugIssuePerLine"; @@ -47,7 +48,7 @@ public class ActiveRuleEsResilienceTest { private static final Byteman byteman; static { - byteman = new Byteman(Orchestrator.builderEnv(), WEB); + byteman = new Byteman(newOrchestratorBuilder(), WEB); orchestrator = byteman .getOrchestratorBuilder() .setServerProperty("sonar.search.recovery.delayInMs", "1000") diff --git a/tests/src/test/java/org/sonarqube/tests/qualityProfile/BuiltInQualityProfilesNotificationTest.java b/tests/src/test/java/org/sonarqube/tests/qualityProfile/BuiltInQualityProfilesNotificationTest.java index 2eb34952fa4..861beecbe53 100644 --- a/tests/src/test/java/org/sonarqube/tests/qualityProfile/BuiltInQualityProfilesNotificationTest.java +++ b/tests/src/test/java/org/sonarqube/tests/qualityProfile/BuiltInQualityProfilesNotificationTest.java @@ -41,6 +41,7 @@ import util.user.UserRule; import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; public class BuiltInQualityProfilesNotificationTest { @@ -67,7 +68,7 @@ public class BuiltInQualityProfilesNotificationTest { @Test public void does_not_send_mail_if_no_quality_profile_is_updated() throws Exception { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("foo-plugin-v1")) .setServerProperty("email.smtp_host.secured", "localhost") .setServerProperty("email.smtp_port.secured", Integer.toString(smtpServer.getServer().getPort())) @@ -86,7 +87,7 @@ public class BuiltInQualityProfilesNotificationTest { @Test public void send_mail_if_quality_profile_is_updated() throws Exception { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("foo-plugin-v1")) .setServerProperty("sonar.notifications.delay", "1") .setServerProperty("email.smtp_host.secured", "localhost") @@ -174,7 +175,7 @@ public class BuiltInQualityProfilesNotificationTest { @Test public void do_not_send_mail_if_notifications_are_disabled_in_settings() throws Exception { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("foo-plugin-v1")) .setServerProperty("sonar.builtInQualityProfiles.disableNotificationOnUpdate", "true") .setServerProperty("email.smtp_host.secured", "localhost") diff --git a/tests/src/test/java/org/sonarqube/tests/rule/RuleEsResilienceTest.java b/tests/src/test/java/org/sonarqube/tests/rule/RuleEsResilienceTest.java index 2efd49948ce..1163564bbba 100644 --- a/tests/src/test/java/org/sonarqube/tests/rule/RuleEsResilienceTest.java +++ b/tests/src/test/java/org/sonarqube/tests/rule/RuleEsResilienceTest.java @@ -38,6 +38,7 @@ import util.ItUtils; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.sonarqube.tests.Byteman.Process.WEB; +import static util.ItUtils.newOrchestratorBuilder; public class RuleEsResilienceTest { @@ -46,7 +47,7 @@ public class RuleEsResilienceTest { private static final Byteman byteman; static { - byteman = new Byteman(Orchestrator.builderEnv(), WEB); + byteman = new Byteman(newOrchestratorBuilder(), WEB); orchestrator = byteman .getOrchestratorBuilder() .setServerProperty("sonar.search.recovery.delayInMs", "1000") diff --git a/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java b/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java index ddff401dcc1..6576d0ec924 100644 --- a/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java +++ b/tests/src/test/java/org/sonarqube/tests/rule/RuleReKeyingTest.java @@ -40,6 +40,7 @@ import org.sonarqube.ws.client.issues.SearchRequest; import static java.util.Collections.singletonList; import static java.util.stream.Collectors.toSet; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.projectDir; @@ -60,7 +61,7 @@ public class RuleReKeyingTest { @Test public void rules_are_re_keyed_when_upgrading_and_downgrading_plugin() { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("foo-plugin-v1")) .build(); orchestrator.start(); diff --git a/tests/src/test/java/org/sonarqube/tests/serverSystem/RestartTest.java b/tests/src/test/java/org/sonarqube/tests/serverSystem/RestartTest.java index 010ba984229..532925b7c50 100644 --- a/tests/src/test/java/org/sonarqube/tests/serverSystem/RestartTest.java +++ b/tests/src/test/java/org/sonarqube/tests/serverSystem/RestartTest.java @@ -29,7 +29,6 @@ import org.junit.rules.DisableOnDebug; import org.junit.rules.ExpectedException; import org.junit.rules.TestRule; import org.junit.rules.Timeout; -import org.sonarqube.qa.util.Tester; import org.sonarqube.ws.System; import org.sonarqube.ws.client.PostRequest; import org.sonarqube.ws.client.WsClient; @@ -39,6 +38,7 @@ import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; import static util.ItUtils.newAdminWsClient; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.newWsClient; /** @@ -64,7 +64,7 @@ public class RestartTest { public void restart_in_prod_mode_requires_sysadmin_permission_and_restarts() throws Exception { // server classloader locks Jar files on Windows if (!SystemUtils.IS_OS_WINDOWS) { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .setOrchestratorProperty("orchestrator.keepWorkspace", "true") .build(); orchestrator.start(); diff --git a/tests/src/test/java/org/sonarqube/tests/serverSystem/ServerSystemRestartingOrchestrator.java b/tests/src/test/java/org/sonarqube/tests/serverSystem/ServerSystemRestartingOrchestrator.java index 161456b209a..ed4fd75d914 100644 --- a/tests/src/test/java/org/sonarqube/tests/serverSystem/ServerSystemRestartingOrchestrator.java +++ b/tests/src/test/java/org/sonarqube/tests/serverSystem/ServerSystemRestartingOrchestrator.java @@ -33,6 +33,7 @@ import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; import static util.ItUtils.newAdminWsClient; +import static util.ItUtils.newOrchestratorBuilder; /** * This class start a new orchestrator on each test case @@ -57,7 +58,7 @@ public class ServerSystemRestartingOrchestrator { @Test public void check_minimal_sonar_version_at_startup() throws Exception { try { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(FileLocation.of(new File(ServerSystemRestartingOrchestrator.class.getResource("/serverSystem/ServerSystemTest/incompatible-plugin-1.0.jar").toURI()))) .build(); orchestrator.start(); @@ -70,9 +71,9 @@ public class ServerSystemRestartingOrchestrator { @Test public void support_install_dir_with_whitespaces() throws Exception { - String dirName = "target/has space"; + String dirName = "build/distributions/has space"; FileUtils.deleteDirectory(new File(dirName)); - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .setOrchestratorProperty("orchestrator.workspaceDir", dirName) .build(); orchestrator.start(); @@ -83,7 +84,7 @@ public class ServerSystemRestartingOrchestrator { // SONAR-4748 @Test public void should_create_in_temp_folder() throws Exception { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(ItUtils.pluginArtifact("server-plugin")) .setServerProperty("sonar.createTempFiles", "true") .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/serverSystem/SystemStateTest.java b/tests/src/test/java/org/sonarqube/tests/serverSystem/SystemStateTest.java index 94d9fc77b29..7a2ee2e42a5 100644 --- a/tests/src/test/java/org/sonarqube/tests/serverSystem/SystemStateTest.java +++ b/tests/src/test/java/org/sonarqube/tests/serverSystem/SystemStateTest.java @@ -41,6 +41,7 @@ import org.sonarqube.ws.client.WsClient; import static com.google.common.base.Preconditions.checkState; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.newSystemUserWsClient; import static util.ItUtils.newWsClient; import static util.ItUtils.pluginArtifact; @@ -128,7 +129,7 @@ public class SystemStateTest { void start(Lock lock) { checkState(orchestrator == null); - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("server-plugin")) .setServerProperty("sonar.web.startupLock.path", lock.webFile.getAbsolutePath()) .setServerProperty("sonar.ce.startupLock.path", lock.ceFile.getAbsolutePath()) diff --git a/tests/src/test/java/org/sonarqube/tests/settings/SettingsTestRestartingOrchestrator.java b/tests/src/test/java/org/sonarqube/tests/settings/SettingsTestRestartingOrchestrator.java index 8aee5ebb876..1c4f5a88e3e 100644 --- a/tests/src/test/java/org/sonarqube/tests/settings/SettingsTestRestartingOrchestrator.java +++ b/tests/src/test/java/org/sonarqube/tests/settings/SettingsTestRestartingOrchestrator.java @@ -21,7 +21,6 @@ package org.sonarqube.tests.settings; import com.sonar.orchestrator.Orchestrator; import com.sonar.orchestrator.build.SonarScanner; -import java.io.UnsupportedEncodingException; import java.net.URL; import org.junit.After; import org.junit.Rule; @@ -33,6 +32,7 @@ import util.user.UserRule; import static com.codeborne.selenide.Condition.visible; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.projectDir; import static util.ItUtils.xooPlugin; @@ -60,7 +60,7 @@ public class SettingsTestRestartingOrchestrator { @Test public void test_settings() { URL secretKeyUrl = getClass().getResource("/settings/SettingsTest/sonar-secret.txt"); - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("settings-plugin")) .addPlugin(pluginArtifact("license-plugin")) .setServerProperty("sonar.secretKeyPath", secretKeyUrl.getFile()) @@ -86,7 +86,7 @@ public class SettingsTestRestartingOrchestrator { @Test public void property_relocation() { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("property-relocation-plugin")) .addPlugin(xooPlugin()) .setServerProperty("sonar.deprecatedKey", "true") diff --git a/tests/src/test/java/org/sonarqube/tests/source/SourceSuite.java b/tests/src/test/java/org/sonarqube/tests/source/SourceSuite.java index fbcb1885bf9..070a0fc941e 100644 --- a/tests/src/test/java/org/sonarqube/tests/source/SourceSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/source/SourceSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; @RunWith(Suite.class) @@ -37,9 +38,7 @@ import static util.ItUtils.xooPlugin; public class SourceSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator - .builderEnv() - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .setOrchestratorProperty("scmgitVersion", "LATEST_RELEASE") .addPlugin(xooPlugin()) .addPlugin("scmgit") diff --git a/tests/src/test/java/org/sonarqube/tests/startup/StartupIndexationTest.java b/tests/src/test/java/org/sonarqube/tests/startup/StartupIndexationTest.java index 643a0ff12d5..f654949bd26 100644 --- a/tests/src/test/java/org/sonarqube/tests/startup/StartupIndexationTest.java +++ b/tests/src/test/java/org/sonarqube/tests/startup/StartupIndexationTest.java @@ -38,6 +38,7 @@ import org.sonarqube.ws.Users; import org.sonarqube.ws.client.users.SearchRequest; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; public class StartupIndexationTest { @@ -81,7 +82,7 @@ public class StartupIndexationTest { pauseFile = temp.newFile(); FileUtils.touch(pauseFile); - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .setServerProperty("sonar.web.pause.path", pauseFile.getAbsolutePath()) .addPlugin(pluginArtifact("wait-at-platform-level4-plugin")) .setStartupLogWatcher(l -> l.contains("PlatformLevel4 initialization phase is paused")) diff --git a/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryOptOutTest.java b/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryOptOutTest.java index 1cd6186184d..a827baa6282 100644 --- a/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryOptOutTest.java +++ b/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryOptOutTest.java @@ -32,13 +32,14 @@ import org.sonarqube.ws.client.GetRequest; import static org.assertj.core.api.Assertions.assertThat; import static util.ItUtils.jsonToMap; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; public class TelemetryOptOutTest { public static MockWebServer server = new MockWebServer(); - private static Orchestrator orchestrator = Orchestrator.builderEnv() + private static Orchestrator orchestrator = newOrchestratorBuilder() .addPlugin(xooPlugin()) .setServerProperty("sonar.telemetry.enable", "false") .setServerProperty("sonar.telemetry.url", server.url("").toString()) diff --git a/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryUploadTest.java b/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryUploadTest.java index 8e8a9007f59..fd17f385112 100644 --- a/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryUploadTest.java +++ b/tests/src/test/java/org/sonarqube/tests/telemetry/TelemetryUploadTest.java @@ -37,6 +37,7 @@ import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import static util.ItUtils.jsonToMap; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.runProjectAnalysis; import static util.ItUtils.xooPlugin; @@ -60,7 +61,7 @@ public class TelemetryUploadTest { @Test public void sent_telemetry_data() throws Exception { telemetryServer.enqueue(new MockResponse().setResponseCode(200)); - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(xooPlugin()) .setServerProperty("sonar.telemetry.url", telemetryServer.url("").toString()) // increase frequency so that payload is sent quickly after startup @@ -104,7 +105,7 @@ public class TelemetryUploadTest { @Test public void does_not_send_telemetry_data_right_away_by_Default() { - orchestrator = Orchestrator.builderEnv() + orchestrator = newOrchestratorBuilder() .addPlugin(xooPlugin()) .setServerProperty("sonar.telemetry.url", telemetryServer.url("").toString()) .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/test/TestSuite.java b/tests/src/test/java/org/sonarqube/tests/test/TestSuite.java index 8afec8fdf6a..9afbbfa2de9 100644 --- a/tests/src/test/java/org/sonarqube/tests/test/TestSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/test/TestSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; @RunWith(Suite.class) @@ -36,12 +37,9 @@ import static util.ItUtils.xooPlugin; public class TestSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) - // reduce memory for Elasticsearch - .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") - .build(); } diff --git a/tests/src/test/java/org/sonarqube/tests/upgrade/UpgradeTest.java b/tests/src/test/java/org/sonarqube/tests/upgrade/UpgradeTest.java index 0828b039b11..8d79898aa13 100644 --- a/tests/src/test/java/org/sonarqube/tests/upgrade/UpgradeTest.java +++ b/tests/src/test/java/org/sonarqube/tests/upgrade/UpgradeTest.java @@ -25,7 +25,7 @@ import com.sonar.orchestrator.Orchestrator; import com.sonar.orchestrator.OrchestratorBuilder; import com.sonar.orchestrator.build.MavenBuild; import com.sonar.orchestrator.container.Server; -import com.sonar.orchestrator.locator.FileLocation; +import com.sonar.orchestrator.locator.MavenLocation; import com.sonar.orchestrator.version.Version; import java.io.File; import java.io.IOException; @@ -53,6 +53,8 @@ import static java.lang.Integer.parseInt; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; + public class UpgradeTest { private static final String PROJECT_KEY = "org.apache.struts:struts-parent"; @@ -70,8 +72,8 @@ public class UpgradeTest { } @Test - public void test_upgrade_from_5_6_1() { - testDatabaseUpgrade(Version.create("5.6.1")); + public void test_upgrade_from_6_7() { + testDatabaseUpgrade(Version.create("6.7")); } private void testDatabaseUpgrade(Version fromVersion) { @@ -152,8 +154,8 @@ public class UpgradeTest { OrchestratorBuilder builder = Orchestrator.builderEnv() .setSonarVersion(sqVersion.toString()) .setOrchestratorProperty("orchestrator.keepDatabase", String.valueOf(keepDatabase)) - .setOrchestratorProperty("javaVersion", "3.14") - .addPlugin("java") + .setOrchestratorProperty("orchestrator.workspaceDir", "build/it") + .addPlugin(MavenLocation.of("org.sonarsource.java", "sonar-java-plugin", "5.1.0.13090")) .setStartupLogWatcher(log -> log.contains("Process[web] is up")); orchestrator = builder.build(); orchestrator.start(); @@ -161,8 +163,7 @@ public class UpgradeTest { } private void startAndUpgradeDevServer() { - OrchestratorBuilder builder = Orchestrator.builderEnv() - .setZipFile(FileLocation.byWildcardMavenFilename(new File("../sonar-application/target"), "sonar*.zip").getFile()) + OrchestratorBuilder builder = newOrchestratorBuilder() .setOrchestratorProperty("orchestrator.keepDatabase", "true") .setOrchestratorProperty("javaVersion", LATEST_JAVA_RELEASE) .addPlugin("java") diff --git a/tests/src/test/java/org/sonarqube/tests/user/OnboardingTest.java b/tests/src/test/java/org/sonarqube/tests/user/OnboardingTest.java index e7c709f1237..440e0d4bba6 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/OnboardingTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/OnboardingTest.java @@ -30,13 +30,14 @@ import org.sonarqube.ws.client.users.DeactivateRequest; import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; +import static util.ItUtils.newOrchestratorBuilder; public class OnboardingTest { private static final String ONBOARDING_TUTORIAL_SHOW_TO_NEW_USERS = "sonar.onboardingTutorial.showToNewUsers"; @ClassRule - public static final Orchestrator orchestrator = Orchestrator.builderEnv().build(); + public static final Orchestrator orchestrator = newOrchestratorBuilder().build(); @Rule public Tester tester = new Tester(orchestrator).disableOrganizations(); diff --git a/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java b/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java index e5586b474e2..c0f14d8e6a3 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/RealmAuthenticationTest.java @@ -51,6 +51,7 @@ import static java.net.HttpURLConnection.HTTP_OK; import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.newUserWsClient; import static util.ItUtils.pluginArtifact; import static util.ItUtils.resetSettings; @@ -76,7 +77,7 @@ public class RealmAuthenticationTest { private static final String USERS_PROPERTY = "sonar.fakeauthenticator.users"; @ClassRule - public static final Orchestrator orchestrator = Orchestrator.builderEnv() + public static final Orchestrator orchestrator = newOrchestratorBuilder() .addPlugin(pluginArtifact("security-plugin")) .setServerProperty("sonar.security.realm", "FakeRealm") .build(); diff --git a/tests/src/test/java/org/sonarqube/tests/user/SsoAuthenticationTest.java b/tests/src/test/java/org/sonarqube/tests/user/SsoAuthenticationTest.java index 07159881842..146f37ea777 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/SsoAuthenticationTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/SsoAuthenticationTest.java @@ -34,6 +34,7 @@ import util.user.UserRule; import static java.nio.charset.StandardCharsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; import static util.ItUtils.call; +import static util.ItUtils.newOrchestratorBuilder; /** * Test SSO authentication (using HTTP headers). @@ -56,7 +57,7 @@ public class SsoAuthenticationTest { static final String GROUP_3 = "group-3"; @ClassRule - public static final Orchestrator orchestrator = Orchestrator.builderEnv() + public static final Orchestrator orchestrator = newOrchestratorBuilder() .setServerProperty("sonar.web.sso.enable", "true") .setServerProperty("sonar.web.sso.loginHeader", LOGIN_HEADER) .setServerProperty("sonar.web.sso.nameHeader", NAME_HEADER) diff --git a/tests/src/test/java/org/sonarqube/tests/user/UserEsResilienceTest.java b/tests/src/test/java/org/sonarqube/tests/user/UserEsResilienceTest.java index ca5516f3896..92ff670f0e3 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/UserEsResilienceTest.java +++ b/tests/src/test/java/org/sonarqube/tests/user/UserEsResilienceTest.java @@ -39,6 +39,7 @@ import util.ItUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.sonarqube.tests.Byteman.Process.WEB; import static util.ItUtils.expectHttpError; +import static util.ItUtils.newOrchestratorBuilder; public class UserEsResilienceTest { @@ -47,7 +48,7 @@ public class UserEsResilienceTest { private static final Byteman byteman; static { - byteman = new Byteman(Orchestrator.builderEnv(), WEB); + byteman = new Byteman(newOrchestratorBuilder(), WEB); orchestrator = byteman .getOrchestratorBuilder() .setServerProperty("sonar.search.recovery.delayInMs", "1000") diff --git a/tests/src/test/java/org/sonarqube/tests/user/UserSuite.java b/tests/src/test/java/org/sonarqube/tests/user/UserSuite.java index 4eb7d0138dd..0f448dd9a7a 100644 --- a/tests/src/test/java/org/sonarqube/tests/user/UserSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/user/UserSuite.java @@ -25,6 +25,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.pluginArtifact; import static util.ItUtils.xooPlugin; @@ -44,7 +45,7 @@ import static util.ItUtils.xooPlugin; public class UserSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) // Used in BaseIdentityProviderTest diff --git a/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java b/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java index 6412ec5c48e..e3bc89f9269 100644 --- a/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java +++ b/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java @@ -24,6 +24,7 @@ import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; +import static util.ItUtils.newOrchestratorBuilder; import static util.ItUtils.xooPlugin; @RunWith(Suite.class) @@ -34,7 +35,7 @@ import static util.ItUtils.xooPlugin; public class WebhooksSuite { @ClassRule - public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv() + public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder() .addPlugin(xooPlugin()) // reduce memory for Elasticsearch diff --git a/tests/src/test/java/util/ItUtils.java b/tests/src/test/java/util/ItUtils.java index d91c8e37872..a5c763180de 100644 --- a/tests/src/test/java/util/ItUtils.java +++ b/tests/src/test/java/util/ItUtils.java @@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableMap; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.sonar.orchestrator.Orchestrator; +import com.sonar.orchestrator.OrchestratorBuilder; import com.sonar.orchestrator.build.BuildResult; import com.sonar.orchestrator.build.SonarRunner; import com.sonar.orchestrator.container.Server; @@ -54,6 +55,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; @@ -96,8 +98,23 @@ public class ItUtils { private ItUtils() { } + public static OrchestratorBuilder newOrchestratorBuilder() { + OrchestratorBuilder builder = Orchestrator.builderEnv(); + String version = System.getProperty("sonar.runtimeVersion"); + if (StringUtils.isEmpty(version)) { + File zip = FileLocation.byWildcardMavenFilename(new File("../sonar-application/build/distributions"), "sonar-application-*.zip").getFile(); + builder.setZipFile(zip); + } else { + builder.setSonarVersion(version); + } + return builder + // reduce memory for Elasticsearch + .setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m") + .setOrchestratorProperty("orchestrator.workspaceDir", "build/it"); + } + public static FileLocation xooPlugin() { - return FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/target"), "sonar-xoo-plugin-*.jar"); + return FileLocation.byWildcardMavenFilename(new File("../plugins/sonar-xoo-plugin/build/libs"), "sonar-xoo-plugin-*.jar"); } public static List getAllServerIssues(Orchestrator orchestrator) { @@ -164,7 +181,7 @@ public class ItUtils { * @param dirName the directory of it/plugins, for example "sonar-fake-plugin". */ public static FileLocation pluginArtifact(String dirName) { - return FileLocation.byWildcardMavenFilename(new File("plugins/" + dirName + "/target"), dirName + "-*.jar"); + return FileLocation.byWildcardMavenFilename(new File("plugins/" + dirName + "/build/libs"), dirName + "-*.jar"); } /** diff --git a/third-party-licenses.sh b/third-party-licenses.sh deleted file mode 100755 index c97a17c4b33..00000000000 --- a/third-party-licenses.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -mvn org.codehaus.mojo:license-maven-plugin:aggregate-add-third-party -Dlicense.includedScopes=compile -pl sonar-application -am - -cat target/generated-sources/license/THIRD-PARTY.txt diff --git a/travis.sh b/travis.sh index 7c1acf457ea..eaf9879c83c 100755 --- a/travis.sh +++ b/travis.sh @@ -23,83 +23,12 @@ function installJdk8 { export PATH=$JAVA_HOME/bin:$PATH } -# -# Maven 3.2.5 is installed by default on Travis. Maven 3.5 is preferred. -# -function installMaven { - echo "Setup Maven" - mkdir -p ~/maven - pushd ~/maven > /dev/null - if [ ! -d "apache-maven-3.5" ]; then - echo "Download Maven 3.5" - curl -sSL https://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz | tar zx -C ~/maven - fi - popd > /dev/null - export M2_HOME=~/maven/apache-maven-3.5.0 - export PATH=$M2_HOME/bin:$PATH -} - function installNode { set +u source ~/.nvm/nvm.sh && nvm install 8 set -u } -# -# Replaces the version defined in sources, usually x.y-SNAPSHOT, -# by a version identifying the build. -# The build version is composed of 4 fields, including the semantic version and -# the build number provided by Travis. -# -# Exported variables: -# - INITIAL_VERSION: version as defined in pom.xml -# - BUILD_VERSION: version including the build number -# - PROJECT_VERSION: target Maven version. The name of this variable is important because -# it's used by QA when extracting version from Artifactory build info. -# -# Example of SNAPSHOT -# INITIAL_VERSION=6.3-SNAPSHOT -# BUILD_VERSION=6.3.0.12345 -# PROJECT_VERSION=6.3.0.12345 -# -# Example of RC -# INITIAL_VERSION=6.3-RC1 -# BUILD_VERSION=6.3.0.12345 -# PROJECT_VERSION=6.3-RC1 -# -# Example of GA -# INITIAL_VERSION=6.3 -# BUILD_VERSION=6.3.0.12345 -# PROJECT_VERSION=6.3 -# -function fixBuildVersion { - export INITIAL_VERSION=`maven_expression "project.version"` - - # remove suffix -SNAPSHOT or -RC - without_suffix=`echo $INITIAL_VERSION | sed "s/-.*//g"` - - IFS=$'.' - fields_count=`echo $without_suffix | wc -w` - unset IFS - if [ $fields_count -lt 3 ]; then - export BUILD_VERSION="$without_suffix.0.$TRAVIS_BUILD_NUMBER" - else - export BUILD_VERSION="$without_suffix.$TRAVIS_BUILD_NUMBER" - fi - - if [[ "${INITIAL_VERSION}" == *"-SNAPSHOT" ]]; then - # SNAPSHOT - export PROJECT_VERSION=$BUILD_VERSION - mvn org.codehaus.mojo:versions-maven-plugin:2.2:set -DnewVersion=$PROJECT_VERSION -DgenerateBackupPoms=false -B -e - else - # not a SNAPSHOT: milestone, RC or GA - export PROJECT_VERSION=$INITIAL_VERSION - fi - - echo "Build Version : $BUILD_VERSION" - echo "Project Version: $PROJECT_VERSION" -} - # # Configure Maven settings and install some script utilities # @@ -134,14 +63,10 @@ case "$TARGET" in BUILD) installJdk8 - installMaven installNode - fixBuildVersion - - # Minimal Maven settings - export MAVEN_OPTS="-Xmx1G -Xms128m" - MAVEN_ARGS="-T 1C -Dmaven.test.redirectTestOutputToFile=false -Dsurefire.useFile=false -B -e -V -DbuildVersion=$BUILD_VERSION -Dtests.es.logger.level=WARN -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn" + # Used by Next + export INITIAL_VERSION=$(cat gradle.properties | grep version | awk -F= '{print $2}') # Fetch all commit history so that SonarQube has exact blame information # for issue auto-assignment @@ -153,27 +78,22 @@ BUILD) if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo 'Build and analyze master' - mvn org.jacoco:jacoco-maven-plugin:prepare-agent deploy \ - $MAVEN_ARGS \ - -Pdeploy-sonarsource,release - - mvn sonar:sonar \ - -Dsonar.host.url=$SONAR_HOST_URL \ - -Dsonar.login=$SONAR_TOKEN \ - -Dsonar.projectVersion=$INITIAL_VERSION \ - -Dsonar.analysis.buildNumber=$BUILD_NUMBER \ - -Dsonar.analysis.pipeline=$BUILD_NUMBER \ - -Dsonar.analysis.sha1=$GIT_COMMIT \ - -Dsonar.analysis.repository=$TRAVIS_REPO_SLUG + ./gradlew --no-daemon --console plain \ + -DbuildNumber=$BUILD_NUMBER \ + build sonarqube artifactoryPublish -PjacocoEnabled=true -Prelease=true \ + -Dsonar.host.url=$SONAR_HOST_URL \ + -Dsonar.login=$SONAR_TOKEN \ + -Dsonar.projectVersion=$INITIAL_VERSION \ + -Dsonar.analysis.buildNumber=$BUILD_NUMBER \ + -Dsonar.analysis.pipeline=$BUILD_NUMBER \ + -Dsonar.analysis.sha1=$GIT_COMMIT \ + -Dsonar.analysis.repository=$TRAVIS_REPO_SLUG elif [[ "$TRAVIS_BRANCH" == "branch-"* ]] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then echo 'Build release branch' - - mvn org.jacoco:jacoco-maven-plugin:prepare-agent deploy \ - $MAVEN_ARGS \ - -Pdeploy-sonarsource,release - - mvn sonar:sonar \ + ./gradlew --no-daemon --console plain \ + -DbuildNumber=$BUILD_NUMBER \ + build sonarqube artifactoryPublish -PjacocoEnabled=true -Prelease=true \ -Dsonar.host.url=$SONAR_HOST_URL \ -Dsonar.login=$SONAR_TOKEN \ -Dsonar.branch.name=$TRAVIS_BRANCH \ @@ -185,13 +105,9 @@ BUILD) elif [ "$TRAVIS_PULL_REQUEST" != "false" ] && [ -n "${GITHUB_TOKEN:-}" ]; then echo 'Build and analyze internal pull request' - - mvn org.jacoco:jacoco-maven-plugin:prepare-agent deploy \ - $MAVEN_ARGS \ - -Dsource.skip=true \ - -Pdeploy-sonarsource,release - - mvn sonar:sonar \ + ./gradlew --no-daemon --console plain \ + -DbuildNumber=$BUILD_NUMBER \ + build sonarqube artifactoryPublish -PjacocoEnabled=true -Prelease=true \ -Dsonar.host.url=$SONAR_HOST_URL \ -Dsonar.login=$SONAR_TOKEN \ -Dsonar.analysis.buildNumber=$BUILD_NUMBER \ @@ -207,10 +123,10 @@ BUILD) else echo 'Build feature branch or external pull request' - mvn deploy $MAVEN_ARGS -Pdeploy-sonarsource,release + ./gradlew --no-daemon --console plain \ + -DbuildNumber=$BUILD_NUMBER -Prelease=true \ + build artifactoryPublish fi - - ./run-integration-tests.sh "Lite" "" ;; WEB_TESTS) -- 2.39.5