diff --git a/.backportrc.json b/.backportrc.json
new file mode 100644
index 0000000000000..1b6d16f031561
--- /dev/null
+++ b/.backportrc.json
@@ -0,0 +1,16 @@
+{
+ "upstream": "elastic/elasticsearch",
+ "targetBranchChoices": [
+ { "name": "master", "checked": true },
+ { "name": "7.x", "checked": true },
+ "7.14",
+ "7.13",
+ "6.8"
+ ],
+ "targetPRLabels": ["backport"],
+ "branchLabelMapping": {
+ "^v8.0.0$": "master",
+ "^v7.15.0$": "7.x",
+ "^v(\\d+).(\\d+).\\d+$": "$1.$2"
+ }
+}
diff --git a/.ci/bwcVersions b/.ci/bwcVersions
index e420788409fbb..9277aad1c73c9 100644
--- a/.ci/bwcVersions
+++ b/.ci/bwcVersions
@@ -37,5 +37,8 @@ BWC_VERSION:
- "7.13.1"
- "7.13.2"
- "7.13.3"
+ - "7.13.4"
- "7.14.0"
+ - "7.14.1"
+ - "7.15.0"
- "8.0.0"
diff --git a/.ci/dockerOnLinuxExclusions b/.ci/dockerOnLinuxExclusions
index d4f937ad03d8b..56cefff7c6ccf 100644
--- a/.ci/dockerOnLinuxExclusions
+++ b/.ci/dockerOnLinuxExclusions
@@ -11,6 +11,7 @@ sles-12.3 # older version used in Vagrant image
sles-12.5
sles-15.1
sles-15.2
+sles-15.3
# These OSes are deprecated and filtered starting with 8.0.0, but need to be excluded
# for PR checks
diff --git a/.ci/java-versions.properties b/.ci/java-versions.properties
index 3f0544aa061b9..7edd7fdacd553 100644
--- a/.ci/java-versions.properties
+++ b/.ci/java-versions.properties
@@ -5,4 +5,4 @@
# are 'java' or 'openjdk' followed by the major release number.
ES_BUILD_JAVA=openjdk16
-ES_RUNTIME_JAVA=openjdk11
+ES_RUNTIME_JAVA=java11
diff --git a/.ci/jobs.t/elastic+elasticsearch+folder+pull-request.yml b/.ci/jobs.t/elastic+elasticsearch+folder+pull-request.yml
deleted file mode 100644
index cef72323297a0..0000000000000
--- a/.ci/jobs.t/elastic+elasticsearch+folder+pull-request.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-- job:
- name: elastic+elasticsearch+%BRANCH%+pull-request
- display-name: Pull Requests
- project-type: folder
diff --git a/.ci/jobs.t/elastic+elasticsearch+multijob+packaging-tests-unix.yml b/.ci/jobs.t/elastic+elasticsearch+multijob+packaging-tests-unix.yml
index 8d8fd7f6c607f..d8f9f7e4a4ffe 100644
--- a/.ci/jobs.t/elastic+elasticsearch+multijob+packaging-tests-unix.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+multijob+packaging-tests-unix.yml
@@ -17,7 +17,6 @@
- centos-8-packaging
- debian-9-packaging
- debian-10-packaging
- - fedora-32-packaging
- opensuse-15-1-packaging
- oraclelinux-7-packaging
- oraclelinux-8-packaging
diff --git a/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-arm.yml b/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-arm.yml
index 54bd6169945a2..9a120435dcac7 100644
--- a/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-arm.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-arm.yml
@@ -20,6 +20,7 @@
- inject:
properties-file: '.ci/java-versions-aarch64.properties'
properties-content: |
+ COMPOSE_HTTP_TIMEOUT=120
JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
JAVA15_HOME=$HOME/.java/jdk15
diff --git a/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-unix.yml b/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-unix.yml
index ee797e25f3806..7525f0661bbd6 100644
--- a/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-unix.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+multijob+platform-support-unix.yml
@@ -17,7 +17,6 @@
- "centos-8&&immutable"
- "debian-9&&immutable"
- "debian-10&&immutable"
- - "fedora-32&&immutable"
- "opensuse-15-1&&immutable"
- "oraclelinux-7&&immutable"
- "oraclelinux-8&&immutable"
diff --git a/.ci/jobs.t/elastic+elasticsearch+periodic+java-fips-matrix.yml b/.ci/jobs.t/elastic+elasticsearch+periodic+java-fips-matrix.yml
index d4fa229963dcb..4235e99fbfa4b 100644
--- a/.ci/jobs.t/elastic+elasticsearch+periodic+java-fips-matrix.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+periodic+java-fips-matrix.yml
@@ -4,6 +4,6 @@ vars:
- job-name: elastic+elasticsearch+%BRANCH%+periodic+java-fips-matrix
- job-display-name: "elastic / elasticsearch # %BRANCH% - java fips compatibility matrix"
- job-description: "Testing of the Elasticsearch %BRANCH% branch java FIPS compatibility matrix.\n"
- - matrix-yaml-file: ".ci/matrix-runtime-javas.yml"
+ - matrix-yaml-file: ".ci/matrix-runtime-javas-fips.yml"
- matrix-variable: ES_RUNTIME_JAVA
- gradle-args: "-Dbwc.checkout.align=true -Dtests.fips.enabled=true check"
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+bwc.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+bwc.yml
index b3c1281e46d93..ec7672ad63825 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+bwc.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+bwc.yml
@@ -1,5 +1,37 @@
---
-jjbb-template: pull-request-gradle-unix.yml
-vars:
- - pr-job: "bwc"
- - gradle-args: "-Dignore.tests.seed bwcTestSnapshots"
+- job:
+ name: "elastic+elasticsearch+pull-request+bwc"
+ display-name: "elastic / elasticsearch - pull request bwc"
+ description: "Testing of Elasticsearch pull requests - bwc"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+bwc"
+ scm:
+ - git:
+ refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
+ branches:
+ - "${ghprbActualCommit}"
+ triggers:
+ - github-pull-request:
+ org-list:
+ - elastic
+ allow-whitelist-orgs-as-admins: true
+ trigger-phrase: '.*run\W+elasticsearch-ci/bwc.*'
+ github-hooks: true
+ status-context: elasticsearch-ci/bwc
+ cancel-builds-on-update: true
+ excluded-regions:
+ - ^docs/.*
+ black-list-labels:
+ - '>test-mute'
+ - 'test-full-bwc'
+ builders:
+ - inject:
+ properties-file: '.ci/java-versions.properties'
+ properties-content: |
+ JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
+ RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
+ JAVA8_HOME=$HOME/.java/java8
+ JAVA11_HOME=$HOME/.java/java11
+ JAVA15_HOME=$HOME/.java/openjdk15
+ - shell: |
+ #!/usr/local/bin/runbld --redirect-stderr
+ $WORKSPACE/.ci/scripts/run-gradle.sh -Dignore.tests.seed bwcTestSnapshots
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+docs-check.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+docs-check.yml
index e72a0cb584161..ac36d86477445 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+docs-check.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+docs-check.yml
@@ -1,9 +1,9 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+docs-check"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request docs-check"
+ name: "elastic+elasticsearch+pull-request+docs-check"
+ display-name: "elastic / elasticsearch - pull request docs-check"
description: "Testing of Elasticsearch pull requests - docs-check"
- workspace: "/dev/shm/elastic+elasticsearch+%BRANCH%+pull-request+docs-check"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+docs-check"
scm:
- git:
refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
@@ -18,9 +18,6 @@
github-hooks: true
status-context: elasticsearch-ci/docs-check
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
included-regions:
- ^docs/.*
black-list-labels:
@@ -30,6 +27,8 @@
properties-file: '.ci/java-versions.properties'
properties-content: |
JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
+ JAVA8_HOME=$HOME/.java/java8
+ JAVA11_HOME=$HOME/.java/java11
RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
- shell: |
#!/usr/local/bin/runbld --redirect-stderr
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+eql-correctness.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+eql-correctness.yml
index 26c71b30e1230..be749c200557b 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+eql-correctness.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+eql-correctness.yml
@@ -1,9 +1,9 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+eql-correctness"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request eql-correctness"
+ name: "elastic+elasticsearch+pull-request+eql-correctness"
+ display-name: "elastic / elasticsearch - pull request eql-correctness"
description: "Testing of Elasticsearch pull requests - eql-correctness"
- workspace: "/dev/shm/elastic+elasticsearch+%BRANCH%+pull-request+eql-correctness"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+eql-correctness"
scm:
- git:
refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
@@ -18,9 +18,8 @@
github-hooks: true
status-context: elasticsearch-ci/eql-correctness
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
black-list-labels:
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+full-bwc.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+full-bwc.yml
new file mode 100644
index 0000000000000..813dce173898e
--- /dev/null
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+full-bwc.yml
@@ -0,0 +1,50 @@
+---
+- job:
+ name: "elastic+elasticsearch+pull-request+full-bwc"
+ display-name: "elastic / elasticsearch - pull request full-bwc"
+ description: "Testing of Elasticsearch pull requests - full-bwc"
+ project-type: matrix
+ node: master
+ child-workspace: "/dev/shm/elastic+elasticsearch+pull-request+full-bwc"
+ scm:
+ - git:
+ refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
+ branches:
+ - "${ghprbActualCommit}"
+ triggers:
+ - github-pull-request:
+ org-list:
+ - elastic
+ allow-whitelist-orgs-as-admins: true
+ trigger-phrase: '.*run\W+elasticsearch-ci/full-bwc.*'
+ github-hooks: true
+ status-context: elasticsearch-ci/full-bwc
+ cancel-builds-on-update: true
+ excluded-regions:
+ - ^docs/.*
+ white-list-labels:
+ - 'test-full-bwc'
+ black-list-labels:
+ - '>test-mute'
+ axes:
+ - axis:
+ type: slave
+ name: nodes
+ values:
+ - "general-purpose"
+ - axis:
+ type: yaml
+ filename: ".ci/bwcVersions"
+ name: "BWC_VERSION"
+ builders:
+ - inject:
+ properties-file: '.ci/java-versions.properties'
+ properties-content: |
+ JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
+ RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
+ JAVA8_HOME=$HOME/.java/java8
+ JAVA11_HOME=$HOME/.java/java11
+ JAVA15_HOME=$HOME/.java/openjdk15
+ - shell: |
+ #!/usr/local/bin/runbld --redirect-stderr
+ $WORKSPACE/.ci/scripts/run-gradle.sh -Dignore.tests.seed v$BWC_VERSION#bwcTest
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix-sample.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix-sample.yml
index 07b629ea9be23..6568fa4ee0444 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix-sample.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix-sample.yml
@@ -1,7 +1,7 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+packaging-tests-unix-sample"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request packaging-tests-unix-sample"
+ name: "elastic+elasticsearch+pull-request+packaging-tests-unix-sample"
+ display-name: "elastic / elasticsearch - pull request packaging-tests-unix-sample"
description: "Testing of Elasticsearch pull requests - packaging-tests-unix-sample"
project-type: matrix
node: master
@@ -18,10 +18,9 @@
trigger-phrase: '.*run\W+elasticsearch-ci/packaging-tests-unix-sample.*'
github-hooks: true
status-context: elasticsearch-ci/packaging-tests-unix-sample
- cancel-builds-on-update:
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ cancel-builds-on-update: true
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
black-list-labels:
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix.yml
index 00289bf7aa1a7..fd979e15413f7 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-unix.yml
@@ -1,7 +1,7 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+packaging-tests-unix"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request packaging-tests-unix"
+ name: "elastic+elasticsearch+pull-request+packaging-tests-unix"
+ display-name: "elastic / elasticsearch - pull request packaging-tests-unix"
description: "Testing of Elasticsearch pull requests - packaging-tests-unix"
project-type: matrix
node: master
@@ -19,9 +19,8 @@
github-hooks: true
status-context: elasticsearch-ci/packaging-tests-unix
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
white-list-labels:
@@ -37,7 +36,6 @@
- centos-8-packaging
- debian-9-packaging
- debian-10-packaging
- - fedora-32-packaging
- opensuse-15-1-packaging
- oraclelinux-7-packaging
- oraclelinux-8-packaging
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows-sample.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows-sample.yml
index 40819599bd05a..84656c31a2fdb 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows-sample.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows-sample.yml
@@ -1,7 +1,7 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+packaging-tests-windows-sample"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request packaging-tests-windows-sample"
+ name: "elastic+elasticsearch+pull-request+packaging-tests-windows-sample"
+ display-name: "elastic / elasticsearch - pull request packaging-tests-windows-sample"
description: "Testing of Elasticsearch pull requests - packaging-tests-windows-sample"
# We use a hard-coded workspace directory here to avoid hitting windows path length limits
child-workspace: "C:\\Users\\jenkins\\workspace\\pr-packaging-windows\\${BUILD_NUMBER}"
@@ -21,9 +21,8 @@
github-hooks: true
status-context: elasticsearch-ci/packaging-tests-windows-sample
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
black-list-labels:
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows.yml
index 2792e83e962a2..3d580dda36766 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-tests-windows.yml
@@ -1,7 +1,7 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+packaging-tests-windows"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request packaging-tests-windows"
+ name: "elastic+elasticsearch+pull-request+packaging-tests-windows"
+ display-name: "elastic / elasticsearch - pull request packaging-tests-windows"
description: "Testing of Elasticsearch pull requests - packaging-tests-windows"
# We use a hard-coded workspace directory here to avoid hitting windows path length limits
child-workspace: "C:\\Users\\jenkins\\workspace\\pr-packaging-windows\\${BUILD_NUMBER}"
@@ -21,9 +21,8 @@
github-hooks: true
status-context: elasticsearch-ci/packaging-tests-windows
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
white-list-labels:
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-upgrade-tests.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-upgrade-tests.yml
new file mode 100644
index 0000000000000..bec53a96e99b6
--- /dev/null
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+packaging-upgrade-tests.yml
@@ -0,0 +1,53 @@
+---
+- job:
+ name: "elastic+elasticsearch+pull-request+packaging-upgrade-tests"
+ display-name: "elastic / elasticsearch - pull request packaging-upgrade-tests"
+ description: "Testing of Elasticsearch pull requests - packaging-upgrade-tests"
+ project-type: matrix
+ node: master
+ child-workspace: "/dev/shm/elastic+elasticsearch+pull-request+packaging-upgrade-tests"
+ scm:
+ - git:
+ refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
+ branches:
+ - "${ghprbActualCommit}"
+ triggers:
+ - github-pull-request:
+ org-list:
+ - elastic
+ allow-whitelist-orgs-as-admins: true
+ trigger-phrase: '.*run\W+elasticsearch-ci/packaging-upgrade-tests.*'
+ github-hooks: true
+ status-context: elasticsearch-ci/packaging-upgrade-tests
+ cancel-builds-on-update: true
+ black-list-target-branches:
+ - 6.8
+ excluded-regions:
+ - ^docs/.*
+ white-list-labels:
+ - ':Delivery/Packaging'
+ black-list-labels:
+ - '>test-mute'
+ axes:
+ - axis:
+ type: label-expression
+ name: os
+ values:
+ - centos-8-packaging
+ - ubuntu-20.04-packaging
+ - axis:
+ type: yaml
+ filename: ".ci/bwcVersions"
+ name: "BWC_VERSION"
+ builders:
+ - inject:
+ properties-file: '.ci/java-versions.properties'
+ properties-content: |
+ JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
+ RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
+ JAVA8_HOME=$HOME/.java/java8
+ JAVA11_HOME=$HOME/.java/java11
+ JAVA15_HOME=$HOME/.java/openjdk15
+ - shell: |
+ #!/usr/local/bin/runbld --redirect-stderr
+ ./.ci/os.sh --build-cache -Dorg.elasticsearch.build.cache.url=https://gradle-enterprise.elastic.co/cache/ destructiveDistroUpgradeTest.v$BWC_VERSION
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-fips.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-fips.yml
index 53a34623e3392..766b158b59d7a 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-fips.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-fips.yml
@@ -1,9 +1,9 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+part-1-fips"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request part-1 fips"
+ name: "elastic+elasticsearch+pull-request+part-1-fips"
+ display-name: "elastic / elasticsearch - pull request part-1 fips"
description: "Testing of Elasticsearch pull requests - part-1 fips"
- workspace: "/dev/shm/elastic+elasticsearch+%BRANCH%+pull-request+part-1-fips"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+part-1-fips"
scm:
- git:
refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
@@ -18,13 +18,12 @@
github-hooks: true
status-context: elasticsearch-ci/part-1-fips
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
white-list-labels:
- - ':Security/FIPS'
+ - 'Team:Security'
black-list-labels:
- '>test-mute'
builders:
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-windows.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-windows.yml
index a10119fa64bac..a557271685d2e 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-windows.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-1-windows.yml
@@ -1,7 +1,7 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+part-1-windows"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request part-1 windows"
+ name: "elastic+elasticsearch+pull-request+part-1-windows"
+ display-name: "elastic / elasticsearch - pull request part-1 windows"
description: "Testing of Elasticsearch pull requests - part-1 windows"
node: "windows-immutable"
workspace: "C:\\Users\\jenkins\\workspace\\pr-part-1\\${BUILD_NUMBER}"
@@ -19,9 +19,8 @@
github-hooks: true
status-context: elasticsearch-ci/part-1-windows
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
white-list-labels:
@@ -34,6 +33,7 @@
properties-content: |
JAVA_HOME=$USERPROFILE\\.java\\$ES_BUILD_JAVA
RUNTIME_JAVA_HOME=$USERPROFILE\\.java\\$ES_RUNTIME_JAVA
+ JAVA15_HOME=$USERPROFILE\\.java\\openjdk15
GRADLE_TASK=checkPart1
- batch: |
del /f /s /q %USERPROFILE%\.gradle\init.d\*.*
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-fips.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-fips.yml
index 50e6feb5656ff..f22125ba5f51d 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-fips.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-fips.yml
@@ -1,9 +1,9 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+part-2-fips"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request part-2 fips"
+ name: "elastic+elasticsearch+pull-request+part-2-fips"
+ display-name: "elastic / elasticsearch - pull request part-2 fips"
description: "Testing of Elasticsearch pull requests - part-2 fips"
- workspace: "/dev/shm/elastic+elasticsearch+%BRANCH%+pull-request+part-2-fips"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+part-2-fips"
scm:
- git:
refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
@@ -18,13 +18,12 @@
github-hooks: true
status-context: elasticsearch-ci/part-2-fips
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
white-list-labels:
- - ':Security/FIPS'
+ - 'Team:Security'
black-list-labels:
- '>test-mute'
builders:
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-windows.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-windows.yml
index 457fbd4f44bca..ad353d79c0d14 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-windows.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+part-2-windows.yml
@@ -1,7 +1,7 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+part-2-windows"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request part-2 windows"
+ name: "elastic+elasticsearch+pull-request+part-2-windows"
+ display-name: "elastic / elasticsearch - pull request part-2 windows"
description: "Testing of Elasticsearch pull requests - part-2 windows"
node: "windows-immutable"
workspace: "C:\\Users\\jenkins\\workspace\\pr-part-2\\${BUILD_NUMBER}"
@@ -19,9 +19,8 @@
github-hooks: true
status-context: elasticsearch-ci/part-2-windows
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
+ black-list-target-branches:
+ - 6.8
excluded-regions:
- ^docs/.*
white-list-labels:
@@ -34,6 +33,7 @@
properties-content: |
JAVA_HOME=$USERPROFILE\\.java\\$ES_BUILD_JAVA
RUNTIME_JAVA_HOME=$USERPROFILE\\.java\\$ES_RUNTIME_JAVA
+ JAVA15_HOME=$USERPROFILE\\.java\\openjdk15
GRADLE_TASK=checkPart2
- batch: |
del /f /s /q %USERPROFILE%\.gradle\init.d\*.*
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+precommit.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+precommit.yml
index db697f4989087..e245df4fd599c 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+precommit.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+precommit.yml
@@ -1,9 +1,9 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+precommit"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request precommit"
+ name: "elastic+elasticsearch+pull-request+precommit"
+ display-name: "elastic / elasticsearch - pull request precommit"
description: "Testing of Elasticsearch pull requests - precommit"
- workspace: "/dev/shm/elastic+elasticsearch+%BRANCH%+pull-request+precommit"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+precommit"
scm:
- git:
refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
@@ -18,9 +18,6 @@
github-hooks: true
status-context: elasticsearch-ci/precommit
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
included-regions:
- ^docs/.*
black-list-labels:
@@ -31,6 +28,8 @@
properties-content: |
JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
+ JAVA8_HOME=$HOME/.java/java8
+ JAVA11_HOME=$HOME/.java/java11
- shell: |
#!/usr/local/bin/runbld --redirect-stderr
$WORKSPACE/.ci/scripts/run-gradle.sh -Dignore.tests.seed precommit
diff --git a/.ci/jobs.t/elastic+elasticsearch+pull-request+rest-compatibility.yml b/.ci/jobs.t/elastic+elasticsearch+pull-request+rest-compatibility.yml
index 58f2bf302a06f..591730cc00a43 100644
--- a/.ci/jobs.t/elastic+elasticsearch+pull-request+rest-compatibility.yml
+++ b/.ci/jobs.t/elastic+elasticsearch+pull-request+rest-compatibility.yml
@@ -1,5 +1,38 @@
---
-jjbb-template: pull-request-gradle-unix.yml
-vars:
- - pr-job: "rest-compatibility"
- - gradle-args: "-Dignore.tests.seed checkRestCompat"
+- job:
+ name: "elastic+elasticsearch+pull-request+rest-compatibility"
+ display-name: "elastic / elasticsearch - pull request rest-compatibility"
+ description: "Testing of Elasticsearch pull requests - rest-compatibility"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+rest-compatibility"
+ scm:
+ - git:
+ refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
+ branches:
+ - "${ghprbActualCommit}"
+ triggers:
+ - github-pull-request:
+ org-list:
+ - elastic
+ allow-whitelist-orgs-as-admins: true
+ trigger-phrase: '.*run\W+elasticsearch-ci/rest-compatibility.*'
+ github-hooks: true
+ status-context: elasticsearch-ci/rest-compatibility
+ cancel-builds-on-update: true
+ white-list-target-branches:
+ - master
+ excluded-regions:
+ - ^docs/.*
+ black-list-labels:
+ - '>test-mute'
+ builders:
+ - inject:
+ properties-file: '.ci/java-versions.properties'
+ properties-content: |
+ JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
+ RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
+ JAVA8_HOME=$HOME/.java/java8
+ JAVA11_HOME=$HOME/.java/java11
+ JAVA15_HOME=$HOME/.java/openjdk15
+ - shell: |
+ #!/usr/local/bin/runbld --redirect-stderr
+ $WORKSPACE/.ci/scripts/run-gradle.sh -Dignore.tests.seed checkRestCompat
diff --git a/.ci/matrix-runtime-javas-fips.yml b/.ci/matrix-runtime-javas-fips.yml
new file mode 100644
index 0000000000000..a8c3449a25789
--- /dev/null
+++ b/.ci/matrix-runtime-javas-fips.yml
@@ -0,0 +1,12 @@
+# This file is used as part of a matrix build in Jenkins where the
+# values below are included as an axis of the matrix.
+
+# java11 should always be included as we only support Oracle Java 11 in
+# FIPS 140-2 mode.
+# We also want to test with the bundled JDK so that we proactively find
+# issues that might later be backported to JDK11. Current bundled JDK is
+# openjdk16
+
+ES_RUNTIME_JAVA:
+ - java11
+ - openjdk16
diff --git a/.ci/templates.t/pull-request-gradle-unix.yml b/.ci/templates.t/pull-request-gradle-unix.yml
index f6be38532a38a..ec77b5a04fb9b 100644
--- a/.ci/templates.t/pull-request-gradle-unix.yml
+++ b/.ci/templates.t/pull-request-gradle-unix.yml
@@ -1,9 +1,9 @@
---
- job:
- name: "elastic+elasticsearch+%BRANCH%+pull-request/elastic+elasticsearch+%BRANCH%+pull-request+{pr-job}"
- display-name: "elastic / elasticsearch # %BRANCH% - pull request {pr-job}"
+ name: "elastic+elasticsearch+pull-request+{pr-job}"
+ display-name: "elastic / elasticsearch - pull request {pr-job}"
description: "Testing of Elasticsearch pull requests - {pr-job}"
- workspace: "/dev/shm/elastic+elasticsearch+%BRANCH%+pull-request+{pr-job}"
+ workspace: "/dev/shm/elastic+elasticsearch+pull-request+{pr-job}"
scm:
- git:
refspec: "+refs/pull/${ghprbPullId}/*:refs/remotes/origin/pr/${ghprbPullId}/*"
@@ -18,9 +18,6 @@
github-hooks: true
status-context: elasticsearch-ci/{pr-job}
cancel-builds-on-update: true
- white-list-target-branches:
- - %BRANCH%
- - ^feat(ure)?/.*
excluded-regions:
- ^docs/.*
black-list-labels:
@@ -31,6 +28,8 @@
properties-content: |
JAVA_HOME=$HOME/.java/$ES_BUILD_JAVA
RUNTIME_JAVA_HOME=$HOME/.java/$ES_RUNTIME_JAVA
+ JAVA8_HOME=$HOME/.java/java8
+ JAVA11_HOME=$HOME/.java/java11
JAVA15_HOME=$HOME/.java/openjdk15
- shell: |
#!/usr/local/bin/runbld --redirect-stderr
diff --git a/.ci/views.t/views.yml b/.ci/views.t/views.yml
index 6d386193467ce..19ef490825a83 100644
--- a/.ci/views.t/views.yml
+++ b/.ci/views.t/views.yml
@@ -2,3 +2,7 @@
name: "Elasticsearch %BRANCH%"
view-type: list
regex: '^elastic[-+]elasticsearch\+%BRANCH%\+((?!multijob).)*$'
+- view:
+ name: "Elasticsearch Pull Requests"
+ view-type: list
+ regex: '^elastic[-+]elasticsearch\+pull[-+]request\+.*$'
diff --git a/.editorconfig b/.editorconfig
index 229c8667b1c6e..0c8a9dfd38ba2 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,5 +1,7 @@
# EditorConfig: http://editorconfig.org/
+# Options specific to IntelliJ are prefixed with `ij_`
+
root = true
[*]
@@ -8,24 +10,210 @@ trim_trailing_whitespace = true
insert_final_newline = true
indent_style = space
-# IntelliJ-specific options
-ij_java_class_count_to_use_import_on_demand = 999
-ij_java_names_count_to_use_import_on_demand = 999
-ij_java_imports_layout = *,|,com.**,|,org.**,|,java.**,javax.**,|,$*
+ij_formatter_off_tag = @formatter:off
+ij_formatter_on_tag = @formatter:on
+ij_formatter_tags_enabled = false
[*.gradle]
+ij_continuation_indent_size = 2
indent_size = 2
+max_line_length = 150
+
+[*.md]
+max_line_length = 80
[*.groovy]
indent_size = 4
+ij_continuation_indent_size = 4
max_line_length = 140
ij_groovy_class_count_to_use_import_on_demand = 999
ij_groovy_names_count_to_use_import_on_demand = 999
ij_groovy_imports_layout = *,|,com.**,|,org.**,|,java.**,javax.**,|,$*
+[{*.gradle,*.groovy}]
+ij_groovy_align_group_field_declarations = false
+ij_groovy_align_multiline_array_initializer_expression = false
+ij_groovy_align_multiline_assignment = false
+ij_groovy_align_multiline_binary_operation = false
+ij_groovy_align_multiline_chained_methods = false
+ij_groovy_align_multiline_extends_list = false
+ij_groovy_align_multiline_for = true
+ij_groovy_align_multiline_list_or_map = true
+ij_groovy_align_multiline_method_parentheses = false
+ij_groovy_align_multiline_parameters = true
+ij_groovy_align_multiline_parameters_in_calls = false
+ij_groovy_align_multiline_resources = true
+ij_groovy_align_multiline_ternary_operation = false
+ij_groovy_align_multiline_throws_list = false
+ij_groovy_align_named_args_in_map = true
+ij_groovy_align_throws_keyword = false
+ij_groovy_array_initializer_new_line_after_left_brace = true
+ij_groovy_array_initializer_right_brace_on_new_line = true
+ij_groovy_array_initializer_wrap = on_every_item
+ij_groovy_assert_statement_wrap = on_every_item
+ij_groovy_assignment_wrap = on_every_item
+ij_groovy_binary_operation_wrap = normal
+ij_groovy_blank_lines_after_class_header = 0
+ij_groovy_blank_lines_after_imports = 1
+ij_groovy_blank_lines_after_package = 1
+ij_groovy_blank_lines_around_class = 1
+ij_groovy_blank_lines_around_field = 0
+ij_groovy_blank_lines_around_field_in_interface = 0
+ij_groovy_blank_lines_around_method = 1
+ij_groovy_blank_lines_around_method_in_interface = 1
+ij_groovy_blank_lines_before_imports = 1
+ij_groovy_blank_lines_before_method_body = 0
+ij_groovy_blank_lines_before_package = 0
+ij_groovy_block_brace_style = end_of_line
+ij_groovy_block_comment_at_first_column = true
+ij_groovy_call_parameters_new_line_after_left_paren = true
+ij_groovy_call_parameters_right_paren_on_new_line = true
+ij_groovy_call_parameters_wrap = on_every_item
+ij_groovy_catch_on_new_line = false
+ij_groovy_class_annotation_wrap = split_into_lines
+ij_groovy_class_brace_style = end_of_line
+ij_groovy_do_while_brace_force = always
+ij_groovy_else_on_new_line = false
+ij_groovy_enum_constants_wrap = on_every_item
+ij_groovy_extends_keyword_wrap = normal
+ij_groovy_extends_list_wrap = on_every_item
+ij_groovy_field_annotation_wrap = split_into_lines
+ij_groovy_finally_on_new_line = false
+ij_groovy_for_brace_force = always
+ij_groovy_for_statement_new_line_after_left_paren = false
+ij_groovy_for_statement_right_paren_on_new_line = false
+ij_groovy_for_statement_wrap = off
+ij_groovy_if_brace_force = never
+ij_groovy_import_annotation_wrap = 2
+ij_groovy_imports_layout = *,com.**,|,org.**,|,java.**,javax.**,|,$*
+ij_groovy_indent_case_from_switch = true
+ij_groovy_indent_label_blocks = true
+ij_groovy_insert_inner_class_imports = false
+ij_groovy_keep_blank_lines_before_right_brace = 2
+ij_groovy_keep_blank_lines_in_code = 2
+ij_groovy_keep_blank_lines_in_declarations = 2
+ij_groovy_keep_control_statement_in_one_line = true
+ij_groovy_keep_first_column_comment = true
+ij_groovy_keep_indents_on_empty_lines = false
+ij_groovy_keep_line_breaks = true
+ij_groovy_keep_multiple_expressions_in_one_line = false
+ij_groovy_keep_simple_blocks_in_one_line = false
+ij_groovy_keep_simple_classes_in_one_line = true
+ij_groovy_keep_simple_lambdas_in_one_line = true
+ij_groovy_keep_simple_methods_in_one_line = true
+ij_groovy_label_indent_absolute = false
+ij_groovy_label_indent_size = 0
+ij_groovy_lambda_brace_style = end_of_line
+ij_groovy_layout_static_imports_separately = true
+ij_groovy_line_comment_add_space = false
+ij_groovy_line_comment_at_first_column = true
+ij_groovy_method_annotation_wrap = split_into_lines
+ij_groovy_method_brace_style = end_of_line
+ij_groovy_method_call_chain_wrap = off
+ij_groovy_method_parameters_new_line_after_left_paren = false
+ij_groovy_method_parameters_right_paren_on_new_line = false
+ij_groovy_method_parameters_wrap = on_every_item
+ij_groovy_modifier_list_wrap = false
+ij_groovy_names_count_to_use_import_on_demand = 3
+ij_groovy_parameter_annotation_wrap = off
+ij_groovy_parentheses_expression_new_line_after_left_paren = false
+ij_groovy_parentheses_expression_right_paren_on_new_line = false
+ij_groovy_prefer_parameters_wrap = false
+ij_groovy_resource_list_new_line_after_left_paren = false
+ij_groovy_resource_list_right_paren_on_new_line = false
+ij_groovy_resource_list_wrap = off
+ij_groovy_space_after_assert_separator = true
+ij_groovy_space_after_colon = true
+ij_groovy_space_after_comma = true
+ij_groovy_space_after_comma_in_type_arguments = true
+ij_groovy_space_after_for_semicolon = true
+ij_groovy_space_after_quest = true
+ij_groovy_space_after_type_cast = true
+ij_groovy_space_before_annotation_parameter_list = false
+ij_groovy_space_before_array_initializer_left_brace = true
+ij_groovy_space_before_assert_separator = false
+ij_groovy_space_before_catch_keyword = true
+ij_groovy_space_before_catch_left_brace = true
+ij_groovy_space_before_catch_parentheses = true
+ij_groovy_space_before_class_left_brace = true
+ij_groovy_space_before_closure_left_brace = true
+ij_groovy_space_before_colon = true
+ij_groovy_space_before_comma = false
+ij_groovy_space_before_do_left_brace = true
+ij_groovy_space_before_else_keyword = true
+ij_groovy_space_before_else_left_brace = true
+ij_groovy_space_before_finally_keyword = true
+ij_groovy_space_before_finally_left_brace = true
+ij_groovy_space_before_for_left_brace = true
+ij_groovy_space_before_for_parentheses = true
+ij_groovy_space_before_for_semicolon = false
+ij_groovy_space_before_if_left_brace = true
+ij_groovy_space_before_if_parentheses = true
+ij_groovy_space_before_method_call_parentheses = false
+ij_groovy_space_before_method_left_brace = true
+ij_groovy_space_before_method_parentheses = false
+ij_groovy_space_before_quest = true
+ij_groovy_space_before_switch_left_brace = true
+ij_groovy_space_before_switch_parentheses = true
+ij_groovy_space_before_synchronized_left_brace = true
+ij_groovy_space_before_synchronized_parentheses = true
+ij_groovy_space_before_try_left_brace = true
+ij_groovy_space_before_try_parentheses = true
+ij_groovy_space_before_while_keyword = true
+ij_groovy_space_before_while_left_brace = true
+ij_groovy_space_before_while_parentheses = true
+ij_groovy_space_in_named_argument = true
+ij_groovy_space_in_named_argument_before_colon = false
+ij_groovy_space_within_empty_array_initializer_braces = false
+ij_groovy_space_within_empty_method_call_parentheses = false
+ij_groovy_spaces_around_additive_operators = true
+ij_groovy_spaces_around_assignment_operators = true
+ij_groovy_spaces_around_bitwise_operators = true
+ij_groovy_spaces_around_equality_operators = true
+ij_groovy_spaces_around_lambda_arrow = true
+ij_groovy_spaces_around_logical_operators = true
+ij_groovy_spaces_around_multiplicative_operators = true
+ij_groovy_spaces_around_regex_operators = true
+ij_groovy_spaces_around_relational_operators = true
+ij_groovy_spaces_around_shift_operators = true
+ij_groovy_spaces_within_annotation_parentheses = false
+ij_groovy_spaces_within_array_initializer_braces = true
+ij_groovy_spaces_within_braces = true
+ij_groovy_spaces_within_brackets = false
+ij_groovy_spaces_within_cast_parentheses = false
+ij_groovy_spaces_within_catch_parentheses = false
+ij_groovy_spaces_within_for_parentheses = false
+ij_groovy_spaces_within_gstring_injection_braces = false
+ij_groovy_spaces_within_if_parentheses = false
+ij_groovy_spaces_within_list_or_map = false
+ij_groovy_spaces_within_method_call_parentheses = false
+ij_groovy_spaces_within_method_parentheses = false
+ij_groovy_spaces_within_parentheses = false
+ij_groovy_spaces_within_switch_parentheses = false
+ij_groovy_spaces_within_synchronized_parentheses = false
+ij_groovy_spaces_within_try_parentheses = false
+ij_groovy_spaces_within_tuple_expression = false
+ij_groovy_spaces_within_while_parentheses = false
+ij_groovy_special_else_if_treatment = true
+ij_groovy_ternary_operation_wrap = on_every_item
+ij_groovy_throws_keyword_wrap = off
+ij_groovy_throws_list_wrap = on_every_item
+ij_groovy_use_flying_geese_braces = false
+ij_groovy_use_fq_class_names = false
+ij_groovy_use_fq_class_names_in_javadoc = true
+ij_groovy_use_relative_indents = false
+ij_groovy_use_single_class_imports = true
+ij_groovy_variable_annotation_wrap = off
+ij_groovy_while_brace_force = always
+ij_groovy_while_on_new_line = false
+ij_groovy_wrap_long_lines = false
+
[*.java]
indent_size = 4
max_line_length = 140
+ij_java_class_count_to_use_import_on_demand = 999
+ij_java_names_count_to_use_import_on_demand = 999
+ij_java_imports_layout = *,|,com.**,|,org.**,|,java.**,javax.**,|,$*
[*.json]
indent_size = 2
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 5cf789707c58c..3f3eb5218afed 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -5,5 +5,6 @@
+
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 46963321a0960..3e08516f86814 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,7 +1,7 @@
Contributing to elasticsearch
=============================
-Elasticsearch is a free and open project and we love to receive contributions from our community — you! There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests or writing code which can be incorporated into Elasticsearch itself.
+Elasticsearch is a free and open project and we love to receive contributions from our community — you! There are many ways to contribute, from writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests or writing code which can be incorporated into Elasticsearch itself.
If you want to be rewarded for your contributions, sign up for the [Elastic Contributor Program](https://www.elastic.co/community/contributor). Each time you
make a valid contribution, you’ll earn points that increase your chances of winning prizes and being recognized as a top contributor.
@@ -38,14 +38,14 @@ Contributing code and documentation changes
-------------------------------------------
If you would like to contribute a new feature or a bug fix to Elasticsearch,
-please discuss your idea first on the Github issue. If there is no Github issue
+please discuss your idea first on the GitHub issue. If there is no GitHub issue
for your idea, please open one. It may be that somebody is already working on
it, or that there are particular complexities that you should know about before
starting the implementation. There are often a number of ways to fix a problem
and it is important to find the right approach before spending time on a PR
that cannot be merged.
-We add the `help wanted` label to existing Github issues for which community
+We add the `help wanted` label to existing GitHub issues for which community
contributions are particularly welcome, and we use the `good first issue` label
to mark issues that we think will be suitable for new contributors.
@@ -147,7 +147,6 @@ and then run `curl` in another window like this:
curl -u elastic:password localhost:9200
-
### Importing the project into IntelliJ IDEA
The minimum IntelliJ IDEA version required to import the Elasticsearch project is 2020.1
@@ -427,26 +426,25 @@ We require license headers on all Java files. With the exception of the
top-level `x-pack` directory, all contributed code should have the following
license header unless instructed otherwise:
- /*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
+ /*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
The top-level `x-pack` directory contains code covered by the [Elastic
license](licenses/ELASTIC-LICENSE-2.0.txt). Community contributions to this code are
welcome, and should have the following license header unless instructed
otherwise:
- /*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0; you may not use this file except in compliance with the Elastic License
- * 2.0.
- */
-
+ /*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0; you may not use this file except in compliance with the Elastic License
+ * 2.0.
+ */
It is important that the only code covered by the Elastic licence is contained
within the top-level `x-pack` directory. The build will fail its pre-commit
@@ -456,52 +454,63 @@ checks if contributed code does not have the appropriate license headers.
> be automatically configured to add the correct license header to new source
> files based on the source location.
+### Type-checking, generics and casting
+
+You should try to write code that does not require suppressing any warnings from
+the compiler, e.g. suppressing type-checking, raw generics, and so on. However,
+this isn't always possible or practical. In such cases, you should use the
+`@SuppressWarnings` annotations to silence the compiler warning, trying to keep
+the scope of the suppression as small as possible. Where a piece of code
+requires a lot of suppressions, it may be better to apply a single suppression
+at a higher level e.g. at the method or even class level. Use your judgement.
+
+There are also cases where the compiler simply refuses to accept an assignment
+or cast of any kind, because it lacks the information to know that the types are
+OK. In such cases, you can use
+the [`Types.forciblyCast`](libs/core/src/main/java/org/elasticsearch/core/Types.java)
+utility method. As the name suggests, you can coerce any type to any other type,
+so please use it as a last resort.
+
### Creating A Distribution
Run all build commands from within the root directory:
-```sh
-cd elasticsearch/
-```
+ cd elasticsearch/
To build a darwin-tar distribution, run this command:
-```sh
-./gradlew -p distribution/archives/darwin-tar assemble
-```
+ ./gradlew -p distribution/archives/darwin-tar assemble
You will find the distribution under:
-`./distribution/archives/darwin-tar/build/distributions/`
+
+ ./distribution/archives/darwin-tar/build/distributions/
To create all build artifacts (e.g., plugins and Javadocs) as well as
distributions in all formats, run this command:
-```sh
-./gradlew assemble
-```
+ ./gradlew assemble
-> **NOTE:** Running the task above will fail if you don't have a available
+> **NOTE:** Running the task above will fail if you don't have an available
> Docker installation.
The package distributions (Debian and RPM) can be found under:
-`./distribution/packages/(deb|rpm|oss-deb|oss-rpm)/build/distributions/`
+
+ ./distribution/packages/(deb|rpm|oss-deb|oss-rpm)/build/distributions/
The archive distributions (tar and zip) can be found under:
-`./distribution/archives/(darwin-tar|linux-tar|windows-zip|oss-darwin-tar|oss-linux-tar|oss-windows-zip)/build/distributions/`
+
+ ./distribution/archives/(darwin-tar|linux-tar|windows-zip|oss-darwin-tar|oss-linux-tar|oss-windows-zip)/build/distributions/
### Running The Full Test Suite
Before submitting your changes, run the test suite to make sure that nothing is broken, with:
-```sh
-./gradlew check
-```
+ ./gradlew check
If your changes affect only the documentation, run:
-```sh
-./gradlew -p docs check
-```
+ ./gradlew -p docs check
+
For more information about testing code examples in the documentation, see
https://github.com/elastic/elasticsearch/blob/master/docs/README.asciidoc
diff --git a/benchmarks/src/main/java/org/elasticsearch/benchmark/script/ScriptScoreBenchmark.java b/benchmarks/src/main/java/org/elasticsearch/benchmark/script/ScriptScoreBenchmark.java
index d0308d2166bfa..19829074d96f1 100644
--- a/benchmarks/src/main/java/org/elasticsearch/benchmark/script/ScriptScoreBenchmark.java
+++ b/benchmarks/src/main/java/org/elasticsearch/benchmark/script/ScriptScoreBenchmark.java
@@ -14,7 +14,6 @@
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
-import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
@@ -35,6 +34,8 @@
import org.elasticsearch.indices.breaker.NoneCircuitBreakerService;
import org.elasticsearch.plugins.PluginsService;
import org.elasticsearch.plugins.ScriptPlugin;
+import org.elasticsearch.script.DocReader;
+import org.elasticsearch.script.DocValuesDocReader;
import org.elasticsearch.script.ScoreScript;
import org.elasticsearch.script.ScriptModule;
import org.elasticsearch.search.lookup.SearchLookup;
@@ -79,7 +80,7 @@ public class ScriptScoreBenchmark {
private final ScriptModule scriptModule = new ScriptModule(Settings.EMPTY, pluginsService.filterPlugins(ScriptPlugin.class));
private final Map fieldTypes = Map.ofEntries(
- Map.entry("n", new NumberFieldType("n", NumberType.LONG, false, false, true, true, null, Map.of(), null))
+ Map.entry("n", new NumberFieldType("n", NumberType.LONG, false, false, true, true, null, Map.of(), null, false))
);
private final IndexFieldDataCache fieldDataCache = new IndexFieldDataCache.None();
private final CircuitBreakerService breakerService = new NoneCircuitBreakerService();
@@ -154,7 +155,7 @@ public TopDocs benchmark() throws IOException {
private Query scriptScoreQuery(ScoreScript.Factory factory) {
ScoreScript.LeafFactory leafFactory = factory.newFactory(Map.of(), lookup);
- return new ScriptScoreQuery(new MatchAllDocsQuery(), null, leafFactory, null, "test", 0, Version.CURRENT);
+ return new ScriptScoreQuery(new MatchAllDocsQuery(), null, leafFactory, lookup, null, "test", 0, Version.CURRENT);
}
private ScoreScript.Factory bareMetalScript() {
@@ -163,9 +164,9 @@ private ScoreScript.Factory bareMetalScript() {
IndexNumericFieldData ifd = (IndexNumericFieldData) lookup.getForField(type);
return new ScoreScript.LeafFactory() {
@Override
- public ScoreScript newInstance(LeafReaderContext ctx) throws IOException {
- SortedNumericDocValues values = ifd.load(ctx).getLongValues();
- return new ScoreScript(params, lookup, ctx) {
+ public ScoreScript newInstance(DocReader docReader) throws IOException {
+ SortedNumericDocValues values = ifd.load(((DocValuesDocReader) docReader).getLeafReaderContext()).getLongValues();
+ return new ScoreScript(params, null, docReader) {
private int docId;
@Override
diff --git a/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java b/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java
index d15c298fa689d..aa09ae4503095 100644
--- a/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java
+++ b/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/TermsReduceBenchmark.java
@@ -154,7 +154,7 @@ private StringTerms newTerms(Random rand, BytesRef[] dict, boolean withNested) {
true,
0,
buckets,
- 0
+ null
);
}
diff --git a/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/bucket/terms/StringTermsSerializationBenchmark.java b/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/bucket/terms/StringTermsSerializationBenchmark.java
index 66bb638c69f01..a5786b75e05cf 100644
--- a/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/bucket/terms/StringTermsSerializationBenchmark.java
+++ b/benchmarks/src/main/java/org/elasticsearch/benchmark/search/aggregations/bucket/terms/StringTermsSerializationBenchmark.java
@@ -70,7 +70,7 @@ private StringTerms newTerms(boolean withNested) {
false,
100000,
resultBuckets,
- 0
+ null
);
}
diff --git a/build-conventions/build.gradle b/build-conventions/build.gradle
index 2d0989fc77d99..c6bfe397e58cf 100644
--- a/build-conventions/build.gradle
+++ b/build-conventions/build.gradle
@@ -41,9 +41,9 @@ gradlePlugin {
id = 'elasticsearch.licensing'
implementationClass = 'org.elasticsearch.gradle.internal.conventions.LicensingPlugin'
}
- basics {
- id = 'elasticsearch.basic-build-tool-conventions'
- implementationClass = 'org.elasticsearch.gradle.internal.conventions.BasicBuildToolConventionsPlugin'
+ buildTools {
+ id = 'elasticsearch.build-tools'
+ implementationClass = 'org.elasticsearch.gradle.internal.conventions.BuildToolsConventionsPlugin'
}
}
}
@@ -60,7 +60,7 @@ dependencies {
compileOnly "com.puppycrawl.tools:checkstyle:8.42"
}
-project.getPlugins().withType(JavaBasePlugin.class, javaBasePlugin -> {
+project.getPlugins().withType(JavaBasePlugin.class) {
java.getModularity().getInferModulePath().set(false);
eclipse.getClasspath().getFile().whenMerged { classpath ->
/*
@@ -69,9 +69,8 @@ project.getPlugins().withType(JavaBasePlugin.class, javaBasePlugin -> {
* in the usual build folder because eclipse becomes *very* sad
* if we delete it. Which `gradlew clean` does all the time.
*/
- int i = 0;
- classpath.getEntries().stream().filter(e -> e instanceof SourceFolder).forEachOrdered(s ->
- s.setOutput("out/eclipse"+i++)
- )
+ classpath.getEntries().findAll{ s -> s instanceof SourceFolder }.eachWithIndex { s, i ->
+ s.setOutput("out/eclipse" + i)
+ }
}
-})
+}
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BasicBuildToolConventionsPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BuildToolsConventionsPlugin.java
similarity index 84%
rename from build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BasicBuildToolConventionsPlugin.java
rename to build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BuildToolsConventionsPlugin.java
index 2c0f95e880a46..a204af47b9878 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BasicBuildToolConventionsPlugin.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/BuildToolsConventionsPlugin.java
@@ -10,6 +10,7 @@
import org.elasticsearch.gradle.internal.conventions.info.ParallelDetector;
import org.elasticsearch.gradle.internal.conventions.util.Util;
+import org.elasticsearch.gradle.internal.conventions.precommit.LicenseHeadersPrecommitPlugin;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.tasks.bundling.Jar;
@@ -17,10 +18,11 @@
import java.io.File;
-public class BasicBuildToolConventionsPlugin implements Plugin {
+public class BuildToolsConventionsPlugin implements Plugin {
@Override
public void apply(Project project) {
+ project.getPlugins().apply(LicenseHeadersPrecommitPlugin.class);
int defaultParallel = ParallelDetector.findDefaultParallel(project);
project.getTasks().withType(Test.class).configureEach(test -> {
test.onlyIf((t) -> Util.getBooleanProperty("tests.fips.enabled", false) == false);
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/EclipseConventionPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/EclipseConventionPlugin.java
index f1b81b3915606..22b4516b15829 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/EclipseConventionPlugin.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/EclipseConventionPlugin.java
@@ -131,8 +131,8 @@ public void execute(Delete delete) {
}
private File root(Project project) {
- return project.getGradle().getParent() == null ?
- project.getRootDir() :
- root(project.getGradle().getParent().getRootProject());
+ return project.getRootProject().getName().equals("elasticsearch") ?
+ project.getRootProject().getRootDir() :
+ project.getRootDir().getParentFile();
}
}
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java
index 5b10053e7df73..79b80ea76b874 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java
@@ -18,35 +18,47 @@
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.XmlProvider;
+import org.gradle.api.file.ProjectLayout;
import org.gradle.api.plugins.BasePlugin;
-import org.gradle.api.plugins.BasePluginConvention;
+import org.gradle.api.plugins.BasePluginExtension;
+import org.gradle.api.plugins.ExtensionContainer;
import org.gradle.api.plugins.JavaLibraryPlugin;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.provider.MapProperty;
-import org.gradle.api.provider.Property;
-import org.gradle.api.provider.Provider;
+import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.publish.PublishingExtension;
import org.gradle.api.publish.maven.MavenPublication;
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
import org.gradle.api.publish.maven.tasks.GenerateMavenPom;
import org.gradle.api.tasks.SourceSet;
-import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.bundling.Jar;
+import org.gradle.initialization.layout.BuildLayout;
import org.gradle.language.base.plugins.LifecycleBasePlugin;
+import javax.inject.Inject;
import java.io.File;
import java.util.Map;
import java.util.concurrent.Callable;
public class PublishPlugin implements Plugin {
+ private ProjectLayout projectLayout;
+ private BuildLayout buildLayout;
+ private ProviderFactory providerFactory;
+
+ @Inject
+ public PublishPlugin(ProjectLayout projectLayout, BuildLayout buildLayout, ProviderFactory providerFactory) {
+ this.projectLayout = projectLayout;
+ this.buildLayout = buildLayout;
+ this.providerFactory = providerFactory;
+ }
+
@Override
public void apply(Project project) {
project.getPluginManager().apply(BasePlugin.class);
project.getPluginManager().apply(MavenPublishPlugin.class);
project.getPluginManager().apply(PomValidationPrecommitPlugin.class);
project.getPluginManager().apply(LicensingPlugin.class);
-
configureJavadocJar(project);
configureSourcesJar(project);
configurePomGeneration(project);
@@ -56,7 +68,6 @@ public void apply(Project project) {
private void configurePublications(Project project) {
var publishingExtension = project.getExtensions().getByType(PublishingExtension.class);
var publication = publishingExtension.getPublications().create("elastic", MavenPublication.class);
-
project.afterEvaluate(project1 -> {
if (project1.getPlugins().hasPlugin(ShadowPlugin.class)) {
configureWithShadowPlugin(project1, publication);
@@ -64,11 +75,11 @@ private void configurePublications(Project project) {
publication.from(project.getComponents().getByName("java"));
}
});
+ var projectLicenses = (MapProperty) project.getExtensions().getExtraProperties().get("projectLicenses");
publication.getPom().withXml(xml -> {
var node = xml.asNode();
node.appendNode("inceptionYear", "2009");
var licensesNode = node.appendNode("licenses");
- var projectLicenses = (MapProperty) project.getExtensions().getExtraProperties().get("projectLicenses");
projectLicenses.get().entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(entry -> {
Node license = licensesNode.appendNode("license");
license.appendNode("name", entry.getKey());
@@ -81,58 +92,59 @@ private void configurePublications(Project project) {
});
publishingExtension.getRepositories().maven(mavenArtifactRepository -> {
mavenArtifactRepository.setName("test");
- mavenArtifactRepository.setUrl(new File(project.getRootProject().getBuildDir(), "local-test-repo"));
+ mavenArtifactRepository.setUrl(new File(buildLayout.getRootDirectory(), "build/local-test-repo"));
});
}
- private static String getArchivesBaseName(Project project) {
- return project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName();
+ private static String getArchivesBaseName(ExtensionContainer extensions) {
+ return extensions.getByType(BasePluginExtension.class).getArchivesName().get();
}
/**
* Configuration generation of maven poms.
*/
- private static void configurePomGeneration(Project project) {
- Property gitInfo = project.getRootProject().getPlugins().apply(GitInfoPlugin.class).getGitInfo();
-
+ private void configurePomGeneration(Project project) {
+ var gitInfo = project.getRootProject().getPlugins().apply(GitInfoPlugin.class).getGitInfo();
var generatePomTask = project.getTasks().register("generatePom");
project.getTasks().named(LifecycleBasePlugin.ASSEMBLE_TASK_NAME).configure(assemble -> assemble.dependsOn(generatePomTask));
- project.getTasks()
- .withType(GenerateMavenPom.class)
- .configureEach(
- pomTask -> pomTask.setDestination(
- (Callable) () -> String.format(
- "%s/distributions/%s-%s.pom",
- project.getBuildDir(),
- getArchivesBaseName(project),
- project.getVersion()
- )
- )
- );
- var publishing = project.getExtensions().getByType(PublishingExtension.class);
+ var extensions = project.getExtensions();
+ var archivesBaseName = providerFactory.provider(() -> getArchivesBaseName(extensions));
+ var projectVersion = providerFactory.provider(() -> project.getVersion());
+ var generateMavenPoms = project.getTasks().withType(GenerateMavenPom.class);
+ generateMavenPoms.configureEach(
+ pomTask -> pomTask.setDestination(
+ (Callable) () -> String.format(
+ "%s/distributions/%s-%s.pom",
+ projectLayout.getBuildDirectory().get().getAsFile().getPath(),
+ archivesBaseName.get(),
+ projectVersion.get()
+ )
+ )
+ );
+ var publishing = extensions.getByType(PublishingExtension.class);
final var mavenPublications = publishing.getPublications().withType(MavenPublication.class);
addNameAndDescriptiontoPom(project, mavenPublications);
-
- mavenPublications.all(publication -> {
+ mavenPublications.configureEach(publication -> {
// Add git origin info to generated POM files for internal builds
- publication.getPom().withXml((xmlProvider) -> addScmInfo(xmlProvider, gitInfo.get()));
+ publication.getPom().withXml(xml -> addScmInfo(xml, gitInfo.get()));
// have to defer this until archivesBaseName is set
- project.afterEvaluate(p -> publication.setArtifactId(getArchivesBaseName(project)));
- generatePomTask.configure(t -> t.dependsOn(project.getTasks().withType(GenerateMavenPom.class)));
+ project.afterEvaluate(p -> publication.setArtifactId(archivesBaseName.get()));
+ generatePomTask.configure(t -> t.dependsOn(generateMavenPoms));
});
}
- private static void addNameAndDescriptiontoPom(Project project, NamedDomainObjectSet mavenPublications) {
- mavenPublications.all(p -> p.getPom().withXml(xml -> {
+ private void addNameAndDescriptiontoPom(Project project, NamedDomainObjectSet mavenPublications) {
+ var name = project.getName();
+ var description = providerFactory.provider(() -> project.getDescription() != null ? project.getDescription() : "");
+ mavenPublications.configureEach(p -> p.getPom().withXml(xml -> {
var root = xml.asNode();
- root.appendNode("name", project.getName());
- var description = project.getDescription() != null ? project.getDescription() : "";
- root.appendNode("description", description);
+ root.appendNode("name", name);
+ root.appendNode("description", description.get());
}));
}
private static void configureWithShadowPlugin(Project project, MavenPublication publication) {
- ShadowExtension shadow = project.getExtensions().getByType(ShadowExtension.class);
+ var shadow = project.getExtensions().getByType(ShadowExtension.class);
shadow.component(publication);
}
@@ -161,7 +173,7 @@ private static void configureJavadocJar(Project project) {
static void configureSourcesJar(Project project) {
project.getPlugins().withType(JavaLibraryPlugin.class, p -> {
- TaskProvider sourcesJarTask = project.getTasks().register("sourcesJar", Jar.class);
+ var sourcesJarTask = project.getTasks().register("sourcesJar", Jar.class);
sourcesJarTask.configure(jar -> {
jar.getArchiveClassifier().set("sources");
jar.setGroup("build");
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/VersionPropertiesLoader.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/VersionPropertiesLoader.java
index c7307ce98f65d..0b437abd4cb45 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/VersionPropertiesLoader.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/VersionPropertiesLoader.java
@@ -9,6 +9,8 @@
package org.elasticsearch.gradle.internal.conventions;
+import org.gradle.api.provider.ProviderFactory;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -17,7 +19,7 @@
// Define this here because we need it early.
public class VersionPropertiesLoader {
- static Properties loadBuildSrcVersion(File input) throws IOException {
+ static Properties loadBuildSrcVersion(File input, ProviderFactory providerFactory) throws IOException {
Properties props = new Properties();
InputStream is = new FileInputStream(input);
try {
@@ -25,11 +27,11 @@ static Properties loadBuildSrcVersion(File input) throws IOException {
} finally {
is.close();
}
- loadBuildSrcVersion(props, System.getProperties());
+ loadBuildSrcVersion(props, providerFactory);
return props;
}
- protected static void loadBuildSrcVersion(Properties loadedProps, Properties systemProperties) {
+ protected static void loadBuildSrcVersion(Properties loadedProps, ProviderFactory providers) {
String elasticsearch = loadedProps.getProperty("elasticsearch");
if (elasticsearch == null) {
throw new IllegalStateException("Elasticsearch version is missing from properties.");
@@ -40,14 +42,20 @@ protected static void loadBuildSrcVersion(Properties loadedProps, Properties sys
elasticsearch
);
}
- String qualifier = systemProperties.getProperty("build.version_qualifier", "");
+ String qualifier = providers.systemProperty("build.version_qualifier")
+ .orElse("")
+ .forUseAtConfigurationTime()
+ .get();
if (qualifier.isEmpty() == false) {
if (qualifier.matches("(alpha|beta|rc)\\d+") == false) {
throw new IllegalStateException("Invalid qualifier: " + qualifier);
}
elasticsearch += "-" + qualifier;
}
- final String buildSnapshotSystemProperty = systemProperties.getProperty("build.snapshot", "true");
+ final String buildSnapshotSystemProperty = providers.systemProperty("build.snapshot")
+ .orElse("true")
+ .forUseAtConfigurationTime()
+ .get();
switch (buildSnapshotSystemProperty) {
case "true":
elasticsearch += "-SNAPSHOT";
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/ParallelDetector.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/ParallelDetector.java
index c4c0cb8f46d4c..7359d1728b96c 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/ParallelDetector.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/info/ParallelDetector.java
@@ -9,6 +9,7 @@
package org.elasticsearch.gradle.internal.conventions.info;
import org.gradle.api.Project;
+import org.gradle.api.provider.ProviderFactory;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
@@ -58,7 +59,7 @@ public static int findDefaultParallel(Project project) {
throw new UncheckedIOException(e);
}
_defaultParallel = socketToCore.values().stream().mapToInt(i -> i).sum();
- } else if (isMac()) {
+ } else if (isMac(project.getProviders())) {
// Ask macOS to count physical CPUs for us
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
project.exec(spec -> {
@@ -76,8 +77,8 @@ public static int findDefaultParallel(Project project) {
return _defaultParallel;
}
- private static boolean isMac() {
- return System.getProperty("os.name", "").startsWith("Mac");
+ private static boolean isMac(ProviderFactory providers) {
+ return providers.systemProperty("os.name").forUseAtConfigurationTime().getOrElse("").startsWith("Mac");
}
}
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java
index e93c6bab74f04..11dca2953b245 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/LicenseHeadersPrecommitPlugin.java
@@ -11,7 +11,7 @@
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.plugins.JavaBasePlugin;
-import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskProvider;
@@ -29,7 +29,7 @@ public LicenseHeadersPrecommitPlugin(ProviderFactory providerFactory) {
public TaskProvider extends Task> createTask(Project project) {
return project.getTasks().register("licenseHeaders", LicenseHeadersTask.class, licenseHeadersTask -> {
project.getPlugins().withType(JavaBasePlugin.class, javaBasePlugin -> {
- final SourceSetContainer sourceSets = project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets();
+ final SourceSetContainer sourceSets = project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets();
licenseHeadersTask.getSourceFolders()
.addAll(providerFactory.provider(() -> sourceSets.stream().map(s -> s.getAllJava()).collect(Collectors.toList())));
});
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationPrecommitPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationPrecommitPlugin.java
index 0f7de8573e3cc..cf70cce6e166b 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationPrecommitPlugin.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PomValidationPrecommitPlugin.java
@@ -24,7 +24,7 @@ public class PomValidationPrecommitPlugin extends PrecommitPlugin {
public TaskProvider extends Task> createTask(Project project) {
TaskProvider validatePom = project.getTasks().register("validatePom");
PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
- publishing.getPublications().all(publication -> {
+ publishing.getPublications().configureEach(publication -> {
String publicationName = GUtils.capitalize(publication.getName());
TaskProvider validateTask = project.getTasks()
.register("validate" + publicationName + "Pom", PomValidationTask.class);
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitPlugin.java
index 6bf3cc5e93b95..e59ef2bd2b931 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitPlugin.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitPlugin.java
@@ -11,7 +11,7 @@
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
-import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.tasks.TaskProvider;
/**
@@ -29,7 +29,7 @@ public final void apply(Project project) {
precommit.configure(t -> t.dependsOn(task));
project.getPluginManager().withPlugin("java", p -> {
// We want to get any compilation error before running the pre-commit checks.
- project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(sourceSet ->
+ project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().all(sourceSet ->
task.configure(t -> t.shouldRunAfter(sourceSet.getClassesTaskName()))
);
});
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java
index 0493b30149bf3..f6a5db279792c 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/precommit/PrecommitTaskPlugin.java
@@ -12,7 +12,7 @@
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.plugins.JavaBasePlugin;
-import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.tasks.TaskProvider;
import org.gradle.api.tasks.testing.Test;
import org.gradle.language.base.plugins.LifecycleBasePlugin;
@@ -33,7 +33,7 @@ public void apply(Project project) {
);
project.getPluginManager().withPlugin("java", p -> {
// run compilation as part of precommit
- project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().all(sourceSet ->
+ project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().all(sourceSet ->
precommit.configure(t -> t.shouldRunAfter(sourceSet.getClassesTaskName()))
);
// make sure tests run after all precommit tasks
diff --git a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/Util.java b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/Util.java
index 3c90df54c0db5..05e4624d360d1 100644
--- a/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/Util.java
+++ b/build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/util/Util.java
@@ -12,14 +12,12 @@
import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.file.FileTree;
-import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.util.PatternFilterable;
import javax.annotation.Nullable;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.util.Optional;
import java.util.function.Supplier;
@@ -85,7 +83,7 @@ public static FileTree getJavaTestAndMainSourceResources(Project project, Action
* @return An Optional that contains the Java test SourceSet if it exists.
*/
public static Optional getJavaTestSourceSet(Project project) {
- return project.getConvention().findPlugin(JavaPluginConvention.class) == null
+ return project.getExtensions().findByName("java") == null
? Optional.empty()
: Optional.ofNullable(getJavaSourceSets(project).findByName(SourceSet.TEST_SOURCE_SET_NAME));
}
@@ -95,11 +93,15 @@ public static Optional getJavaTestSourceSet(Project project) {
* @return An Optional that contains the Java main SourceSet if it exists.
*/
public static Optional getJavaMainSourceSet(Project project) {
- return project.getConvention().findPlugin(JavaPluginConvention.class) == null
+ return isJavaExtensionAvailable(project)
? Optional.empty()
: Optional.ofNullable(getJavaSourceSets(project).findByName(SourceSet.MAIN_SOURCE_SET_NAME));
}
+ private static boolean isJavaExtensionAvailable(Project project) {
+ return project.getExtensions().getByType(JavaPluginExtension.class) == null;
+ }
+
public static Object toStringable(Supplier getter) {
return new Object() {
@@ -111,7 +113,7 @@ public String toString() {
}
public static SourceSetContainer getJavaSourceSets(Project project) {
- return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets();
+ return project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets();
}
}
diff --git a/build-tools-internal/build.gradle b/build-tools-internal/build.gradle
index 03c01a347e452..362e5f2d4bc23 100644
--- a/build-tools-internal/build.gradle
+++ b/build-tools-internal/build.gradle
@@ -17,8 +17,7 @@ plugins {
id 'java-gradle-plugin'
id 'groovy-gradle-plugin'
id 'groovy'
- id 'elasticsearch.internal-licenseheaders'
- id 'elasticsearch.basic-build-tool-conventions'
+ id 'elasticsearch.build-tools'
id 'elasticsearch.eclipse'
}
@@ -27,7 +26,7 @@ group = 'org.elasticsearch.gradle'
// we update the version property to reflect if we are building a snapshot or a release build
// we write this back out below to load it in the Build.java which will be shown in rest main action
// to indicate this being a snapshot build or a release build.
-Properties props = VersionPropertiesLoader.loadBuildSrcVersion(project.file('version.properties'))
+Properties props = VersionPropertiesLoader.loadBuildSrcVersion(project.file('version.properties'), project.getProviders())
version = props.getProperty("elasticsearch")
gradlePlugin {
@@ -111,6 +110,10 @@ gradlePlugin {
id = 'elasticsearch.jdk-download'
implementationClass = 'org.elasticsearch.gradle.internal.JdkDownloadPlugin'
}
+ releaseTools {
+ id = 'elasticsearch.release-tools'
+ implementationClass = 'org.elasticsearch.gradle.internal.release.ReleaseToolsPlugin'
+ }
repositories {
id = 'elasticsearch.repositories'
implementationClass = 'org.elasticsearch.gradle.internal.RepositoriesSetupPlugin'
@@ -166,14 +169,14 @@ gradlePlugin {
* Java version *
*****************************************************************************/
-if (JavaVersion.current() < JavaVersion.VERSION_11) {
- throw new GradleException('At least Java 11 is required to build elasticsearch gradle tools')
-}
-
def minCompilerJava = JavaVersion.toVersion(file('src/main/resources/minimumCompilerVersion').text)
targetCompatibility = minCompilerJava
sourceCompatibility = minCompilerJava
+if (JavaVersion.current() < JavaVersion.toVersion(minCompilerJava)) {
+ throw new GradleException("Java ${minCompilerJava} is required to build Elasticsearch but current Java is version ${JavaVersion.current()}.")
+}
+
sourceSets {
integTest {
compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
@@ -206,7 +209,7 @@ dependencies {
api gradleApi()
api "org.elasticsearch:build-conventions:$version"
- api "org.elasticsearch:build-tools:$version"
+ api "org.elasticsearch.gradle:build-tools:$version"
api 'commons-codec:commons-codec:1.12'
api 'org.apache.commons:commons-compress:1.19'
@@ -229,13 +232,14 @@ dependencies {
api "org.apache.httpcomponents:httpclient:${props.getProperty('httpclient')}"
api "org.apache.httpcomponents:httpcore:${props.getProperty('httpcore')}"
compileOnly "com.puppycrawl.tools:checkstyle:${props.getProperty('checkstyle')}"
+ runtimeOnly "org.elasticsearch.gradle:reaper:$version"
testImplementation "com.puppycrawl.tools:checkstyle:${props.getProperty('checkstyle')}"
testImplementation "junit:junit:${props.getProperty('junit')}"
testImplementation 'com.github.tomakehurst:wiremock-jre8-standalone:2.23.2'
testImplementation 'org.mockito:mockito-core:1.9.5'
testImplementation "org.hamcrest:hamcrest:${props.getProperty('hamcrest')}"
- testImplementation testFixtures("org.elasticsearch:build-tools:$version")
+ testImplementation testFixtures("org.elasticsearch.gradle:build-tools:$version")
integTestImplementation(platform("org.junit:junit-bom:${props.getProperty('junit5')}"))
integTestImplementation("org.junit.jupiter:junit-jupiter") {
diff --git a/build-tools-internal/gradle/wrapper/gradle-wrapper.properties b/build-tools-internal/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000..a211486a47110
--- /dev/null
+++ b/build-tools-internal/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-all.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionSha256Sum=9bb8bc05f562f2d42bdf1ba8db62f6b6fa1c3bf6c392228802cc7cb0578fe7e0
diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy
index 5372368fbd629..282f6b88ed2b4 100644
--- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy
+++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/fixtures/AbstractRestResourcesFuncTest.groovy
@@ -11,9 +11,9 @@ package org.elasticsearch.gradle.fixtures;
abstract class AbstractRestResourcesFuncTest extends AbstractGradleFuncTest {
- void setupRestResources(List apis, List tests = [], List xpackTests = []) {
+ def setup() {
addSubProject(":test:framework") << "apply plugin: 'elasticsearch.java'"
- addSubProject(":distribution:archives:integ-test-zip") << "configurations { extracted }"
+
addSubProject(":rest-api-spec") << """
configurations { restSpecs\nrestTests }
artifacts {
@@ -21,6 +21,7 @@ abstract class AbstractRestResourcesFuncTest extends AbstractGradleFuncTest {
restTests(new File(projectDir, "src/yamlRestTest/resources/rest-api-spec/test"))
}
"""
+
addSubProject(":x-pack:plugin") << """
configurations { restXpackSpecs\nrestXpackTests }
artifacts {
@@ -28,6 +29,11 @@ abstract class AbstractRestResourcesFuncTest extends AbstractGradleFuncTest {
}
"""
+ addSubProject(":distribution:archives:integ-test-zip") << "configurations { extracted }"
+ }
+
+ void setupRestResources(List apis, List tests = [], List xpackTests = []) {
+
xpackTests.each { test ->
file("x-pack/plugin/src/yamlRestTest/resources/rest-api-spec/test/" + test) << ""
}
diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy
index 9b9a9e9b70642..0b0ecb3d1ad5b 100644
--- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy
+++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy
@@ -17,6 +17,10 @@ import spock.lang.IgnoreRest
class PublishPluginFuncTest extends AbstractGradleFuncTest {
+ def setup() {
+ // required for JarHell to work
+ addSubProject(":libs:elasticsearch-core") << "apply plugin:'java'"
+ }
def "artifacts and tweaked pom is published"() {
given:
buildFile << """
diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy
index b69cd7312efa7..6db4a437a0296 100644
--- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy
+++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/RestResourcesPluginFuncTest.groovy
@@ -116,7 +116,7 @@ class RestResourcesPluginFuncTest extends AbstractRestResourcesFuncTest {
result.task(':copyYamlTestsTask').outcome == TaskOutcome.NO_SOURCE
file("/build/restResources/yamlSpecs/rest-api-spec/api/" + apiFoo).exists()
file("/build/restResources/yamlSpecs/rest-api-spec/api/" + apiXpackFoo).exists()
- file("/build/restResources/yamlSpecs/rest-api-spec/api/" + apiBar).exists() ==false
+ file("/build/restResources/yamlSpecs/rest-api-spec/api/" + apiBar).exists() == false
file("/build/restResources/yamlSpecs/rest-api-spec/api/" + apiXpackBar).exists() == false
}
@@ -136,6 +136,10 @@ class RestResourcesPluginFuncTest extends AbstractRestResourcesFuncTest {
includeXpack 'bar'
}
}
+
+ tasks.named("copyYamlTestsTask").configure {
+ it.substitutions = [ 'replacedValue' : 'replacedWithValue' ]
+ }
"""
String apiCore1 = "foo1.json"
String apiCore2 = "foo2.json"
@@ -143,6 +147,10 @@ class RestResourcesPluginFuncTest extends AbstractRestResourcesFuncTest {
String coreTest = "foo/10_basic.yml"
String xpackTest = "bar/10_basic.yml"
setupRestResources([apiCore1, apiCore2, apiXpack], [coreTest], [xpackTest])
+
+ // drop a value to replace from expansions above into a test file
+ file("rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/" + coreTest) << "@replacedValue@"
+
// intentionally not adding tests to project, they will be copied over via the plugin
// this tests that the test copy happens before the api copy since the api copy will only trigger if there are tests in the project
@@ -158,6 +166,9 @@ class RestResourcesPluginFuncTest extends AbstractRestResourcesFuncTest {
file("/build/restResources/yamlTests/rest-api-spec/test/" + coreTest).exists()
file("/build/restResources/yamlTests/rest-api-spec/test/" + xpackTest).exists()
+ // confirm that replacement happened
+ file("/build/restResources/yamlTests/rest-api-spec/test/" + coreTest).getText("UTF-8") == "replacedWithValue"
+
when:
result = gradleRunner("copyRestApiSpecsTask").build()
diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestCompatTestPluginFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestCompatTestPluginFuncTest.groovy
index d176f7897a681..9443590a1e432 100644
--- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestCompatTestPluginFuncTest.groovy
+++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/test/rest/YamlRestCompatTestPluginFuncTest.groovy
@@ -44,7 +44,7 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
"""
when:
- def result = gradleRunner("yamlRestCompatTest").build()
+ def result = gradleRunner("yamlRestCompatTest", '--stacktrace').build()
then:
result.task(':yamlRestCompatTest').outcome == TaskOutcome.NO_SOURCE
@@ -209,8 +209,11 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
task.replaceIsTrue("value_to_replace", "replaced_value")
task.replaceIsFalse("value_to_replace", "replaced_value")
task.replaceKeyInDo("do_.some.key_to_replace", "do_.some.key_that_was_replaced")
+ task.replaceKeyInDo("do_.some.key_to_replace_in_two", "do_.some.key_that_was_replaced_in_two", "two")
task.replaceKeyInMatch("match_.some.key_to_replace", "match_.some.key_that_was_replaced")
task.replaceKeyInLength("key.in_length_to_replace", "key.in_length_that_was_replaced")
+ task.replaceValueTextByKeyValue("keyvalue", "toreplace", "replacedkeyvalue")
+ task.replaceValueTextByKeyValue("index", "test", "test2", "two")
})
// can't actually spin up test cluster from this test
tasks.withType(Test).configureEach{ enabled = false }
@@ -224,6 +227,9 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
do_.some.key_to_replace:
index: test
id: 1
+ keyvalue : toreplace
+ do_.some.key_to_replace_in_two:
+ no_change_here: "because it's not in test 'two'"
warnings:
- "warning to remove"
- match: { _source.values: ["foo"] }
@@ -242,6 +248,8 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
get:
index: test
id: 1
+ do_.some.key_to_replace_in_two:
+ changed_here: "because it is in test 'two'"
- match: { _source.values: ["foo"] }
- match: { _type: "_foo" }
- match: { _source.blah: 1234 }
@@ -250,7 +258,12 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
- is_false: "value_to_replace"
- is_true: "value_not_to_replace"
- is_false: "value_not_to_replace"
-
+ ---
+ "use cat with no header":
+ - do:
+ cat.indices:
+ {}
+ - match: {}
""".stripIndent()
when:
def result = gradleRunner("yamlRestCompatTest").build()
@@ -279,6 +292,9 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
do_.some.key_that_was_replaced:
index: "test"
id: 1
+ keyvalue : replacedkeyvalue
+ do_.some.key_to_replace_in_two:
+ no_change_here: "because it's not in test 'two'"
warnings:
- "warning1"
- "warning2"
@@ -315,8 +331,10 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
two:
- do:
get:
- index: "test"
+ index: "test2"
id: 1
+ do_.some.key_that_was_replaced_in_two:
+ changed_here: "because it is in test 'two'"
headers:
Content-Type: "application/vnd.elasticsearch+json;compatible-with=7"
Accept: "application/vnd.elasticsearch+json;compatible-with=7"
@@ -337,6 +355,16 @@ class YamlRestCompatTestPluginFuncTest extends AbstractRestResourcesFuncTest {
- is_false: "replaced_value"
- is_true: "value_not_to_replace"
- is_false: "value_not_to_replace"
+ ---
+ "use cat with no header":
+ - do:
+ cat.indices:
+ {}
+ allowed_warnings:
+ - "added allowed warning"
+ allowed_warnings_regex:
+ - "added allowed warning regex .* [0-9]"
+ - match: {}
""".stripIndent()).readAll()
expectedAll.eachWithIndex{ ObjectNode expected, int i ->
diff --git a/build-tools-internal/src/main/groovy/elasticsearch.build-scan.gradle b/build-tools-internal/src/main/groovy/elasticsearch.build-scan.gradle
index 8db97612c2a35..c819bcc4beff4 100644
--- a/build-tools-internal/src/main/groovy/elasticsearch.build-scan.gradle
+++ b/build-tools-internal/src/main/groovy/elasticsearch.build-scan.gradle
@@ -22,7 +22,7 @@ buildScan {
String buildUrl = System.getenv('BUILD_URL')
String jobName = System.getenv('JOB_NAME')
String nodeName = System.getenv('NODE_NAME')
- String jobBranch = System.getenv('JOB_BRANCH')
+ String jobBranch = System.getenv('ghprbTargetBranch') ?: System.getenv('JOB_BRANCH')
tag OS.current().name()
tag Architecture.current().name()
diff --git a/build-tools-internal/src/main/groovy/elasticsearch.bwc-test.gradle b/build-tools-internal/src/main/groovy/elasticsearch.bwc-test.gradle
index 78d55797e5f63..6ebf9cb0a7250 100644
--- a/build-tools-internal/src/main/groovy/elasticsearch.bwc-test.gradle
+++ b/build-tools-internal/src/main/groovy/elasticsearch.bwc-test.gradle
@@ -34,5 +34,4 @@ tasks.withType(Test).configureEach {
}
tasks.matching { it.name.equals("check") }.configureEach {dependsOn(bwcTestSnapshots) }
-
tasks.matching { it.name.equals("test") }.configureEach {enabled = false}
diff --git a/build-tools-internal/src/main/groovy/elasticsearch.fips.gradle b/build-tools-internal/src/main/groovy/elasticsearch.fips.gradle
index 8af190367beb9..41288f627dcbc 100644
--- a/build-tools-internal/src/main/groovy/elasticsearch.fips.gradle
+++ b/build-tools-internal/src/main/groovy/elasticsearch.fips.gradle
@@ -9,6 +9,7 @@
import org.elasticsearch.gradle.internal.ExportElasticsearchBuildResourcesTask
import org.elasticsearch.gradle.internal.info.BuildParams
import org.elasticsearch.gradle.testclusters.TestDistribution
+import org.elasticsearch.gradle.testclusters.TestClustersAware
// Common config when running with a FIPS-140 runtime JVM
if (BuildParams.inFipsJvm) {
@@ -51,6 +52,9 @@ if (BuildParams.inFipsJvm) {
}
}
}
+ tasks.withType(TestClustersAware) {
+ dependsOn 'fipsResources'
+ }
testClusters.all {
setTestDistribution(TestDistribution.DEFAULT)
extraConfigFile "fips_java.security", fipsSecurity
@@ -72,7 +76,7 @@ if (BuildParams.inFipsJvm) {
}
}
project.tasks.withType(Test).configureEach { Test task ->
- task.dependsOn('fipsResources')
+ dependsOn 'fipsResources'
task.systemProperty('javax.net.ssl.trustStorePassword', 'password')
task.systemProperty('javax.net.ssl.keyStorePassword', 'password')
task.systemProperty('javax.net.ssl.trustStoreType', 'BCFKS')
diff --git a/build-tools-internal/src/main/groovy/elasticsearch.formatting.gradle b/build-tools-internal/src/main/groovy/elasticsearch.formatting.gradle
index 5aedded4897a9..709b2033fd7a0 100644
--- a/build-tools-internal/src/main/groovy/elasticsearch.formatting.gradle
+++ b/build-tools-internal/src/main/groovy/elasticsearch.formatting.gradle
@@ -218,7 +218,7 @@ subprojects {
target 'src/**/*.java'
}
- toggleOffOn('formatter:off', 'formatter:on') // use `formatter:off` and `formatter:on` to toggle formatting - ONLY IF STRICTLY NECESSARY
+ toggleOffOn('@formatter:off', '@formatter:on') // use `@formatter:off` and `@formatter:on` to toggle formatting - ONLY IF STRICTLY NECESSARY
removeUnusedImports()
importOrderFile rootProject.file('build-tools-internal/elastic.importorder')
eclipse().configFile rootProject.file('build-tools-internal/formatterConfig.xml')
@@ -235,7 +235,7 @@ subprojects {
// The `paddedCell()` option is disabled for normal operation so that any
// misbehaviour is detected, and not just suppressed. You can enabled the
// option from the command line by running Gradle with `-Dspotless.paddedcell`.
- if (System.getProperty('spotless.paddedcell') != null) {
+ if (providers.systemProperty('spotless.paddedcell').forUseAtConfigurationTime().isPresent()) {
paddedCell()
}
}
diff --git a/build-tools-internal/src/main/groovy/elasticsearch.ide.gradle b/build-tools-internal/src/main/groovy/elasticsearch.ide.gradle
index a4f9242747e52..a74347b96d820 100644
--- a/build-tools-internal/src/main/groovy/elasticsearch.ide.gradle
+++ b/build-tools-internal/src/main/groovy/elasticsearch.ide.gradle
@@ -69,7 +69,7 @@ tasks.register('configureIdeCheckstyle') {
}
// Applying this stuff, particularly the idea-ext plugin, has a cost so avoid it unless we're running in the IDE
-if (System.getProperty('idea.active') == 'true') {
+if (providers.systemProperty('idea.active').forUseAtConfigurationTime().getOrNull() == 'true') {
project.apply(plugin: org.jetbrains.gradle.ext.IdeaExtPlugin)
tasks.register('configureIdeaGradleJvm') {
@@ -118,7 +118,19 @@ if (System.getProperty('idea.active') == 'true') {
}
runConfigurations {
defaults(JUnit) {
- vmParameters = '-ea -Djava.locale.providers=SPI,COMPAT'
+ vmParameters = [
+ '-ea',
+ '-Djava.locale.providers=SPI,COMPAT',
+ "--illegal-access=deny",
+ // TODO: only open these for mockito when it is modularized
+ '--add-opens=java.base/java.security.cert=ALL-UNNAMED',
+ '--add-opens=java.base/java.nio.channels=ALL-UNNAMED',
+ '--add-opens=java.base/java.net=ALL-UNNAMED',
+ '--add-opens=java.base/javax.net.ssl=ALL-UNNAMED',
+ '--add-opens=java.base/java.nio.file=ALL-UNNAMED',
+ '--add-opens=java.base/java.time=ALL-UNNAMED',
+ '--add-opens=java.base/java.lang=ALL-UNNAMED'
+ ].join(' ')
}
}
copyright {
diff --git a/build-tools-internal/src/main/groovy/elasticsearch.run.gradle b/build-tools-internal/src/main/groovy/elasticsearch.run.gradle
index 92953ebbe01c5..ceb01909ebd3a 100644
--- a/build-tools-internal/src/main/groovy/elasticsearch.run.gradle
+++ b/build-tools-internal/src/main/groovy/elasticsearch.run.gradle
@@ -6,6 +6,7 @@
* Side Public License, v 1.
*/
+import org.elasticsearch.gradle.VersionProperties
import org.elasticsearch.gradle.testclusters.RunTask
// gradle has an open issue of failing applying plugins in
@@ -14,9 +15,9 @@ import org.elasticsearch.gradle.testclusters.RunTask
testClusters {
runTask {
- testDistribution = System.getProperty('run.distribution', 'default')
- if (System.getProperty('run.distribution', 'default') == 'default') {
- String licenseType = System.getProperty("run.license_type", "basic")
+ testDistribution = providers.systemProperty('run.distribution').orElse('default').forUseAtConfigurationTime().get()
+ if (providers.systemProperty('run.distribution').orElse('default').forUseAtConfigurationTime().get() == 'default') {
+ String licenseType = providers.systemProperty("run.license_type").orElse("basic").forUseAtConfigurationTime().get()
if (licenseType == 'trial') {
setting 'xpack.ml.enabled', 'true'
setting 'xpack.graph.enabled', 'true'
@@ -28,7 +29,6 @@ testClusters {
setting 'xpack.security.enabled', 'true'
keystore 'bootstrap.password', 'password'
user username: 'elastic-admin', password: 'elastic-password', role: 'superuser'
- systemProperty 'es.shutdown_feature_flag_enabled', 'true'
}
}
}
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java
index 776349f4cc1f7..1f29ae13822ba 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BuildPlugin.java
@@ -44,7 +44,6 @@ public void apply(final Project project) {
project.getPluginManager().apply(DependenciesGraphPlugin.class);
InternalPrecommitTasks.create(project, true);
- project.getPluginManager().apply(SplitPackagesAuditPrecommitPlugin.class);
}
public static void configureLicenseAndNotice(final Project project) {
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaBasePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaBasePlugin.java
new file mode 100644
index 0000000000000..0ee68adb699c4
--- /dev/null
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaBasePlugin.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+package org.elasticsearch.gradle.internal;
+
+import org.elasticsearch.gradle.VersionProperties;
+import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTaskPlugin;
+import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
+import org.elasticsearch.gradle.internal.info.BuildParams;
+import org.elasticsearch.gradle.util.GradleUtils;
+import org.gradle.api.Action;
+import org.gradle.api.JavaVersion;
+import org.gradle.api.Plugin;
+import org.gradle.api.Project;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.artifacts.ResolutionStrategy;
+import org.gradle.api.plugins.JavaBasePlugin;
+import org.gradle.api.plugins.JavaPlugin;
+import org.gradle.api.plugins.JavaPluginExtension;
+import org.gradle.api.provider.Provider;
+import org.gradle.api.tasks.SourceSet;
+import org.gradle.api.tasks.SourceSetContainer;
+import org.gradle.api.tasks.compile.AbstractCompile;
+import org.gradle.api.tasks.compile.CompileOptions;
+import org.gradle.api.tasks.compile.GroovyCompile;
+import org.gradle.api.tasks.compile.JavaCompile;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Stream;
+
+
+/**
+ * A wrapper around Gradle's Java Base plugin that applies our
+ * common configuration for production code.
+ */
+public class ElasticsearchJavaBasePlugin implements Plugin {
+ @Override
+ public void apply(Project project) {
+ // make sure the global build info plugin is applied to the root project
+ project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);
+ // common repositories setup
+ project.getPluginManager().apply(JavaBasePlugin.class);
+ project.getPluginManager().apply(RepositoriesSetupPlugin.class);
+ project.getPluginManager().apply(ElasticsearchTestBasePlugin.class);
+ project.getPluginManager().apply(PrecommitTaskPlugin.class);
+
+ configureCompile(project);
+ configureInputNormalization(project);
+
+ // convenience access to common versions used in dependencies
+ project.getExtensions().getExtraProperties().set("versions", VersionProperties.getVersions());
+ }
+
+ /**
+ * Adds compiler settings to the project
+ */
+ public static void configureCompile(Project project) {
+ project.getExtensions().getExtraProperties().set("compactProfile", "full");
+
+ JavaPluginExtension java = project.getExtensions().getByType(JavaPluginExtension.class);
+ java.setSourceCompatibility(BuildParams.getMinimumRuntimeVersion());
+ java.setTargetCompatibility(BuildParams.getMinimumRuntimeVersion());
+
+ project.afterEvaluate(p -> {
+ project.getTasks().withType(JavaCompile.class).configureEach(compileTask -> {
+ CompileOptions compileOptions = compileTask.getOptions();
+ /*
+ * -path because gradle will send in paths that don't always exist.
+ * -missing because we have tons of missing @returns and @param.
+ * -serial because we don't use java serialization.
+ */
+ // don't even think about passing args with -J-xxx, oracle will ask you to submit a bug report :)
+ // fail on all javac warnings.
+ // TODO Discuss moving compileOptions.getCompilerArgs() to use provider api with Gradle team.
+ List compilerArgs = compileOptions.getCompilerArgs();
+ compilerArgs.add("-Werror");
+ compilerArgs.add("-Xlint:all,-path,-serial,-options,-deprecation,-try");
+ compilerArgs.add("-Xdoclint:all");
+ compilerArgs.add("-Xdoclint:-missing");
+ // either disable annotation processor completely (default) or allow to enable them if an annotation processor is explicitly
+ // defined
+ if (compilerArgs.contains("-processor") == false) {
+ compilerArgs.add("-proc:none");
+ }
+
+ compileOptions.setEncoding("UTF-8");
+ compileOptions.setIncremental(true);
+ // workaround for https://github.com/gradle/gradle/issues/14141
+ compileTask.getConventionMapping().map("sourceCompatibility", () -> java.getSourceCompatibility().toString());
+ compileTask.getConventionMapping().map("targetCompatibility", () -> java.getTargetCompatibility().toString());
+ compileOptions.getRelease().set(releaseVersionProviderFromCompileTask(project, compileTask));
+ });
+ // also apply release flag to groovy, which is used in build-tools
+ project.getTasks().withType(GroovyCompile.class).configureEach(compileTask -> {
+ // TODO: this probably shouldn't apply to groovy at all?
+ compileTask.getOptions().getRelease().set(releaseVersionProviderFromCompileTask(project, compileTask));
+ });
+ });
+ }
+
+
+ /**
+ * Apply runtime classpath input normalization so that changes in JAR manifests don't break build cacheability
+ */
+ public static void configureInputNormalization(Project project) {
+ project.getNormalization().getRuntimeClasspath().ignore("META-INF/MANIFEST.MF");
+ }
+
+ private static Provider releaseVersionProviderFromCompileTask(Project project, AbstractCompile compileTask) {
+ return project.provider(() -> {
+ JavaVersion javaVersion = JavaVersion.toVersion(compileTask.getTargetCompatibility());
+ return Integer.parseInt(javaVersion.getMajorVersion());
+ });
+ }
+
+}
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java
index 88d552d8812c4..fe845e2012c70 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaPlugin.java
@@ -12,8 +12,6 @@
import nebula.plugin.info.InfoBrokerPlugin;
import org.elasticsearch.gradle.VersionProperties;
import org.elasticsearch.gradle.internal.info.BuildParams;
-import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
-import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTaskPlugin;
import org.elasticsearch.gradle.util.GradleUtils;
import org.elasticsearch.gradle.internal.conventions.util.Util;
import org.gradle.api.Action;
@@ -52,28 +50,20 @@
import static org.elasticsearch.gradle.internal.conventions.util.Util.toStringable;
/**
- * A wrapper around Gradle's Java plugin that applies our common configuration.
+ * A wrapper around Gradle's Java plugin that applies our
+ * common configuration for production code.
*/
public class ElasticsearchJavaPlugin implements Plugin {
@Override
public void apply(Project project) {
- // make sure the global build info plugin is applied to the root project
- project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);
- // common repositories setup
- project.getPluginManager().apply(RepositoriesSetupPlugin.class);
+ project.getPluginManager().apply(ElasticsearchJavaBasePlugin.class);
project.getPluginManager().apply(JavaLibraryPlugin.class);
- project.getPluginManager().apply(ElasticsearchTestBasePlugin.class);
- project.getPluginManager().apply(PrecommitTaskPlugin.class);
configureConfigurations(project);
- configureCompile(project);
- configureInputNormalization(project);
configureJars(project);
configureJarManifest(project);
configureJavadoc(project);
-
- // convenience access to common versions used in dependencies
- project.getExtensions().getExtraProperties().set("versions", VersionProperties.getVersions());
+ testCompileOnlyDeps(project);
}
/**
@@ -93,11 +83,6 @@ public void apply(Project project) {
* to iterate the transitive dependencies and add excludes.
*/
public static void configureConfigurations(Project project) {
- // we want to test compileOnly deps!
- Configuration compileOnlyConfig = project.getConfigurations().getByName(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME);
- Configuration testImplementationConfig = project.getConfigurations().getByName(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME);
- testImplementationConfig.extendsFrom(compileOnlyConfig);
-
// we are not shipping these jars, we act like dumb consumers of these things
if (project.getPath().startsWith(":test:fixtures") || project.getPath().equals(":build-tools")) {
return;
@@ -111,119 +96,57 @@ public static void configureConfigurations(Project project) {
configuration.resolutionStrategy(ResolutionStrategy::failOnVersionConflict);
});
- // force all dependencies added directly to compile/testImplementation to be non-transitive, except for ES itself
- Consumer disableTransitiveDeps = configName -> {
- Configuration config = project.getConfigurations().getByName(configName);
- config.getDependencies().all(dep -> {
- if (dep instanceof ModuleDependency
- && dep instanceof ProjectDependency == false
- && dep.getGroup().startsWith("org.elasticsearch") == false) {
- ((ModuleDependency) dep).setTransitive(false);
- }
- });
- };
-
// disable transitive dependency management
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
sourceSets.all(sourceSet -> disableTransitiveDependenciesForSourceSet(project, sourceSet));
}
- /**
- * Adds compiler settings to the project
- */
- public static void configureCompile(Project project) {
- project.getExtensions().getExtraProperties().set("compactProfile", "full");
-
- JavaPluginExtension java = project.getExtensions().getByType(JavaPluginExtension.class);
- java.setSourceCompatibility(BuildParams.getMinimumRuntimeVersion());
- java.setTargetCompatibility(BuildParams.getMinimumRuntimeVersion());
-
- project.afterEvaluate(p -> {
- project.getTasks().withType(JavaCompile.class).configureEach(compileTask -> {
- CompileOptions compileOptions = compileTask.getOptions();
- /*
- * -path because gradle will send in paths that don't always exist.
- * -missing because we have tons of missing @returns and @param.
- * -serial because we don't use java serialization.
- */
- // don't even think about passing args with -J-xxx, oracle will ask you to submit a bug report :)
- // fail on all javac warnings.
- // TODO Discuss moving compileOptions.getCompilerArgs() to use provider api with Gradle team.
- List compilerArgs = compileOptions.getCompilerArgs();
- compilerArgs.add("-Werror");
- compilerArgs.add("-Xlint:all,-path,-serial,-options,-deprecation,-try");
- compilerArgs.add("-Xdoclint:all");
- compilerArgs.add("-Xdoclint:-missing");
- // either disable annotation processor completely (default) or allow to enable them if an annotation processor is explicitly
- // defined
- if (compilerArgs.contains("-processor") == false) {
- compilerArgs.add("-proc:none");
- }
-
- compileOptions.setEncoding("UTF-8");
- compileOptions.setIncremental(true);
- // workaround for https://github.com/gradle/gradle/issues/14141
- compileTask.getConventionMapping().map("sourceCompatibility", () -> java.getSourceCompatibility().toString());
- compileTask.getConventionMapping().map("targetCompatibility", () -> java.getTargetCompatibility().toString());
- compileOptions.getRelease().set(releaseVersionProviderFromCompileTask(project, compileTask));
- });
- // also apply release flag to groovy, which is used in build-tools
- project.getTasks().withType(GroovyCompile.class).configureEach(compileTask -> {
- // TODO: this probably shouldn't apply to groovy at all?
- compileTask.getOptions().getRelease().set(releaseVersionProviderFromCompileTask(project, compileTask));
- });
- });
- }
-
- private static Provider releaseVersionProviderFromCompileTask(Project project, AbstractCompile compileTask) {
- return project.provider(() -> {
- JavaVersion javaVersion = JavaVersion.toVersion(compileTask.getTargetCompatibility());
- return Integer.parseInt(javaVersion.getMajorVersion());
- });
- }
-
- /**
- * Apply runtime classpath input normalization so that changes in JAR manifests don't break build cacheability
- */
- public static void configureInputNormalization(Project project) {
- project.getNormalization().getRuntimeClasspath().ignore("META-INF/MANIFEST.MF");
+ private static void testCompileOnlyDeps(Project project) {
+ // we want to test compileOnly deps!
+ Configuration compileOnlyConfig = project.getConfigurations().getByName(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME);
+ Configuration testImplementationConfig = project.getConfigurations().getByName(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME);
+ testImplementationConfig.extendsFrom(compileOnlyConfig);
}
/**
* Adds additional manifest info to jars
*/
static void configureJars(Project project) {
- project.getTasks().withType(Jar.class).configureEach(jarTask -> {
- // we put all our distributable files under distributions
- jarTask.getDestinationDirectory().set(new File(project.getBuildDir(), "distributions"));
- // fixup the jar manifest
- // Explicitly using an Action interface as java lambdas
- // are not supported by Gradle up-to-date checks
- jarTask.doFirst(new Action() {
- @Override
- public void execute(Task task) {
- // this doFirst is added before the info plugin, therefore it will run
- // after the doFirst added by the info plugin, and we can override attributes
- jarTask.getManifest()
- .attributes(
- Map.of("Build-Date", BuildParams.getBuildDate(), "Build-Java-Version", BuildParams.getGradleJavaVersion())
- );
- }
- });
- });
+ project.getTasks().withType(Jar.class).configureEach(
+ jarTask -> {
+ // we put all our distributable files under distributions
+ jarTask.getDestinationDirectory().set(new File(project.getBuildDir(), "distributions"));
+ // fixup the jar manifest
+ // Explicitly using an Action interface as java lambdas
+ // are not supported by Gradle up-to-date checks
+ jarTask.doFirst(new Action() {
+ @Override
+ public void execute(Task task) {
+ // this doFirst is added before the info plugin, therefore it will run
+ // after the doFirst added by the info plugin, and we can override attributes
+ jarTask.getManifest()
+ .attributes(
+ Map.of("Build-Date", BuildParams.getBuildDate(), "Build-Java-Version", BuildParams.getGradleJavaVersion()
+ )
+ );
+ }
+ });
+ }
+ );
project.getPluginManager().withPlugin("com.github.johnrengelman.shadow", p -> {
project.getTasks().withType(ShadowJar.class).configureEach(shadowJar -> {
- /*
- * Replace the default "-all" classifier with null
- * which will leave the classifier off of the file name.
- */
- shadowJar.getArchiveClassifier().set((String) null);
- /*
- * Not all cases need service files merged but it is
- * better to be safe
- */
- shadowJar.mergeServiceFiles();
- });
+ /*
+ * Replace the default "-all" classifier with null
+ * which will leave the classifier off of the file name.
+ */
+ shadowJar.getArchiveClassifier().set((String) null);
+ /*
+ * Not all cases need service files merged but it is
+ * better to be safe
+ */
+ shadowJar.mergeServiceFiles();
+ }
+ );
// Add "original" classifier to the non-shadowed JAR to distinguish it from the shadow JAR
project.getTasks().named(JavaPlugin.JAR_TASK_NAME, Jar.class).configure(jar -> jar.getArchiveClassifier().set("original"));
// Make sure we assemble the shadow jar
@@ -273,6 +196,7 @@ private static void disableTransitiveDependenciesForSourceSet(Project project, S
Stream.of(
sourceSet.getApiConfigurationName(),
sourceSet.getImplementationConfigurationName(),
+ sourceSet.getImplementationConfigurationName(),
sourceSet.getCompileOnlyConfigurationName(),
sourceSet.getRuntimeOnlyConfigurationName()
)
@@ -280,4 +204,5 @@ private static void disableTransitiveDependenciesForSourceSet(Project project, S
.filter(Objects::nonNull)
.forEach(GradleUtils::disableTransitiveDependencies);
}
+
}
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java
index 419f35fc7a91e..78fe3412c4a6f 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java
@@ -11,7 +11,8 @@
import com.github.jengelman.gradle.plugins.shadow.ShadowBasePlugin;
import org.elasticsearch.gradle.OS;
import org.elasticsearch.gradle.internal.test.SimpleCommandLineArgumentProvider;
-import org.elasticsearch.gradle.internal.test.SystemPropertyCommandLineArgumentProvider;
+import org.elasticsearch.gradle.test.GradleTestPolicySetupPlugin;
+import org.elasticsearch.gradle.test.SystemPropertyCommandLineArgumentProvider;
import org.elasticsearch.gradle.internal.info.BuildParams;
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
import org.elasticsearch.gradle.internal.test.ErrorReportingTestListener;
@@ -22,6 +23,7 @@
import org.gradle.api.Task;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.file.FileCollection;
+import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.testing.Test;
@@ -39,6 +41,7 @@ public class ElasticsearchTestBasePlugin implements Plugin {
@Override
public void apply(Project project) {
+ project.getPluginManager().apply(GradleTestPolicySetupPlugin.class);
// for fips mode check
project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);
// Default test task should run only unit tests
@@ -117,12 +120,8 @@ public void execute(Task t) {
Map sysprops = Map.of(
"java.awt.headless",
"true",
- "tests.gradle",
- "true",
"tests.artifact",
project.getName(),
- "tests.task",
- test.getPath(),
"tests.security.manager",
"true",
"jna.nosys",
@@ -138,14 +137,8 @@ public void execute(Task t) {
}
// don't track these as inputs since they contain absolute paths and break cache relocatability
- File gradleHome = project.getGradle().getGradleUserHomeDir();
- String gradleVersion = project.getGradle().getGradleVersion();
- nonInputProperties.systemProperty("gradle.dist.lib", new File(project.getGradle().getGradleHomeDir(), "lib"));
- nonInputProperties.systemProperty(
- "gradle.worker.jar",
- gradleHome + "/caches/" + gradleVersion + "/workerMain/gradle-worker.jar"
- );
- nonInputProperties.systemProperty("gradle.user.home", gradleHome);
+ File gradleUserHome = project.getGradle().getGradleUserHomeDir();
+ nonInputProperties.systemProperty("gradle.user.home", gradleUserHome);
// we use 'temp' relative to CWD since this is per JVM and tests are forbidden from writing to CWD
nonInputProperties.systemProperty("java.io.tmpdir", test.getWorkingDir().toPath().resolve("temp"));
@@ -187,17 +180,17 @@ public void execute(Task t) {
* compiled class output and dependency jars. This better emulates the runtime environment of consumers.
*/
project.getPluginManager().withPlugin("com.github.johnrengelman.shadow", p -> {
- // Remove output class files and any other dependencies from the test classpath, since the shadow JAR includes these
- FileCollection mainRuntime = project.getExtensions()
- .getByType(SourceSetContainer.class)
- .getByName(SourceSet.MAIN_SOURCE_SET_NAME)
- .getRuntimeClasspath();
- // Add any "shadow" dependencies. These are dependencies that are *not* bundled into the shadow JAR
- Configuration shadowConfig = project.getConfigurations().getByName(ShadowBasePlugin.getCONFIGURATION_NAME());
- // Add the shadow JAR artifact itself
- FileCollection shadowJar = project.files(project.getTasks().named("shadowJar"));
-
- test.setClasspath(test.getClasspath().minus(mainRuntime).plus(shadowConfig).plus(shadowJar));
+ if (test.getName().equals(JavaPlugin.TEST_TASK_NAME)) {
+ // Remove output class files and any other dependencies from the test classpath, since the shadow JAR includes these
+ SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
+ FileCollection mainRuntime = sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).getRuntimeClasspath();
+ // Add any "shadow" dependencies. These are dependencies that are *not* bundled into the shadow JAR
+ Configuration shadowConfig = project.getConfigurations().getByName(ShadowBasePlugin.getCONFIGURATION_NAME());
+ // Add the shadow JAR artifact itself
+ FileCollection shadowJar = project.files(project.getTasks().named("shadowJar"));
+ FileCollection testRuntime = sourceSets.getByName(SourceSet.TEST_SOURCE_SET_NAME).getRuntimeClasspath();
+ test.setClasspath(testRuntime.minus(mainRuntime).plus(shadowConfig).plus(shadowJar));
+ }
});
});
}
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java
index a5c69de5c801c..b5b3891abcb95 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java
@@ -39,8 +39,6 @@
*/
public class InternalDistributionDownloadPlugin implements InternalPlugin {
- private BwcVersions bwcVersions = null;
-
@Override
public void apply(Project project) {
// this is needed for isInternal
@@ -54,7 +52,6 @@ public void apply(Project project) {
distributionDownloadPlugin.setDockerAvailability(
dockerSupport.map(dockerSupportService -> dockerSupportService.getDockerAvailability().isAvailable)
);
- this.bwcVersions = BuildParams.getBwcVersions();
registerInternalDistributionResolutions(DistributionDownloadPlugin.getRegistrationsContainer(project));
}
@@ -78,7 +75,7 @@ private void registerInternalDistributionResolutions(NamedDomainObjectContainer<
}));
resolutions.register("bwc", distributionResolution -> distributionResolution.setResolver((project, distribution) -> {
- BwcVersions.UnreleasedVersionInfo unreleasedInfo = bwcVersions.unreleasedInfo(Version.fromString(distribution.getVersion()));
+ BwcVersions.UnreleasedVersionInfo unreleasedInfo = BuildParams.getBwcVersions().unreleasedInfo(Version.fromString(distribution.getVersion()));
if (unreleasedInfo != null) {
if (distribution.getBundledJdk() == false) {
throw new GradleException(
@@ -109,7 +106,6 @@ private static String getProjectConfig(ElasticsearchDistribution distribution, B
} else {
return distributionProjectName;
}
-
}
private static String distributionProjectPath(ElasticsearchDistribution distribution) {
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/MavenFilteringHack.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/MavenFilteringHack.java
deleted file mode 100644
index c6f5fed322e5b..0000000000000
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/MavenFilteringHack.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
- * or more contributor license agreements. Licensed under the Elastic License
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
- * in compliance with, at your election, the Elastic License 2.0 or the Server
- * Side Public License, v 1.
- */
-package org.elasticsearch.gradle.internal;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.apache.tools.ant.filters.ReplaceTokens;
-import org.gradle.api.file.CopySpec;
-
-/**
- * Gradle provides "expansion" functionality using groovy's SimpleTemplatingEngine (TODO: check name).
- * However, it allows substitutions of the form {@code $foo} (no curlies). Rest tests provide
- * some substitution from the test runner, which this form is used for.
- *
- * This class provides a helper to do maven filtering, where only the form {@code $\{foo\}} is supported.
- *
- * TODO: we should get rid of this hack, and make the rest tests use some other identifier
- * for builtin vars
- */
-public class MavenFilteringHack {
- /**
- * Adds a filter to the given copy spec that will substitute maven variables.
- *
- */
- static void filter(CopySpec copySpec, Map