diff --git a/.gitattributes b/.gitattributes index 436f11a..7733ce3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,5 +8,6 @@ doc/changes/changelog.md linguist-genera .github/workflows/dependencies_check.yml linguist-generated=true .github/workflows/dependencies_update.yml linguist-generated=true .github/workflows/release.yml linguist-generated=true +.github/zizmor.yml linguist-generated=true .settings/org.eclipse.jdt.core.prefs linguist-generated=true .settings/org.eclipse.jdt.ui.prefs linguist-generated=true diff --git a/.github/workflows/broken_links_checker.yml b/.github/workflows/broken_links_checker.yml index ee8df76..55d839d 100644 --- a/.github/workflows/broken_links_checker.yml +++ b/.github/workflows/broken_links_checker.yml @@ -21,10 +21,11 @@ jobs: cancel-in-progress: true } steps: - - { - id: checkout, - uses: actions/checkout@v5 - } + - id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } - id: configure-broken-links-checker name: Configure broken links checker run: | @@ -36,7 +37,7 @@ jobs: '{"pattern": "^https?://projects.eclipse.org"}' \ ']}' > ./target/broken_links_checker.json - id: run-broken-links-checker - uses: tcort/github-action-markdown-link-check@v1 + uses: tcort/github-action-markdown-link-check@e7c7a18363c842693fadde5d41a3bd3573a7a225 with: { use-quiet-mode: yes, use-verbose-mode: yes, diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index cc82473..d9e8f6d 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -33,13 +33,12 @@ jobs: fail-fast: false matrix: exasol_db_version: [ - 2025.1.3, - 8.29.12, - 7.1.30 + 2026.1.0, + 2025.1.13 ] env: { - DEFAULT_EXASOL_DB_VERSION: 2025.1.3 + DEFAULT_EXASOL_DB_VERSION: 2026.1.0 } steps: - name: Free Disk Space @@ -50,9 +49,10 @@ jobs: sudo rm -rf /usr/share/dotnet - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: false } - name: Set up JDKs id: setup-java @@ -61,14 +61,11 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - server-id: ossindex - server-username: OSSINDEX_USERNAME - server-password: OSSINDEX_API_TOKEN - name: Cache SonarCloud packages id: cache-sonar - uses: actions/cache@v4 + uses: actions/cache@v6 with: { path: ~/.sonar/cache, key: '${{ runner.os }}-sonar', @@ -83,12 +80,11 @@ jobs: id: build-pk-verify run: | mvn --batch-mode clean verify \ + -DossindexSkip=true \ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ -DtrimStackTrace=false \ -Dcom.exasol.dockerdb.image=${{ matrix.exasol_db_version }} env: { - OSSINDEX_USERNAME: '${{ secrets.OSSINDEX_USERNAME }}', - OSSINDEX_API_TOKEN: '${{ secrets.OSSINDEX_API_TOKEN }}', EXASOL_DB_VERSION: '${{ matrix.exasol_db_version }}' } - name: Sonar analysis @@ -96,6 +92,7 @@ jobs: if: ${{ env.SONAR_TOKEN != null && matrix.exasol_db_version == env.DEFAULT_EXASOL_DB_VERSION }} run: | mvn --batch-mode org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ + -DossindexSkip=true \ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ -DtrimStackTrace=false \ -Dsonar.token=$SONAR_TOKEN @@ -105,13 +102,41 @@ jobs: } - name: Verify Release Artifacts id: verify-release-artifacts - run: "print_message() {\n local -r message=$1\n echo \"$message\"\n echo \"$message\" >> \"$GITHUB_STEP_SUMMARY\"\n}\n\nprint_message \"### Release Artifacts\"\n\nIFS=$'\\n' artifacts_array=($ARTIFACTS)\nmissing_files=()\nfor file in \"${artifacts_array[@]}\";\ndo \n echo \"Checking if file $file exists...\"\n if ! [[ -f \"$file\" ]]; then\n print_message \"* ⚠️ \\`$file\\` does not exist ⚠️\"\n echo \"Content of directory $(dirname \"$file\"):\"\n ls \"$(dirname \"$file\")\"\n missing_files+=(\"$file\")\n else\n print_message \"* \\`$file\\` ✅\" \n fi\ndone\nprint_message \"\"\nnumber_of_missing_files=${#missing_files[@]}\nif [[ $number_of_missing_files -gt 0 ]]; then\n print_message \"⚠️ $number_of_missing_files release artifact(s) missing ⚠️\"\n exit 1\nfi\n" + run: | + print_message() { + local -r message=$1 + echo "$message" + echo "$message" >> "$GITHUB_STEP_SUMMARY" + } + + print_message "### Release Artifacts" + + IFS=$'\n' artifacts_array=($ARTIFACTS) + missing_files=() + for file in "${artifacts_array[@]}"; + do + echo "Checking if file $file exists..." + if ! [[ -f "$file" ]]; then + print_message "* ⚠️ \`$file\` does not exist ⚠️" + echo "Content of directory $(dirname "$file"):" + ls "$(dirname "$file")" + missing_files+=("$file") + else + print_message "* \`$file\` ✅" + fi + done + print_message "" + number_of_missing_files=${#missing_files[@]} + if [[ $number_of_missing_files -gt 0 ]]; then + print_message "⚠️ $number_of_missing_files release artifact(s) missing ⚠️" + exit 1 + fi env: { ARTIFACTS: '${{ steps.build-pk-verify.outputs.release-artifacts }}' } - name: Upload artifacts id: upload-artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: { name: 'artifacts-exasol-${{ matrix.exasol_db_version }}', path: '${{ steps.build-pk-verify.outputs.release-artifacts }}', @@ -127,7 +152,7 @@ jobs: '{"pattern": "^https?://(www.)?eclipse.org"}' \ '{"pattern": "^https?://projects.eclipse.org"}' \ ']}' > ./target/broken_links_checker.json - - uses: tcort/github-action-markdown-link-check@v1 + - uses: tcort/github-action-markdown-link-check@e7c7a18363c842693fadde5d41a3bd3573a7a225 id: run-link-check with: { use-quiet-mode: yes, @@ -150,9 +175,10 @@ jobs: steps: - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: false } - name: Set up JDK 17 id: setup-java @@ -160,22 +186,91 @@ jobs: with: { distribution: temurin, java-version: '17', - cache: maven, - server-id: ossindex, - server-username: OSSINDEX_USERNAME, - server-password: OSSINDEX_API_TOKEN + cache: maven } - name: Run tests and build with Maven 17 id: build-next-java - run: mvn --batch-mode clean package -DtrimStackTrace=false -Djava.version=17 + run: | + mvn --batch-mode clean package -DtrimStackTrace=false -Djava.version=17 \ + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \ + -DossindexSkip=true + ossindex: + runs-on: ubuntu-latest + defaults: + run: { + shell: bash + } + permissions: { + contents: read + } + concurrency: { + group: '${{ github.workflow }}-ossindex-${{ github.ref }}', + cancel-in-progress: true + } + steps: + - name: Checkout the repository + id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } + - name: Set up JDKs + id: setup-java + uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: |- + 11 + 21 + cache: maven + server-id: ossindex + server-username: OSSINDEX_USERNAME + server-password: OSSINDEX_API_TOKEN + - name: Run Ossindex + id: ossindex + run: | + mvn --batch-mode test-compile \ + org.sonatype.ossindex.maven:ossindex-maven-plugin:audit \ + org.sonatype.ossindex.maven:ossindex-maven-plugin:audit-aggregate \ + -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn env: { OSSINDEX_USERNAME: '${{ secrets.OSSINDEX_USERNAME }}', OSSINDEX_API_TOKEN: '${{ secrets.OSSINDEX_API_TOKEN }}' } + lint-github-actions: + runs-on: ubuntu-latest + defaults: + run: { + shell: bash + } + permissions: { + security-events: write, + contents: read, + actions: read + } + concurrency: { + group: '${{ github.workflow }}-github-actions-linter-${{ github.ref }}', + cancel-in-progress: true + } + steps: + - name: Checkout the repository + id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } + - name: Lint GitHub actions with Zizmore + id: lint-github-actions + uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa + with: { + advanced-security: false + } build: needs: [ matrix-build, - next-java-compatibility + next-java-compatibility, + ossindex, + lint-github-actions ] runs-on: ubuntu-latest defaults: @@ -192,9 +287,10 @@ jobs: steps: - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: false } - name: Set up JDKs id: setup-java @@ -203,7 +299,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - name: Check if release is needed id: check-release diff --git a/.github/workflows/dependencies_check.yml b/.github/workflows/dependencies_check.yml index b0877fc..fa5164f 100644 --- a/.github/workflows/dependencies_check.yml +++ b/.github/workflows/dependencies_check.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: null schedule: - { - cron: 0 2 * * * + cron: 42 22 * * 0 } jobs: report_security_issues: @@ -25,11 +25,12 @@ jobs: cancel-in-progress: true } steps: - - { - name: Checkout, - id: checkout, - uses: actions/checkout@v5 - } + - name: Checkout + id: checkout + uses: actions/checkout@v7 + with: { + persist-credentials: false + } - name: Set up JDKs id: setup-jdks uses: actions/setup-java@v5 @@ -37,7 +38,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven server-id: ossindex server-username: OSSINDEX_USERNAME @@ -55,7 +56,7 @@ jobs: } - name: Create GitHub Issues id: create-security-issues - uses: exasol/python-toolbox/.github/actions/security-issues@1.9.0 + uses: exasol/python-toolbox/.github/actions/security-issues@10.1.0 with: { format: maven, command: cat ossindex-report.json, diff --git a/.github/workflows/dependencies_update.yml b/.github/workflows/dependencies_update.yml index 2ba2785..1986eae 100644 --- a/.github/workflows/dependencies_update.yml +++ b/.github/workflows/dependencies_update.yml @@ -34,10 +34,11 @@ jobs: cancel-in-progress: false } steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v7 id: checkout with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: true } - name: Set up JDKs id: setup-jdks @@ -46,7 +47,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - name: Print issues id: debug-print-issues @@ -58,10 +59,14 @@ jobs: - name: Fail if not running on a branch id: check-branch if: ${{ !startsWith(github.ref, 'refs/heads/') }} - uses: actions/github-script@v8 + uses: actions/github-script@v9 with: script: | - core.setFailed('Not running on a branch, github.ref is ${{ github.ref }}. Please start this workflow only on main or a branch') + const ref = process.env.GITHUB_REF + core.setFailed(`Not running on a branch, github.ref is '${ref}'. Please start this workflow only on main or a branch`) + env: { + GITHUB_REF: '${{ github.ref }}' + } - name: Update dependencies id: update-dependencies run: | @@ -119,7 +124,7 @@ jobs: id: create-branch if: ${{ github.ref == 'refs/heads/main' }} run: | - branch_name="dependency-update/$(date "+%Y%m%d%H%M%S")" + branch_name="dependency-update/$(date "+%Y-%m-%d_%H-%M-%S")" echo "Creating branch $branch_name" git checkout -b "$branch_name" - name: Commit changes & push @@ -159,7 +164,7 @@ jobs: - name: Report failure Status to Slack channel id: report-failure-slack if: ${{ always() }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ secrets.GITHUB_TOKEN }}', @@ -173,7 +178,7 @@ jobs: - name: Report new Pull Request to Slack channel id: report-pr-slack if: ${{ steps.create-pr.outputs.pr_url }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ secrets.GITHUB_TOKEN }}', diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dbc1ea2..515d750 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -75,9 +75,10 @@ jobs: steps: - name: Checkout the repository id: checkout - uses: actions/checkout@v5 + uses: actions/checkout@v7 with: { - fetch-depth: 0 + fetch-depth: 0, + persist-credentials: true } - name: Set up Maven Central Repository id: configure-maven-central-credentials @@ -87,8 +88,7 @@ jobs: distribution: temurin java-version: |- 11 - 17 - cache: maven + 21 server-id: maven-central-portal server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD @@ -102,15 +102,19 @@ jobs: distribution: temurin java-version: |- 11 - 17 + 21 cache: maven - name: Fail if not running on main or release branch id: check-main-or-release-branch if: ${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/heads/release/') }} - uses: actions/github-script@v8 + uses: actions/github-script@v9 with: script: | - core.setFailed('Not running on main or release branch, github.ref is ${{ github.ref }}. Please start this workflow only on main or a branch starting with release/') + const ref = process.env.GITHUB_REF + core.setFailed(`Not running on main or release branch, github.ref is '${ref}'. Please start this workflow only on main or a branch starting with release/`) + env: { + GITHUB_REF: '${{ github.ref }}' + } - name: Check CI build of this commit succeeded id: check-ci-build-status if: ${{ ! inputs.started-from-ci }} @@ -142,7 +146,7 @@ jobs: - { name: Build project, id: build, - run: mvn --batch-mode -DskipTests -Dossindex.skip=true clean verify + run: mvn --batch-mode -DskipTests -DossindexSkip=true clean verify } - { name: List secret GPG keys, @@ -155,7 +159,7 @@ jobs: if: ${{ true && (! inputs.skip-maven-central) }} run: | echo "#### Maven Central Release" >> "$GITHUB_STEP_SUMMARY" - mvn --batch-mode -Dgpg.skip=false -DskipTests -Dossindex.skip=true deploy \ + mvn --batch-mode -Dgpg.skip=false -DskipTests -DossindexSkip=true deploy \ -Dcentral-publishing.deploymentName="Auto release of repo ${{ github.repository }} using PK release.yml" \ -Dcentral-publishing.autoPublish=${{ inputs.maven-central-auto-publish }} if [[ "${{ inputs.maven-central-auto-publish }}" == "true" ]]; then @@ -236,7 +240,7 @@ jobs: - name: Report failure Status to Slack channel id: report-failure-status-slack if: ${{ always() }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ github.token }}', @@ -250,7 +254,7 @@ jobs: - name: Report new release to Slack channel id: report-new-release-slack if: ${{ steps.create-github-release.outputs.release-url }} - uses: ravsamhq/notify-slack-action@v2 + uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 with: { status: '${{ job.status }}', token: '${{ github.token }}', diff --git a/.github/zizmor.yml b/.github/zizmor.yml new file mode 100644 index 0000000..a8508a1 --- /dev/null +++ b/.github/zizmor.yml @@ -0,0 +1,33 @@ +# Generated by Project Keeper +# https://github.com/exasol/project-keeper/blob/main/project-keeper/src/main/resources/templates/.github/zizmor.yml +# See https://docs.zizmor.sh/configuration/#settings +rules: + unpinned-uses: + config: + policies: + "actions/*": ref-pin + "exasol/python-toolbox/.github/actions/security-issues": ref-pin + "*": hash-pin + cache-poisoning: + ignore: + # Enabling caching is OK for non-release workflows + - ci-build.yml + - ci-build-native-build.yml + - ci-build-db-version-matrix.yml + - project-keeper-verify.yml + - test_on_windows.yml + - test_linux_build_on_windows.yml + obfuscation: + ignore: + # Generated workflows use boolean conditions like ${{ false }} + # Note: We cannot exclude this using inline comments because GitHubWorkflowIO does not preserve comments in the workflow YAML files. + - ci-build.yml + - release.yml + - project-keeper-verify.yml + secrets-inherit: + ignore: + # Required for passing slack webhooks + - ci-build.yml + - ci-build-db-version-matrix.yml + - dependencies_check.yml + - release.yml diff --git a/.project-keeper.yml b/.project-keeper.yml index ce38c53..ac567b0 100644 --- a/.project-keeper.yml +++ b/.project-keeper.yml @@ -6,6 +6,5 @@ sources: - integration_tests build: exasolDbVersions: - - "2025.1.3" - - "8.29.12" - - "7.1.30" + - "2026.1.0" + - "2025.1.13" diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 7644ed3..f5f6a72 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -122,8 +122,10 @@ org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=disabled org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns=false org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 +org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line=false org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false org.eclipse.jdt.core.formatter.align_with_spaces=false @@ -151,6 +153,8 @@ org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon=0 org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 org.eclipse.jdt.core.formatter.alignment_for_module_statements=16 @@ -159,6 +163,7 @@ org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16 org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_record_components=16 org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 @@ -169,6 +174,7 @@ org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow=0 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0 @@ -194,6 +200,7 @@ org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line @@ -213,6 +220,7 @@ org.eclipse.jdt.core.formatter.comment.format_header=false org.eclipse.jdt.core.formatter.comment.format_html=true org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_markdown_comments=true org.eclipse.jdt.core.formatter.comment.format_source_code=true org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false org.eclipse.jdt.core.formatter.comment.indent_root_tags=false @@ -220,7 +228,8 @@ org.eclipse.jdt.core.formatter.comment.indent_tag_description=false org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=120 +org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags=false +org.eclipse.jdt.core.formatter.comment.line_length=160 org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false @@ -292,6 +301,7 @@ org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arg org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert @@ -383,6 +393,7 @@ org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_ar org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert @@ -446,7 +457,8 @@ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_ org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_line_comments=false +org.eclipse.jdt.core.formatter.join_lines_in_comments=false org.eclipse.jdt.core.formatter.join_wrapped_lines=false org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never @@ -466,9 +478,11 @@ org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false +org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line=one_line_never +org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line=one_line_never org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never -org.eclipse.jdt.core.formatter.lineSplit=120 +org.eclipse.jdt.core.formatter.lineSplit=160 org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0 @@ -506,5 +520,6 @@ org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true +org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator=false org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs index 54d02ac..14b7a65 100644 --- a/.settings/org.eclipse.jdt.ui.prefs +++ b/.settings/org.eclipse.jdt.ui.prefs @@ -61,7 +61,7 @@ cleanup_settings_version=2 eclipse.preferences.version=1 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true formatter_profile=_Exasol -formatter_settings_version=21 +formatter_settings_version=23 org.eclipse.jdt.ui.ignorelowercasenames=true org.eclipse.jdt.ui.importorder=java;javax;org;com; org.eclipse.jdt.ui.ondemandthreshold=3 diff --git a/.vscode/settings.json b/.vscode/settings.json index 88c32cc..63c38ab 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,9 +4,8 @@ "source.organizeImports": "explicit", "source.generate.finalModifiers": "explicit", "source.fixAll": "explicit" -}, + }, "java.codeGeneration.useBlocks": true, - "java.saveActions.organizeImports": true, "java.sources.organizeImports.starThreshold": 3, "java.sources.organizeImports.staticStarThreshold": 3, "java.test.config": { diff --git a/dependencies.md b/dependencies.md index 89d950d..fc4a11d 100644 --- a/dependencies.md +++ b/dependencies.md @@ -3,93 +3,92 @@ ## Test Dependencies -| Dependency | License | -| ---------------------------------------------- | -------------------------------- | -| [Test containers for Exasol on Docker][0] | [MIT License][1] | -| [Testcontainers :: JUnit Jupiter Extension][2] | [MIT][3] | -| [Hamcrest][4] | [BSD-3-Clause][5] | -| [JUnit Jupiter API][6] | [Eclipse Public License v2.0][7] | -| [SLF4J JDK14 Provider][8] | [MIT][9] | +| Dependency | License | +| ----------------------------------------- | -------------------------------- | +| [Test containers for Exasol on Docker][0] | [MIT License][1] | +| [Hamcrest][2] | [BSD-3-Clause][3] | +| [JUnit Jupiter API][4] | [Eclipse Public License v2.0][5] | +| [SLF4J JDK14 Provider][6] | [MIT][7] | ## Runtime Dependencies -| Dependency | License | -| ------------------------ | ----------------------- | -| [Exasol JDBC Driver][10] | [EXAClient License][11] | +| Dependency | License | +| ----------------------- | ---------------------- | +| [Exasol JDBC Driver][8] | [EXAClient License][9] | ## Plugin Dependencies -| Dependency | License | -| ------------------------------------------------------- | ------------------------------------------- | -| [Apache Maven Clean Plugin][12] | [Apache-2.0][13] | -| [Apache Maven Install Plugin][14] | [Apache-2.0][13] | -| [Apache Maven Resources Plugin][15] | [Apache-2.0][13] | -| [Apache Maven Site Plugin][16] | [Apache-2.0][13] | -| [SonarQube Scanner for Maven][17] | [GNU LGPL 3][18] | -| [Apache Maven Toolchains Plugin][19] | [Apache-2.0][13] | -| [Apache Maven Compiler Plugin][20] | [Apache-2.0][13] | -| [Apache Maven Enforcer Plugin][21] | [Apache-2.0][13] | -| [Maven Flatten Plugin][22] | [Apache Software License][13] | -| [org.sonatype.ossindex.maven:ossindex-maven-plugin][23] | [ASL2][24] | -| [Maven Surefire Plugin][25] | [Apache-2.0][13] | -| [Versions Maven Plugin][26] | [Apache License, Version 2.0][13] | -| [duplicate-finder-maven-plugin Maven Mojo][27] | [Apache License 2.0][28] | -| [Apache Maven Artifact Plugin][29] | [Apache-2.0][13] | -| [Apache Maven Deploy Plugin][30] | [Apache-2.0][13] | -| [Apache Maven GPG Plugin][31] | [Apache-2.0][13] | -| [Apache Maven Source Plugin][32] | [Apache License, Version 2.0][13] | -| [Apache Maven Javadoc Plugin][33] | [Apache-2.0][13] | -| [Central Publishing Maven Plugin][34] | [The Apache License, Version 2.0][13] | -| [Maven Failsafe Plugin][35] | [Apache-2.0][13] | -| [JaCoCo :: Maven Plugin][36] | [EPL-2.0][37] | -| [Quality Summarizer Maven Plugin][38] | [MIT License][39] | -| [error-code-crawler-maven-plugin][40] | [MIT License][41] | -| [Git Commit Id Maven Plugin][42] | [GNU Lesser General Public License 3.0][43] | -| [Project Keeper Maven plugin][44] | [The MIT License][45] | +| Dependency | License | +| ------------------------------------------------------- | ---------------------------------------------- | +| [SonarQube Scanner for Maven][10] | [GNU LGPL 3][11] | +| [Apache Maven Toolchains Plugin][12] | [Apache-2.0][13] | +| [Apache Maven Compiler Plugin][14] | [Apache-2.0][13] | +| [Apache Maven Enforcer Plugin][15] | [Apache-2.0][13] | +| [Maven Flatten Plugin][16] | [Apache Software License][13] | +| [org.sonatype.ossindex.maven:ossindex-maven-plugin][17] | [ASL2][18] | +| [Maven Surefire Plugin][19] | [Apache-2.0][13] | +| [Versions Maven Plugin][20] | [Apache License, Version 2.0][13] | +| [duplicate-finder-maven-plugin Maven Mojo][21] | [Apache License 2.0][22] | +| [Apache Maven Artifact Plugin][23] | [Apache-2.0][13] | +| [Apache Maven Deploy Plugin][24] | [Apache-2.0][13] | +| [Apache Maven Source Plugin][25] | [Apache-2.0][13] | +| [Apache Maven Javadoc Plugin][26] | [Apache-2.0][13] | +| [spdx-maven-plugin Maven Plugin][27] | [The Apache Software License, Version 2.0][18] | +| [Build Helper Maven Plugin][28] | [The MIT License][29] | +| [Apache Maven GPG Plugin][30] | [Apache-2.0][13] | +| [Central Publishing Maven Plugin][31] | [The Apache License, Version 2.0][13] | +| [Maven Failsafe Plugin][32] | [Apache-2.0][13] | +| [JaCoCo :: Maven Plugin][33] | [EPL-2.0][34] | +| [error-code-crawler-maven-plugin][35] | [MIT License][36] | +| [Git Commit Id Maven Plugin][37] | [GNU Lesser General Public License 3.0][38] | +| [Project Keeper Maven plugin][39] | [The MIT License][40] | +| [Apache Maven Clean Plugin][41] | [Apache-2.0][13] | +| [Apache Maven Resources Plugin][42] | [Apache-2.0][13] | +| [Apache Maven Install Plugin][43] | [Apache-2.0][13] | +| [Apache Maven Site Plugin][44] | [Apache-2.0][13] | [0]: https://github.com/exasol/exasol-testcontainers/ [1]: https://github.com/exasol/exasol-testcontainers/blob/main/LICENSE -[2]: https://java.testcontainers.org -[3]: http://opensource.org/licenses/MIT -[4]: http://hamcrest.org/JavaHamcrest/ -[5]: https://raw.githubusercontent.com/hamcrest/JavaHamcrest/master/LICENSE -[6]: https://junit.org/ -[7]: https://www.eclipse.org/legal/epl-v20.html -[8]: http://www.slf4j.org -[9]: https://opensource.org/license/mit -[10]: https://www.exasol.com/ -[11]: https://repo1.maven.org/maven2/com/exasol/exasol-jdbc/25.2.5/exasol-jdbc-25.2.5-license.txt -[12]: https://maven.apache.org/plugins/maven-clean-plugin/ +[2]: http://hamcrest.org/JavaHamcrest/ +[3]: https://raw.githubusercontent.com/hamcrest/JavaHamcrest/master/LICENSE +[4]: https://junit.org/ +[5]: https://www.eclipse.org/legal/epl-v20.html +[6]: http://www.slf4j.org +[7]: https://opensource.org/license/mit +[8]: https://www.exasol.com/ +[9]: https://repo1.maven.org/maven2/com/exasol/exasol-jdbc/26.2.8/exasol-jdbc-26.2.8-license.txt +[10]: https://docs.sonarsource.com/sonarqube-server/latest/extension-guide/developing-a-plugin/plugin-basics/sonar-scanner-maven/sonar-maven-plugin/ +[11]: http://www.gnu.org/licenses/lgpl.txt +[12]: https://maven.apache.org/plugins/maven-toolchains-plugin/ [13]: https://www.apache.org/licenses/LICENSE-2.0.txt -[14]: https://maven.apache.org/plugins/maven-install-plugin/ -[15]: https://maven.apache.org/plugins/maven-resources-plugin/ -[16]: https://maven.apache.org/plugins/maven-site-plugin/ -[17]: http://docs.sonarqube.org/display/PLUG/Plugin+Library/sonar-scanner-maven/sonar-maven-plugin -[18]: http://www.gnu.org/licenses/lgpl.txt -[19]: https://maven.apache.org/plugins/maven-toolchains-plugin/ -[20]: https://maven.apache.org/plugins/maven-compiler-plugin/ -[21]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ -[22]: https://www.mojohaus.org/flatten-maven-plugin/ -[23]: https://sonatype.github.io/ossindex-maven/maven-plugin/ -[24]: http://www.apache.org/licenses/LICENSE-2.0.txt -[25]: https://maven.apache.org/surefire/maven-surefire-plugin/ -[26]: https://www.mojohaus.org/versions/versions-maven-plugin/ -[27]: https://basepom.github.io/duplicate-finder-maven-plugin -[28]: http://www.apache.org/licenses/LICENSE-2.0.html -[29]: https://maven.apache.org/plugins/maven-artifact-plugin/ -[30]: https://maven.apache.org/plugins/maven-deploy-plugin/ -[31]: https://maven.apache.org/plugins/maven-gpg-plugin/ -[32]: https://maven.apache.org/plugins/maven-source-plugin/ -[33]: https://maven.apache.org/plugins/maven-javadoc-plugin/ -[34]: https://central.sonatype.org -[35]: https://maven.apache.org/surefire/maven-failsafe-plugin/ -[36]: https://www.jacoco.org/jacoco/trunk/doc/maven.html -[37]: https://www.eclipse.org/legal/epl-2.0/ -[38]: https://github.com/exasol/quality-summarizer-maven-plugin/ -[39]: https://github.com/exasol/quality-summarizer-maven-plugin/blob/main/LICENSE -[40]: https://github.com/exasol/error-code-crawler-maven-plugin/ -[41]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE -[42]: https://github.com/git-commit-id/git-commit-id-maven-plugin -[43]: http://www.gnu.org/licenses/lgpl-3.0.txt -[44]: https://github.com/exasol/project-keeper/ -[45]: https://github.com/exasol/project-keeper/blob/main/LICENSE +[14]: https://maven.apache.org/plugins/maven-compiler-plugin/ +[15]: https://maven.apache.org/enforcer/maven-enforcer-plugin/ +[16]: https://www.mojohaus.org/flatten-maven-plugin/ +[17]: https://sonatype.github.io/ossindex-maven/maven-plugin/ +[18]: http://www.apache.org/licenses/LICENSE-2.0.txt +[19]: https://maven.apache.org/surefire/maven-surefire-plugin/ +[20]: https://www.mojohaus.org/versions/versions-maven-plugin/ +[21]: https://basepom.github.io/duplicate-finder-maven-plugin +[22]: http://www.apache.org/licenses/LICENSE-2.0.html +[23]: https://maven.apache.org/plugins/maven-artifact-plugin/ +[24]: https://maven.apache.org/plugins/maven-deploy-plugin/ +[25]: https://maven.apache.org/plugins/maven-source-plugin/ +[26]: https://maven.apache.org/plugins/maven-javadoc-plugin/ +[27]: https://github.com/spdx/spdx-maven-plugin +[28]: https://www.mojohaus.org/build-helper-maven-plugin/ +[29]: https://spdx.org/licenses/MIT.txt +[30]: https://maven.apache.org/plugins/maven-gpg-plugin/ +[31]: https://central.sonatype.org +[32]: https://maven.apache.org/surefire/maven-failsafe-plugin/ +[33]: https://www.jacoco.org/jacoco/trunk/doc/maven.html +[34]: https://www.eclipse.org/legal/epl-2.0/ +[35]: https://github.com/exasol/error-code-crawler-maven-plugin/ +[36]: https://github.com/exasol/error-code-crawler-maven-plugin/blob/main/LICENSE +[37]: https://github.com/git-commit-id/git-commit-id-maven-plugin +[38]: http://www.gnu.org/licenses/lgpl-3.0.txt +[39]: https://github.com/exasol/project-keeper/ +[40]: https://github.com/exasol/project-keeper/blob/main/LICENSE +[41]: https://maven.apache.org/plugins/maven-clean-plugin/ +[42]: https://maven.apache.org/plugins/maven-resources-plugin/ +[43]: https://maven.apache.org/plugins/maven-install-plugin/ +[44]: https://maven.apache.org/plugins/maven-site-plugin/ diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md index a552e93..a4f1635 100644 --- a/doc/changes/changelog.md +++ b/doc/changes/changelog.md @@ -1,5 +1,6 @@ # Changes +* [2.0.0](changes_2.0.0.md) * [1.1.6](changes_1.1.6.md) * [1.1.5](changes_1.1.5.md) * [1.1.4](changes_1.1.4.md) diff --git a/doc/changes/changes_2.0.0.md b/doc/changes/changes_2.0.0.md new file mode 100644 index 0000000..bf57e62 --- /dev/null +++ b/doc/changes/changes_2.0.0.md @@ -0,0 +1,58 @@ +# Database Cleaner 2.0.0, released 2026-07-28 + +Code name: Fixed vulnerability CVE-2026-9563 in org.eclipse.parsson:parsson:jar:1.1.7:test + +## Summary + +**Breaking Change:** Starting with this release, Exasol version 7.1 is no longer supported. We only test against the latest version and the latest LTS version. + +This release fixes the following vulnerability: + +### CVE-2026-9563 (CWE-400) in dependency `org.eclipse.parsson:parsson:jar:1.1.7:test` +In Eclipse Parsson published Maven Central artifacts before version 1.1.8, the JSON parser did not enforce a default maximum on the number of characters consumed while parsing a single JSON document. Applications that parse attacker- controlled JSON can be forced to consume excessive CPU and memory by processing very large documents, including large arrays, objects, strings, numbers, whitespace, or nested structures, resulting in a denial of service. Eclipse Parsson 1.1.8 introduces a configurable maximum parsing limit with a default limit of 15 million parser-consumed characters. +#### References +* https://guide.sonatype.com/vulnerability/CVE-2026-9563?component-type=maven&component-name=org.eclipse.parsson%2Fparsson&utm_source=ossindex-client&utm_medium=integration&utm_content=1.8.1 +* http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2026-9563 +* https://github.com/eclipse-ee4j/parsson/pull/169 +* https://gitlab.eclipse.org/security/vulnerability-reports/-/work_items/444 + +## Security + +* #26: Fixed vulnerability CVE-2026-9563 in dependency `org.eclipse.parsson:parsson:jar:1.1.7:test` + +## Bugfixes + +* #20: Fixed purging database when user owns a schema + +## Dependency Updates + +### Runtime Dependency Updates + +* Updated `com.exasol:exasol-jdbc:25.2.5` to `26.2.8` + +### Test Dependency Updates + +* Updated `com.exasol:exasol-testcontainers:7.2.0` to `8.0.1` +* Updated `org.junit.jupiter:junit-jupiter-api:5.13.4` to `5.14.4` +* Updated `org.slf4j:slf4j-jdk14:2.0.17` to `2.0.18` +* Removed `org.testcontainers:testcontainers-junit-jupiter:2.0.1` + +### Plugin Dependency Updates + +* Updated `com.exasol:error-code-crawler-maven-plugin:2.0.5` to `2.1.0` +* Updated `com.exasol:project-keeper-maven-plugin:5.4.3` to `5.7.4` +* Removed `com.exasol:quality-summarizer-maven-plugin:0.2.1` +* Updated `io.github.git-commit-id:git-commit-id-maven-plugin:9.0.2` to `10.0.0` +* Updated `org.apache.maven.plugins:maven-compiler-plugin:3.14.1` to `3.15.0` +* Updated `org.apache.maven.plugins:maven-enforcer-plugin:3.6.2` to `3.6.3` +* Updated `org.apache.maven.plugins:maven-failsafe-plugin:3.5.4` to `3.5.6` +* Updated `org.apache.maven.plugins:maven-resources-plugin:3.3.1` to `3.5.0` +* Updated `org.apache.maven.plugins:maven-site-plugin:3.21.0` to `3.22.0` +* Updated `org.apache.maven.plugins:maven-source-plugin:3.2.1` to `3.4.0` +* Updated `org.apache.maven.plugins:maven-surefire-plugin:3.5.4` to `3.5.6` +* Added `org.codehaus.mojo:build-helper-maven-plugin:3.6.1` +* Updated `org.codehaus.mojo:versions-maven-plugin:2.19.1` to `2.21.0` +* Updated `org.jacoco:jacoco-maven-plugin:0.8.14` to `0.8.15` +* Updated `org.sonarsource.scanner.maven:sonar-maven-plugin:5.2.0.4988` to `5.7.0.6970` +* Updated `org.sonatype.central:central-publishing-maven-plugin:0.9.0` to `0.11.0` +* Added `org.spdx:spdx-maven-plugin:1.0.4` diff --git a/pk_generated_parent.pom b/pk_generated_parent.pom index 91547bd..01debad 100644 --- a/pk_generated_parent.pom +++ b/pk_generated_parent.pom @@ -3,7 +3,7 @@ 4.0.0 com.exasol database-cleaner-generated-parent - 1.1.6 + 2.0.0 pom UTF-8 @@ -13,6 +13,7 @@ exasol https://sonarcloud.io + false true false false @@ -41,31 +42,45 @@ + + + + org.apache.maven.plugins + maven-clean-plugin + 3.5.0 + + + org.apache.maven.plugins + maven-install-plugin + 3.1.4 + + + org.apache.maven.plugins + maven-resources-plugin + 3.5.0 + + + org.apache.maven.plugins + maven-site-plugin + 3.22.0 + + + org.codehaus.mojo + exec-maven-plugin + 3.6.3 + + + true + + + + + - - org.apache.maven.plugins - maven-clean-plugin - 3.5.0 - - - org.apache.maven.plugins - maven-install-plugin - 3.1.4 - - - org.apache.maven.plugins - maven-resources-plugin - 3.3.1 - - - org.apache.maven.plugins - maven-site-plugin - 3.21.0 - org.sonarsource.scanner.maven sonar-maven-plugin - 5.2.0.4988 + 5.7.0.6970 org.apache.maven.plugins @@ -89,10 +104,9 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.1 + 3.15.0 - ${java.version} - ${java.version} + ${java.version} true -Xlint:all @@ -103,7 +117,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.6.2 + 3.6.3 enforce-maven @@ -154,6 +168,8 @@ 3.2.0 ossindex + + ${ossindexSkip} @@ -168,18 +184,23 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 + 3.5.6 - - -Djava.util.logging.config.file=src/test/resources/logging.properties ${argLine} + ${argLine} + + true + + + + src/test/resources/logging.properties + ${test.excludeTags} org.codehaus.mojo versions-maven-plugin - 2.19.1 + 2.21.0 display-updates @@ -253,33 +274,10 @@ true - - org.apache.maven.plugins - maven-gpg-plugin - 3.2.8 - - - sign-artifacts - verify - - sign - - - - --pinentry-mode - loopback - - - - - org.apache.maven.plugins maven-source-plugin - - 3.2.1 + 3.4.0 attach-sources @@ -303,18 +301,93 @@ UTF-8 + en true true true true - ${java.version} + ${java.version} + true + + + + + org.spdx + spdx-maven-plugin + 1.0.4 + + + build-spdx + package + + createSPDX + + + + + build + + true + true + true + true + false + false + Copyright (c) Exasol + false + JSON-LD + ${project.build.directory}/site/${project.groupId}.${project.artifactId}-${project.version}.spdx3.json + + + org.codehaus.mojo + build-helper-maven-plugin + 3.6.1 + + + attach-spdx-sbom + package + + attach-artifact + + + + + ${project.build.directory}/site/${project.groupId}.${project.artifactId}-${project.version}.spdx3.json + spdx + sbom + + + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 3.2.8 + + + sign-artifacts + verify + + sign + + + + --pinentry-mode + loopback + + + + + org.sonatype.central central-publishing-maven-plugin - 0.9.0 + 0.11.0 true maven-central-portal @@ -328,11 +401,16 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.5.4 + 3.5.6 - - -Djava.util.logging.config.file=src/test/resources/logging.properties ${argLine} - + ${argLine} + + true + + + + src/test/resources/logging.properties + ${test.excludeTags} @@ -348,7 +426,7 @@ org.jacoco jacoco-maven-plugin - 0.8.14 + 0.8.15 prepare-agent @@ -386,23 +464,10 @@ - - com.exasol - quality-summarizer-maven-plugin - 0.2.1 - - - summarize-metrics - - summarize - - - - com.exasol error-code-crawler-maven-plugin - 2.0.5 + 2.1.0 verify @@ -415,7 +480,7 @@ io.github.git-commit-id git-commit-id-maven-plugin - 9.0.2 + 10.0.0 get-the-git-infos diff --git a/pom.xml b/pom.xml index ca8a5e2..2b9a0aa 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.exasol database-cleaner - 1.1.6 + 2.0.0 database-cleaner Tool that deletes all objects in an Exasol database https://github.com/exasol/database-cleaner/ @@ -11,13 +11,13 @@ com.exasol exasol-jdbc - 25.2.5 + 26.2.8 runtime com.exasol exasol-testcontainers - 7.2.0 + 8.0.1 test @@ -26,12 +26,6 @@ - - org.testcontainers - testcontainers-junit-jupiter - 2.0.1 - test - org.hamcrest hamcrest @@ -42,33 +36,23 @@ org.junit.jupiter junit-jupiter-api - 5.13.4 + 5.14.4 test org.slf4j slf4j-jdk14 - 2.0.17 + 2.0.18 test - - org.sonatype.ossindex.maven - ossindex-maven-plugin - - - - CVE-2024-55551 - - - com.exasol project-keeper-maven-plugin - 5.4.3 + 5.7.4 @@ -82,7 +66,7 @@ database-cleaner-generated-parent com.exasol - 1.1.6 + 2.0.0 pk_generated_parent.pom diff --git a/src/test/java/com/exasol/dbcleaner/ExasolDatabaseCleanerIT.java b/src/test/java/com/exasol/dbcleaner/ExasolDatabaseCleanerIT.java index e1f6547..99a5712 100644 --- a/src/test/java/com/exasol/dbcleaner/ExasolDatabaseCleanerIT.java +++ b/src/test/java/com/exasol/dbcleaner/ExasolDatabaseCleanerIT.java @@ -6,16 +6,12 @@ import java.sql.Statement; import org.junit.jupiter.api.*; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; import com.exasol.containers.ExasolContainer; -@Testcontainers class ExasolDatabaseCleanerIT { - @Container - @SuppressWarnings("resource") // Will be closed by @Container annotation + @SuppressWarnings("resource") // Will be closed in stopContainer() private static final ExasolContainer> CONTAINER = new ExasolContainer<>() .withReuse(true); private static Statement statement; @@ -23,11 +19,18 @@ class ExasolDatabaseCleanerIT { @BeforeAll static void beforeAll() throws SQLException { + CONTAINER.start(); statement = CONTAINER.createConnectionForUser(CONTAINER.getUsername(), CONTAINER.getPassword()) .createStatement(); cleaner = new ExasolDatabaseCleaner(statement); } + @AfterAll + static void stopContainer() throws SQLException { + statement.close(); + CONTAINER.stop(); + } + @AfterEach void after() throws SQLException { cleaner.cleanDatabase(); @@ -85,6 +88,13 @@ void testPurgeFunctionWithNonImplicitSchemaName() throws SQLException { assertDoesNotThrow(() -> createFunction("S1")); } + @Test + void testPurgeSchemaOwnedByDifferentUser() throws SQLException { + createDbaUserWithSchemaAndTable(); + cleaner.cleanDatabase(); + assertDoesNotThrow(this::createDbaUserWithSchemaAndTable); + } + private void createFunction(final String schemaName) throws SQLException { statement.executeUpdate("CREATE SCHEMA " + schemaName + ";"); statement.executeUpdate("CREATE FUNCTION " + schemaName @@ -110,4 +120,15 @@ private void createTable() throws SQLException { private void createConnection() throws SQLException { statement.executeUpdate("CREATE CONNECTION exa_connection TO '192.168.6.11:8563';"); } + + private void createDbaUserWithSchemaAndTable() throws SQLException { + statement.executeUpdate("CREATE USER other_user IDENTIFIED BY \"h12_xhz\""); + statement.executeUpdate("GRANT DBA TO other_user"); + try (Statement otherStatement = CONTAINER.createConnectionForUser("other_user", "h12_xhz") + .createStatement()) { + otherStatement.executeUpdate("CREATE SCHEMA OTHER_SCHEMA;"); + otherStatement.executeUpdate( + "CREATE TABLE OTHER_SCHEMA.T1 (ID INT);"); + } + } }