diff --git a/.gitattributes b/.gitattributes index 6baf50c6..7994c7c6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,13 +1,10 @@ *.sh text eol=lf - .github/workflows/broken_links_checker.yml linguist-generated=true .github/workflows/dependencies_check.yml linguist-generated=true .github/workflows/release_droid_print_quick_checksum.yml linguist-generated=true - -dependencies.md linguist-generated=true -pk_generated_parent.pom linguist-generated=true -doc/changes/changelog.md linguist-generated=true -extension/package-lock.json linguist-generated=true - -.settings/org.eclipse.jdt.core.prefs linguist-generated=true -.settings/org.eclipse.jdt.ui.prefs linguist-generated=true +.settings/org.eclipse.jdt.core.prefs linguist-generated=true +.settings/org.eclipse.jdt.ui.prefs linguist-generated=true +dependencies.md linguist-generated=true +doc/changes/changelog.md linguist-generated=true +extension/package-lock.json linguist-generated=true +pk_generated_parent.pom linguist-generated=true diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 1aa13657..f1b32d1b 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -8,17 +8,17 @@ on: jobs: build: - name: Build with Exasol ${{ matrix.exasol-docker-version }} + name: Build with Exasol ${{ matrix.exasol_db_version }} runs-on: ubuntu-20.04 # UDFs fail with "VM error: Internal error: VM crashed" on ubuntu-latest concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-exasol-${{ matrix.exasol-docker-version }} + group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.exasol_db_version }} cancel-in-progress: true strategy: fail-fast: false matrix: - exasol-docker-version: ["7.1.23"] + exasol_db_version: ["7.1.23", "8.23.0"] env: - DEFAULT_DOCKER_DB_VERSION: "7.1.23" + DEFAULT_EXASOL_DB_VERSION: "8.23.0" steps: - name: Free Disk Space run: | @@ -64,25 +64,32 @@ jobs: - name: Run scalafix linting run: mvn --batch-mode clean compile test-compile scalastyle:check scalafix:scalafix - name: Run tests and build with Maven - run: | - JAVA_HOME=$JAVA_HOME_11_X64 mvn --batch-mode clean verify \ - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ - -DtrimStackTrace=false \ - -Dcom.exasol.dockerdb.image=${{ matrix.exasol-docker-version }} + run: > + JAVA_HOME=$JAVA_HOME_11_X64 + mvn --batch-mode clean verify + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -DtrimStackTrace=false + -Dcom.exasol.dockerdb.image=${{ matrix.exasol_db_version }} + env: + # Passing system property via -Dcom.exasol.dockerdb.image does not work because the scalatest plugin does + # not forward it to the test. So we use this environment variable, + # see BaseIntegrationTest.scala.getExasolDockerImageVersion() + EXASOL_DB_VERSION: ${{ matrix.exasol_db_version }} - name: Publish Test Report uses: scacap/action-surefire-report@v1 if: ${{ always() && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' }} with: github_token: ${{ secrets.GITHUB_TOKEN }} - name: Sonar analysis - if: ${{ env.SONAR_TOKEN != null && matrix.exasol-docker-version == env.DEFAULT_DOCKER_DB_VERSION }} - run: | - JAVA_HOME=$JAVA_HOME_17_X64 mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ - -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ - -DtrimStackTrace=false \ - -Dsonar.organization=exasol \ - -Dsonar.host.url=https://sonarcloud.io \ - -Dsonar.token=$SONAR_TOKEN + if: ${{ env.SONAR_TOKEN != null && matrix.exasol_db_version == env.DEFAULT_EXASOL_DB_VERSION }} + run: > + JAVA_HOME=$JAVA_HOME_17_X64 + mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + -DtrimStackTrace=false + -Dsonar.organization=exasol + -Dsonar.host.url=https://sonarcloud.io + -Dsonar.token=$SONAR_TOKEN env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.gitignore b/.gitignore index b7fc9602..5fda6826 100644 --- a/.gitignore +++ b/.gitignore @@ -47,6 +47,8 @@ tmp/ /.settings/org.eclipse.core.resources.prefs /.settings/org.eclipse.jdt.apt.core.prefs /.settings/org.eclipse.m2e.core.prefs +/.settings/org.moreunit.prefs +/.settings/org.sonarlint.eclipse.core.prefs # Ensime .ensime diff --git a/.project-keeper.yml b/.project-keeper.yml index 1c365d2a..92ab7bcc 100644 --- a/.project-keeper.yml +++ b/.project-keeper.yml @@ -9,16 +9,6 @@ sources: version: fromSource: pom.xml linkReplacements: - - "http://wiki.fasterxml.com/JacksonModuleScala|https://github.com/FasterXML/jackson-module-scala" - - "https://netty.io/netty-all/|https://netty.io/" - - "https://www.alluxio.io/alluxio-core/alluxio-core-client/alluxio-core-client-hdfs/|https://www.alluxio.io" - - "https://developers.google.com/protocol-buffers/protobuf-java/|https://github.com/protocolbuffers/protobuf/tree/main/java" - - "https://github.com/GoogleCloudPlatform/BigData-interop/gcs-connector/|https://github.com/GoogleCloudDataproc/hadoop-connectors/tree/master/gcs" - - "https://github.com/googleapis/google-oauth-java-client/google-oauth-client|https://github.com/googleapis/google-oauth-java-client" - - "https://orc.apache.org/orc-core|https://orc.apache.org/" - - "http://jackson.codehaus.org|https://github.com/codehaus/jackson" - - "http://nexus.sonatype.org/oss-repository-hosting.html/scalatest-maven-plugin|https://github.com/scalatest/scalatest-maven-plugin" - - "https://logging.apache.org/log4j/2.x/log4j-1.2-api/|https://logging.apache.org/log4j/2.x/" excludes: - "E-PK-CORE-18: Outdated content: '.github/workflows/ci-build.yml'" - "E-PK-CORE-18: Outdated content: '.github/workflows/ci-build-next-java.yml'" diff --git a/dependencies.md b/dependencies.md index c79c6f66..56bbf098 100644 --- a/dependencies.md +++ b/dependencies.md @@ -17,81 +17,78 @@ | [error-reporting-java][13] | [MIT License][14] | | Apache Hadoop Common | [Apache License, Version 2.0][3] | | Apache Hadoop Amazon Web Services support | [Apache License, Version 2.0][3] | +| [Apache ZooKeeper - Server][15] | [Apache License, Version 2.0][3] | | Apache Hadoop Azure support | [Apache License, Version 2.0][3] | | Apache Hadoop Azure Data Lake support | [Apache License, Version 2.0][3] | | Apache Hadoop HDFS | [Apache License, Version 2.0][3] | | Apache Hadoop HDFS Client | [Apache License, Version 2.0][3] | -| [Kotlin Stdlib][15] | [The Apache License, Version 2.0][5] | -| [Alluxio Core - Client - HDFS][16] | [Apache License][17] | -| [Metrics Core][18] | [Apache License 2.0][10] | -| [Protocol Buffers [Core]][19] | [BSD-3-Clause][20] | -| [gcs-connector-hadoop3][21] | [Apache License, Version 2.0][5] | -| [Google OAuth Client Library for Java][22] | [The Apache Software License, Version 2.0][3] | -| [ORC Core][23] | [Apache License, Version 2.0][3] | -| [Apache Avro][24] | [Apache-2.0][3] | -| [Apache Commons Compress][25] | [Apache-2.0][3] | -| [delta-core][26] | [Apache-2.0][27] | -| [Spark Project SQL][28] | [Apache 2.0 License][29] | -| [Apache Ivy][30] | [The Apache Software License, Version 2.0][5] | -| [Parquet for Java][31] | [MIT License][32] | -| [JUL to SLF4J bridge][33] | [MIT License][34] | -| [SLF4J Reload4j Provider][35] | [MIT License][34] | -| [Apache Log4j API][36] | [Apache License, Version 2.0][3] | -| [Apache Log4j 1.x Compatibility API][37] | [Apache License, Version 2.0][3] | -| [Apache Log4j Core][38] | [Apache License, Version 2.0][3] | -| [scala-logging][39] | [Apache 2.0 License][29] | +| [Kotlin Stdlib][16] | [The Apache License, Version 2.0][5] | +| [Alluxio Core - Client - HDFS][17] | [Apache License][18] | +| [Metrics Core][19] | [Apache License 2.0][10] | +| [Protocol Buffers [Core]][20] | [BSD-3-Clause][21] | +| [gcs-connector-hadoop3][22] | [Apache License, Version 2.0][5] | +| [Google OAuth Client Library for Java][23] | [The Apache Software License, Version 2.0][3] | +| [ORC Core][24] | [Apache License, Version 2.0][3] | +| [Apache Avro][25] | [Apache-2.0][3] | +| [Apache Commons Compress][26] | [Apache-2.0][3] | +| [delta-core][27] | [Apache-2.0][28] | +| [Spark Project SQL][29] | [Apache 2.0 License][30] | +| [Apache Ivy][31] | [The Apache Software License, Version 2.0][5] | +| [Parquet for Java][32] | [MIT License][33] | +| [JUL to SLF4J bridge][34] | [MIT License][35] | +| [SLF4J Reload4j Provider][36] | [MIT License][35] | +| [Apache Log4j API][37] | [Apache-2.0][3] | +| [Apache Log4j 1.x Compatibility API][38] | [Apache-2.0][3] | +| [Apache Log4j Core][39] | [Apache-2.0][3] | +| [scala-logging][40] | [Apache 2.0 License][30] | ### Test Dependencies | Dependency | License | | ------------------------------------------ | ----------------------------------------- | -| [scalatest][40] | [the Apache License, ASL Version 2.0][27] | -| [scalatestplus-mockito][41] | [Apache-2.0][27] | -| [mockito-core][42] | [MIT][43] | -| [Hamcrest][44] | [BSD License 3][45] | -| [testcontainers-scala-scalatest][46] | [The MIT License (MIT)][47] | -| [Testcontainers :: Localstack][48] | [MIT][49] | -| [Test containers for Exasol on Docker][50] | [MIT License][51] | -| [Test Database Builder for Java][52] | [MIT License][53] | -| [Matcher for SQL Result Sets][54] | [MIT License][55] | -| [EqualsVerifier \| release normal jar][56] | [Apache License, Version 2.0][3] | -| [JUnit Jupiter Engine][57] | [Eclipse Public License v2.0][58] | -| [Maven Project Version Getter][59] | [MIT License][60] | -| [Extension integration tests library][61] | [MIT License][62] | +| [scalatest][41] | [the Apache License, ASL Version 2.0][28] | +| [scalatestplus-mockito][42] | [Apache-2.0][28] | +| [mockito-core][43] | [MIT][44] | +| [Hamcrest][45] | [BSD License 3][46] | +| [testcontainers-scala-scalatest][47] | [The MIT License (MIT)][48] | +| [Testcontainers :: Localstack][49] | [MIT][50] | +| [Test containers for Exasol on Docker][51] | [MIT License][52] | +| [Test Database Builder for Java][53] | [MIT License][54] | +| [Matcher for SQL Result Sets][55] | [MIT License][56] | +| [EqualsVerifier \| release normal jar][57] | [Apache License, Version 2.0][3] | +| [JUnit Jupiter Engine][58] | [Eclipse Public License v2.0][59] | +| [Maven Project Version Getter][60] | [MIT License][61] | +| [Extension integration tests library][62] | [MIT License][63] | ### Plugin Dependencies | Dependency | License | | ------------------------------------------------------- | --------------------------------------------- | -| [SonarQube Scanner for Maven][63] | [GNU LGPL 3][64] | -| [Apache Maven Compiler Plugin][65] | [Apache-2.0][3] | -| [Apache Maven Enforcer Plugin][66] | [Apache-2.0][3] | -| [Maven Flatten Plugin][67] | [Apache Software Licenese][3] | -| [org.sonatype.ossindex.maven:ossindex-maven-plugin][68] | [ASL2][5] | -| [scala-maven-plugin][69] | [Public domain (Unlicense)][70] | -| [ScalaTest Maven Plugin][71] | [the Apache License, ASL Version 2.0][27] | -| [Apache Maven Javadoc Plugin][72] | [Apache-2.0][3] | -| [Maven Surefire Plugin][73] | [Apache-2.0][3] | -| [Versions Maven Plugin][74] | [Apache License, Version 2.0][3] | -| [duplicate-finder-maven-plugin Maven Mojo][75] | [Apache License 2.0][29] | -| [Apache Maven Assembly Plugin][76] | [Apache-2.0][3] | -| [Apache Maven JAR Plugin][77] | [Apache License, Version 2.0][3] | -| [Artifact reference checker and unifier][78] | [MIT License][79] | -| [Maven Failsafe Plugin][80] | [Apache-2.0][3] | -| [JaCoCo :: Maven Plugin][81] | [Eclipse Public License 2.0][82] | -| [error-code-crawler-maven-plugin][83] | [MIT License][84] | -| [Reproducible Build Maven Plugin][85] | [Apache 2.0][5] | -| [Project keeper maven plugin][86] | [The MIT License][87] | -| [OpenFastTrace Maven Plugin][88] | [GNU General Public License v3.0][89] | -| [Scalastyle Maven Plugin][90] | [Apache 2.0][29] | -| [spotless-maven-plugin][91] | [The Apache Software License, Version 2.0][3] | -| [scalafix-maven-plugin][92] | [BSD-3-Clause][20] | -| [Exec Maven Plugin][93] | [Apache License 2][3] | -| [Apache Maven Clean Plugin][94] | [Apache-2.0][3] | -| [Maven Resources Plugin][95] | [The Apache Software License, Version 2.0][5] | -| [Maven Install Plugin][96] | [The Apache Software License, Version 2.0][5] | -| [Maven Deploy Plugin][97] | [The Apache Software License, Version 2.0][5] | -| [Maven Site Plugin 3][98] | [The Apache Software License, Version 2.0][5] | +| [SonarQube Scanner for Maven][64] | [GNU LGPL 3][65] | +| [Apache Maven Compiler Plugin][66] | [Apache-2.0][3] | +| [Apache Maven Enforcer Plugin][67] | [Apache-2.0][3] | +| [Maven Flatten Plugin][68] | [Apache Software Licenese][3] | +| [org.sonatype.ossindex.maven:ossindex-maven-plugin][69] | [ASL2][5] | +| [scala-maven-plugin][70] | [Public domain (Unlicense)][71] | +| [ScalaTest Maven Plugin][72] | [the Apache License, ASL Version 2.0][28] | +| [Apache Maven Javadoc Plugin][73] | [Apache-2.0][3] | +| [Maven Surefire Plugin][74] | [Apache-2.0][3] | +| [Versions Maven Plugin][75] | [Apache License, Version 2.0][3] | +| [duplicate-finder-maven-plugin Maven Mojo][76] | [Apache License 2.0][30] | +| [Apache Maven Assembly Plugin][77] | [Apache-2.0][3] | +| [Apache Maven JAR Plugin][78] | [Apache License, Version 2.0][3] | +| [Artifact reference checker and unifier][79] | [MIT License][80] | +| [Maven Failsafe Plugin][81] | [Apache-2.0][3] | +| [JaCoCo :: Maven Plugin][82] | [Eclipse Public License 2.0][83] | +| [error-code-crawler-maven-plugin][84] | [MIT License][85] | +| [Reproducible Build Maven Plugin][86] | [Apache 2.0][5] | +| [Project keeper maven plugin][87] | [The MIT License][88] | +| [OpenFastTrace Maven Plugin][89] | [GNU General Public License v3.0][90] | +| [Scalastyle Maven Plugin][91] | [Apache 2.0][30] | +| [spotless-maven-plugin][92] | [The Apache Software License, Version 2.0][3] | +| [scalafix-maven-plugin][93] | [BSD-3-Clause][21] | +| [Exec Maven Plugin][94] | [Apache License 2][3] | +| [Apache Maven Clean Plugin][95] | [Apache-2.0][3] | ## Extension @@ -99,7 +96,7 @@ | Dependency | License | | ----------------------------------------- | ------- | -| [@exasol/extension-manager-interface][99] | MIT | +| [@exasol/extension-manager-interface][96] | MIT | [0]: https://www.scala-lang.org/ [1]: https://www.apache.org/licenses/LICENSE-2.0 @@ -116,88 +113,85 @@ [12]: https://github.com/exasol/import-export-udf-common-scala/blob/main/LICENSE [13]: https://github.com/exasol/error-reporting-java/ [14]: https://github.com/exasol/error-reporting-java/blob/main/LICENSE -[15]: https://kotlinlang.org/ -[16]: https://www.alluxio.io/alluxio-dora/alluxio-core/alluxio-core-client/alluxio-core-client-hdfs/ -[17]: https://github.com/alluxio/alluxio/blob/master/LICENSE -[18]: https://metrics.dropwizard.io/metrics-core -[19]: https://github.com/protocolbuffers/protobuf/tree/main/java -[20]: https://opensource.org/licenses/BSD-3-Clause -[21]: https://github.com/GoogleCloudDataproc/hadoop-connectors/tree/master/gcs -[22]: https://github.com/googleapis/google-oauth-java-client -[23]: https://orc.apache.org/ -[24]: https://avro.apache.org -[25]: https://commons.apache.org/proper/commons-compress/ -[26]: https://delta.io/ -[27]: http://www.apache.org/licenses/LICENSE-2.0 -[28]: https://spark.apache.org/ -[29]: http://www.apache.org/licenses/LICENSE-2.0.html -[30]: http://ant.apache.org/ivy/ -[31]: https://github.com/exasol/parquet-io-java/ -[32]: https://github.com/exasol/parquet-io-java/blob/main/LICENSE -[33]: http://www.slf4j.org -[34]: http://www.opensource.org/licenses/mit-license.php -[35]: http://reload4j.qos.ch -[36]: https://logging.apache.org/log4j/2.x/log4j-api/ -[37]: https://logging.apache.org/log4j/2.x/ -[38]: https://logging.apache.org/log4j/2.x/log4j-core/ -[39]: https://github.com/lightbend/scala-logging -[40]: http://www.scalatest.org -[41]: https://github.com/scalatest/scalatestplus-mockito -[42]: https://github.com/mockito/mockito -[43]: https://github.com/mockito/mockito/blob/main/LICENSE -[44]: http://hamcrest.org/JavaHamcrest/ -[45]: http://opensource.org/licenses/BSD-3-Clause -[46]: https://github.com/testcontainers/testcontainers-scala -[47]: https://opensource.org/licenses/MIT -[48]: https://java.testcontainers.org -[49]: http://opensource.org/licenses/MIT -[50]: https://github.com/exasol/exasol-testcontainers/ -[51]: https://github.com/exasol/exasol-testcontainers/blob/main/LICENSE -[52]: https://github.com/exasol/test-db-builder-java/ -[53]: https://github.com/exasol/test-db-builder-java/blob/main/LICENSE -[54]: https://github.com/exasol/hamcrest-resultset-matcher/ -[55]: https://github.com/exasol/hamcrest-resultset-matcher/blob/main/LICENSE -[56]: https://www.jqno.nl/equalsverifier -[57]: https://junit.org/junit5/ -[58]: https://www.eclipse.org/legal/epl-v20.html -[59]: https://github.com/exasol/maven-project-version-getter/ -[60]: https://github.com/exasol/maven-project-version-getter/blob/main/LICENSE -[61]: https://github.com/exasol/extension-manager/ -[62]: https://github.com/exasol/extension-manager/blob/main/LICENSE -[63]: http://sonarsource.github.io/sonar-scanner-maven/ -[64]: http://www.gnu.org/licenses/lgpl.txt -[65]: https://maven.apache.org/plugins/maven-compiler-plugin/ -[66]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ -[67]: https://www.mojohaus.org/flatten-maven-plugin/ -[68]: https://sonatype.github.io/ossindex-maven/maven-plugin/ -[69]: http://github.com/davidB/scala-maven-plugin -[70]: http://unlicense.org/ -[71]: https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin -[72]: https://maven.apache.org/plugins/maven-javadoc-plugin/ -[73]: https://maven.apache.org/surefire/maven-surefire-plugin/ -[74]: https://www.mojohaus.org/versions/versions-maven-plugin/ -[75]: https://basepom.github.io/duplicate-finder-maven-plugin -[76]: https://maven.apache.org/plugins/maven-assembly-plugin/ -[77]: https://maven.apache.org/plugins/maven-jar-plugin/ -[78]: https://github.com/exasol/artifact-reference-checker-maven-plugin/ -[79]: https://github.com/exasol/artifact-reference-checker-maven-plugin/blob/main/LICENSE -[80]: https://maven.apache.org/surefire/maven-failsafe-plugin/ -[81]: https://www.jacoco.org/jacoco/trunk/doc/maven.html -[82]: https://www.eclipse.org/legal/epl-2.0/ -[83]: https://github.com/exasol/error-code-crawler-maven-plugin/ -[84]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE -[85]: http://zlika.github.io/reproducible-build-maven-plugin -[86]: https://github.com/exasol/project-keeper/ -[87]: https://github.com/exasol/project-keeper/blob/main/LICENSE -[88]: https://github.com/itsallcode/openfasttrace-maven-plugin -[89]: https://www.gnu.org/licenses/gpl-3.0.html -[90]: http://www.scalastyle.org -[91]: https://github.com/diffplug/spotless -[92]: https://github.com/evis/scalafix-maven-plugin -[93]: https://www.mojohaus.org/exec-maven-plugin -[94]: https://maven.apache.org/plugins/maven-clean-plugin/ -[95]: http://maven.apache.org/plugins/maven-resources-plugin/ -[96]: http://maven.apache.org/plugins/maven-install-plugin/ -[97]: http://maven.apache.org/plugins/maven-deploy-plugin/ -[98]: http://maven.apache.org/plugins/maven-site-plugin/ -[99]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz +[15]: http://zookeeper.apache.org/zookeeper +[16]: https://kotlinlang.org/ +[17]: https://www.alluxio.io/alluxio-dora/alluxio-core/alluxio-core-client/alluxio-core-client-hdfs/ +[18]: https://github.com/alluxio/alluxio/blob/master/LICENSE +[19]: https://metrics.dropwizard.io/metrics-core +[20]: https://developers.google.com/protocol-buffers/protobuf-java/ +[21]: https://opensource.org/licenses/BSD-3-Clause +[22]: https://github.com/GoogleCloudPlatform/BigData-interop/gcs-connector/ +[23]: https://github.com/googleapis/google-oauth-java-client/google-oauth-client +[24]: https://orc.apache.org/orc-core +[25]: https://avro.apache.org +[26]: https://commons.apache.org/proper/commons-compress/ +[27]: https://delta.io/ +[28]: http://www.apache.org/licenses/LICENSE-2.0 +[29]: https://spark.apache.org/ +[30]: http://www.apache.org/licenses/LICENSE-2.0.html +[31]: http://ant.apache.org/ivy/ +[32]: https://github.com/exasol/parquet-io-java/ +[33]: https://github.com/exasol/parquet-io-java/blob/main/LICENSE +[34]: http://www.slf4j.org +[35]: http://www.opensource.org/licenses/mit-license.php +[36]: http://reload4j.qos.ch +[37]: https://logging.apache.org/log4j/2.x/log4j/log4j-api/ +[38]: https://logging.apache.org/log4j/2.x/log4j/log4j-1.2-api/ +[39]: https://logging.apache.org/log4j/2.x/log4j/log4j-core/ +[40]: https://github.com/lightbend/scala-logging +[41]: http://www.scalatest.org +[42]: https://github.com/scalatest/scalatestplus-mockito +[43]: https://github.com/mockito/mockito +[44]: https://github.com/mockito/mockito/blob/main/LICENSE +[45]: http://hamcrest.org/JavaHamcrest/ +[46]: http://opensource.org/licenses/BSD-3-Clause +[47]: https://github.com/testcontainers/testcontainers-scala +[48]: https://opensource.org/licenses/MIT +[49]: https://java.testcontainers.org +[50]: http://opensource.org/licenses/MIT +[51]: https://github.com/exasol/exasol-testcontainers/ +[52]: https://github.com/exasol/exasol-testcontainers/blob/main/LICENSE +[53]: https://github.com/exasol/test-db-builder-java/ +[54]: https://github.com/exasol/test-db-builder-java/blob/main/LICENSE +[55]: https://github.com/exasol/hamcrest-resultset-matcher/ +[56]: https://github.com/exasol/hamcrest-resultset-matcher/blob/main/LICENSE +[57]: https://www.jqno.nl/equalsverifier +[58]: https://junit.org/junit5/ +[59]: https://www.eclipse.org/legal/epl-v20.html +[60]: https://github.com/exasol/maven-project-version-getter/ +[61]: https://github.com/exasol/maven-project-version-getter/blob/main/LICENSE +[62]: https://github.com/exasol/extension-manager/ +[63]: https://github.com/exasol/extension-manager/blob/main/LICENSE +[64]: http://sonarsource.github.io/sonar-scanner-maven/ +[65]: http://www.gnu.org/licenses/lgpl.txt +[66]: https://maven.apache.org/plugins/maven-compiler-plugin/ +[67]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ +[68]: https://www.mojohaus.org/flatten-maven-plugin/ +[69]: https://sonatype.github.io/ossindex-maven/maven-plugin/ +[70]: http://github.com/davidB/scala-maven-plugin +[71]: http://unlicense.org/ +[72]: https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin +[73]: https://maven.apache.org/plugins/maven-javadoc-plugin/ +[74]: https://maven.apache.org/surefire/maven-surefire-plugin/ +[75]: https://www.mojohaus.org/versions/versions-maven-plugin/ +[76]: https://basepom.github.io/duplicate-finder-maven-plugin +[77]: https://maven.apache.org/plugins/maven-assembly-plugin/ +[78]: https://maven.apache.org/plugins/maven-jar-plugin/ +[79]: https://github.com/exasol/artifact-reference-checker-maven-plugin/ +[80]: https://github.com/exasol/artifact-reference-checker-maven-plugin/blob/main/LICENSE +[81]: https://maven.apache.org/surefire/maven-failsafe-plugin/ +[82]: https://www.jacoco.org/jacoco/trunk/doc/maven.html +[83]: https://www.eclipse.org/legal/epl-2.0/ +[84]: https://github.com/exasol/error-code-crawler-maven-plugin/ +[85]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE +[86]: http://zlika.github.io/reproducible-build-maven-plugin +[87]: https://github.com/exasol/project-keeper/ +[88]: https://github.com/exasol/project-keeper/blob/main/LICENSE +[89]: https://github.com/itsallcode/openfasttrace-maven-plugin +[90]: https://www.gnu.org/licenses/gpl-3.0.html +[91]: http://www.scalastyle.org +[92]: https://github.com/diffplug/spotless +[93]: https://github.com/evis/scalafix-maven-plugin +[94]: https://www.mojohaus.org/exec-maven-plugin +[95]: https://maven.apache.org/plugins/maven-clean-plugin/ +[96]: https://registry.npmjs.org/@exasol/extension-manager-interface/-/extension-manager-interface-0.3.1.tgz diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index 044e0353..c0a81c74 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [2.7.6](changes_2.7.6.md) * [2.7.5](changes_2.7.5.md) * [2.7.4](changes_2.7.4.md) * [2.7.3](changes_2.7.3.md) diff --git a/doc/changes/changes_2.7.6.md b/doc/changes/changes_2.7.6.md new file mode 100644 index 00000000..482c47c0 --- /dev/null +++ b/doc/changes/changes_2.7.6.md @@ -0,0 +1,42 @@ +# Cloud Storage Extension 2.7.6, released 2023-10-27 + +Code name: Fix Vulnerabilities CVE-2023-44981 and CVE-2023-46120 + +## Summary + +This release fixes vulnerabilities +* CVE-2023-42503 by overriding version `3.6.3` of transitive dependency `org.apache.zookeeper:zookeeper` via `org.apache.hadoop:hadoop-common` +* CVE-2023-46120 by excluding transitive dependency `com.rabbitmq:amqp-client` via `org.alluxio:alluxio-core-client-hdfs` + +## Security + +* #281: Fixed vulnerabilities CVE-2023-44981 and CVE-2023-46120 + +## Dependency Updates + +### Cloud Storage Extension + +#### Compile Dependency Updates + +* Updated `com.exasol:parquet-io-java:2.0.5` to `2.0.6` +* Updated `com.google.guava:guava:32.1.2-jre` to `32.1.3-jre` +* Updated `io.dropwizard.metrics:metrics-core:4.2.20` to `4.2.21` +* Updated `io.grpc:grpc-netty:1.56.1` to `1.59.0` +* Updated `io.netty:netty-handler:4.1.99.Final` to `4.1.100.Final` +* Updated `org.apache.logging.log4j:log4j-1.2-api:2.20.0` to `2.21.1` +* Updated `org.apache.logging.log4j:log4j-api:2.20.0` to `2.21.1` +* Updated `org.apache.logging.log4j:log4j-core:2.20.0` to `2.21.1` +* Added `org.apache.zookeeper:zookeeper:3.9.1` + +#### Test Dependency Updates + +* Updated `com.exasol:extension-manager-integration-test-java:0.5.1` to `0.5.4` + +#### Plugin Dependency Updates + +* Updated `com.exasol:error-code-crawler-maven-plugin:1.3.0` to `1.3.1` +* Updated `com.exasol:project-keeper-maven-plugin:2.9.12` to `2.9.14` +* Updated `org.apache.maven.plugins:maven-enforcer-plugin:3.4.0` to `3.4.1` +* Updated `org.codehaus.mojo:versions-maven-plugin:2.16.0` to `2.16.1` +* Updated `org.jacoco:jacoco-maven-plugin:0.8.10` to `0.8.11` +* Updated `org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184` to `3.10.0.2594` diff --git a/doc/user_guide/user_guide.md b/doc/user_guide/user_guide.md index 0447263d..d77cf823 100644 --- a/doc/user_guide/user_guide.md +++ b/doc/user_guide/user_guide.md @@ -150,7 +150,7 @@ downloaded jar file is the same as the checksum provided in the releases. To check the SHA256 result of the local jar, run the command: ```sh -sha256sum exasol-cloud-storage-extension-2.7.5.jar +sha256sum exasol-cloud-storage-extension-2.7.6.jar ``` ### Building From Source @@ -180,7 +180,7 @@ mvn clean package -DskipTests=true ``` The assembled jar file should be located at -`target/exasol-cloud-storage-extension-2.7.5.jar`. +`target/exasol-cloud-storage-extension-2.7.6.jar`. ### Create an Exasol Bucket @@ -202,7 +202,7 @@ for the HTTP protocol. Upload the jar file using curl command: ```sh -curl -X PUT -T exasol-cloud-storage-extension-2.7.5.jar \ +curl -X PUT -T exasol-cloud-storage-extension-2.7.6.jar \ http://w:@exasol.datanode.domain.com:2580// ``` @@ -234,7 +234,7 @@ OPEN SCHEMA CLOUD_STORAGE_EXTENSION; CREATE OR REPLACE JAVA SET SCRIPT IMPORT_PATH(...) EMITS (...) AS %scriptclass com.exasol.cloudetl.scriptclasses.FilesImportQueryGenerator; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.5.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; / CREATE OR REPLACE JAVA SCALAR SCRIPT IMPORT_METADATA(...) EMITS ( @@ -244,12 +244,12 @@ CREATE OR REPLACE JAVA SCALAR SCRIPT IMPORT_METADATA(...) EMITS ( end_index DECIMAL(36, 0) ) AS %scriptclass com.exasol.cloudetl.scriptclasses.FilesMetadataReader; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.5.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; / CREATE OR REPLACE JAVA SET SCRIPT IMPORT_FILES(...) EMITS (...) AS %scriptclass com.exasol.cloudetl.scriptclasses.FilesDataImporter; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.5.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; / ``` @@ -268,12 +268,12 @@ OPEN SCHEMA CLOUD_STORAGE_EXTENSION; CREATE OR REPLACE JAVA SET SCRIPT EXPORT_PATH(...) EMITS (...) AS %scriptclass com.exasol.cloudetl.scriptclasses.TableExportQueryGenerator; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.5.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; / CREATE OR REPLACE JAVA SET SCRIPT EXPORT_TABLE(...) EMITS (ROWS_AFFECTED INT) AS %scriptclass com.exasol.cloudetl.scriptclasses.TableDataExporter; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.5.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; / ``` @@ -407,13 +407,13 @@ CREATE OR REPLACE JAVA SCALAR SCRIPT IMPORT_METADATA(...) EMITS ( ) AS %jvmoption -DHTTPS_PROXY=http://username:password@10.10.1.10:1180 %scriptclass com.exasol.cloudetl.scriptclasses.FilesMetadataReader; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.5.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; / CREATE OR REPLACE JAVA SET SCRIPT IMPORT_FILES(...) EMITS (...) AS %jvmoption -DHTTPS_PROXY=http://username:password@10.10.1.10:1180 %scriptclass com.exasol.cloudetl.scriptclasses.FilesDataImporter; - %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.5.jar; + %jar /buckets/bfsdefault//exasol-cloud-storage-extension-2.7.6.jar; / ``` diff --git a/pk_generated_parent.pom b/pk_generated_parent.pom index a2595a1f..dedaf5f7 100644 --- a/pk_generated_parent.pom +++ b/pk_generated_parent.pom @@ -3,7 +3,7 @@ 4.0.0 com.exasol cloud-storage-extension-generated-parent - 2.7.5 + 2.7.6 pom UTF-8 @@ -37,7 +37,7 @@ org.sonarsource.scanner.maven sonar-maven-plugin - 3.9.1.2184 + 3.10.0.2594 org.apache.maven.plugins @@ -51,7 +51,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.4.0 + 3.4.1 enforce-maven @@ -61,7 +61,7 @@ - [3.8.7,3.9.0) + 3.6.3 @@ -121,7 +121,7 @@ org.codehaus.mojo versions-maven-plugin - 2.16.0 + 2.16.1 display-updates @@ -235,7 +235,7 @@ org.jacoco jacoco-maven-plugin - 0.8.10 + 0.8.11 prepare-agent @@ -276,7 +276,7 @@ com.exasol error-code-crawler-maven-plugin - 1.3.0 + 1.3.1 verify diff --git a/pom.xml b/pom.xml index 041826d7..bfbc7c1b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,21 +3,21 @@ 4.0.0 com.exasol cloud-storage-extension - 2.7.5 + 2.7.6 Cloud Storage Extension Exasol Cloud Storage Import And Export Extension https://github.com/exasol/cloud-storage-extension/ cloud-storage-extension-generated-parent com.exasol - 2.7.5 + 2.7.6 pk_generated_parent.pom 2.13.11 2.13 3.3.6 - 2.20.0 + 2.21.1 src/main/,extension/src/ extension/src/*.test.ts src/test/,extension/src @@ -38,19 +38,19 @@ com.google.guava guava - 32.1.2-jre + 32.1.3-jre io.grpc grpc-netty - 1.56.1 + 1.59.0 io.netty netty-handler - 4.1.99.Final + 4.1.100.Final org.xerial.snappy @@ -190,6 +190,12 @@ hadoop-aws ${hadoop.version} + + + org.apache.zookeeper + zookeeper + 3.9.1 + org.apache.hadoop hadoop-azure @@ -322,6 +328,11 @@ io.grpc grpc-core + + + com.rabbitmq + amqp-client + javax.inject @@ -364,7 +375,7 @@ io.dropwizard.metrics metrics-core - 4.2.20 + 4.2.21 com.google.protobuf @@ -424,7 +435,8 @@ org.apache.spark spark-sql_${scala.compat.version} - 3.4.1 + 3.4.1 + org.spark-project.spark @@ -470,7 +482,7 @@ com.exasol parquet-io-java - 2.0.5 + 2.0.6 org.slf4j @@ -589,7 +601,7 @@ com.exasol extension-manager-integration-test-java - 0.5.1 + 0.5.4 test @@ -750,9 +762,12 @@ CVE-2020-36641 - + CVE-2023-4586 + + CVE-2023-46120 @@ -781,7 +796,7 @@ com.exasol project-keeper-maven-plugin - 2.9.12 + 2.9.14 diff --git a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java index 5e84f8c7..9f0e0073 100644 --- a/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java +++ b/src/test/java/com/exasol/cloudetl/extension/ExtensionIT.java @@ -53,6 +53,7 @@ class ExtensionIT { @BeforeAll static void setup() throws FileNotFoundException, BucketAccessException, TimeoutException, SQLException { exasolTestSetup = new ExasolTestSetupFactory(Paths.get("no-cloud-setup")).getTestSetup(); + ExasolVersionCheck.assumeExasolVersion8(exasolTestSetup); setup = ExtensionManagerSetup.create(exasolTestSetup, ExtensionBuilder.createDefaultNpmBuilder( EXTENSION_SOURCE_DIR, EXTENSION_SOURCE_DIR.resolve("dist").resolve(EXTENSION_ID))); exasolTestSetup.getDefaultBucket().uploadFile(ADAPTER_JAR, ADAPTER_JAR.getFileName().toString()); @@ -81,11 +82,11 @@ static void teardown() throws Exception { if (setup != null) { setup.close(); } - if(exasolTestSetup!=null) { + if (exasolTestSetup != null) { exasolTestSetup.getDefaultBucket().deleteFileNonBlocking(ADAPTER_JAR.getFileName().toString()); exasolTestSetup.close(); } - if(s3setup!=null) { + if (s3setup != null) { s3setup.close(); } } @@ -115,8 +116,10 @@ void getInstallationsReturnsEmptyList() { @Test void getInstallationsReturnsResult() { client.install(); - assertThat(client.getInstallations(), contains( - new InstallationsResponseInstallation().name("Cloud Storage Extension").version(PROJECT_VERSION))); + assertThat(client.getInstallations(), contains(new InstallationsResponseInstallation() // + .id(EXTENSION_ID) // + .name("Cloud Storage Extension") // + .version(PROJECT_VERSION))); } @Test @@ -147,11 +150,13 @@ void exportImportWorksAfterInstallation() throws SQLException { } @Test + @Disabled("Blocked by https://github.com/exasol/extension-manager/issues/155") void uninstallExtensionWithoutInstallation() throws SQLException { assertDoesNotThrow(() -> client.uninstall()); } @Test + @Disabled("Blocked by https://github.com/exasol/extension-manager/issues/155") void uninstallExtensionRemovesScripts() throws SQLException { client.install(); client.uninstall(); @@ -159,6 +164,7 @@ void uninstallExtensionRemovesScripts() throws SQLException { } @Test + @Disabled("Blocked by https://github.com/exasol/extension-manager/issues/155") void uninstallWrongVersionFails() { client.assertRequestFails(() -> client.uninstall("wrongVersion"), equalTo("Uninstalling version 'wrongVersion' not supported, try '" + PROJECT_VERSION + "'."), @@ -210,20 +216,21 @@ void upgradeFromPreviousVersion() throws InterruptedException, BucketAccessExcep previousVersion.prepare(); previousVersion.install(); verifyExportImportWorks(); - assertInstalledVersion("Cloud Storage Extension", PREVIOUS_VERSION); + assertInstalledVersion("Cloud Storage Extension", PREVIOUS_VERSION, previousVersion); previousVersion.upgrade(); - assertInstalledVersion("Cloud Storage Extension", PROJECT_VERSION); + assertInstalledVersion("Cloud Storage Extension", PROJECT_VERSION, previousVersion); verifyExportImportWorks(); } - private void assertInstalledVersion(final String expectedName, final String expectedVersion) { - final List installations = setup.client().getInstallations(); - final InstallationsResponseInstallation expectedInstallation = new InstallationsResponseInstallation() - .name(expectedName).version(expectedVersion); - // The extension is installed twice (previous and current version), so each one returns the same installation. - assertAll(() -> assertThat(installations, hasSize(2)), - () -> assertThat(installations.get(0), equalTo(expectedInstallation)), - () -> assertThat(installations.get(1), equalTo(expectedInstallation))); + private void assertInstalledVersion(final String expectedName, final String expectedVersion, + final PreviousExtensionVersion previousVersion) { + // The extension is installed twice (previous and current version), so each one returns one installation. + assertThat(setup.client().getInstallations(), + containsInAnyOrder( + new InstallationsResponseInstallation().name(expectedName).version(expectedVersion) + .id(EXTENSION_ID), // + new InstallationsResponseInstallation().name(expectedName).version(expectedVersion) + .id(previousVersion.getExtensionId()))); } private PreviousExtensionVersion createPreviousVersion() { diff --git a/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala b/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala index b4df9ac7..28a79eeb 100644 --- a/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala +++ b/src/test/scala/com/exasol/cloudetl/it/BaseIntegrationTest.scala @@ -16,9 +16,10 @@ import org.scalatest.funsuite.AnyFunSuite trait BaseIntegrationTest extends AnyFunSuite with BeforeAndAfterAll with LazyLogging { private[this] val JAR_NAME_PATTERN = "exasol-cloud-storage-extension-" + val DEFAULT_EXASOL_DOCKER_IMAGE = "7.1.23" val network = DockerNamedNetwork("it-tests", true) val exasolContainer = { - val c: ExasolContainer[_] = new ExasolContainer() + val c: ExasolContainer[_] = new ExasolContainer(getExasolDockerImageVersion()) c.withNetwork(network) c.withReuse(true) c @@ -147,4 +148,13 @@ trait BaseIntegrationTest extends AnyFunSuite with BeforeAndAfterAll with LazyLo List.empty[File] } } + + private[this] def getExasolDockerImageVersion(): String = { + val dockerVersion = System.getenv("EXASOL_DB_VERSION") + if (dockerVersion == null) { + DEFAULT_EXASOL_DOCKER_IMAGE + } else { + dockerVersion + } + } }