From 365ba4b6e35f2cbe7eafcd0850416ca9b858aec3 Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Sat, 1 Nov 2025 08:41:19 +0500 Subject: [PATCH 1/6] Add PostgreSQL 18 to Github Actions test environment --- .github/workflows/auto-pgsql180-tests.yml | 149 ++++++++++++++++++ .../workflows/dispatched-pgsql10-tests.yml | 97 +++++++++--- Containers/postgres/do-postgres-18 | 12 ++ 3 files changed, 239 insertions(+), 19 deletions(-) create mode 100644 .github/workflows/auto-pgsql180-tests.yml create mode 100644 Containers/postgres/do-postgres-18 diff --git a/.github/workflows/auto-pgsql180-tests.yml b/.github/workflows/auto-pgsql180-tests.yml new file mode 100644 index 000000000..e487d6559 --- /dev/null +++ b/.github/workflows/auto-pgsql180-tests.yml @@ -0,0 +1,149 @@ +name: ⚙🐘 Automated PostgreSQL 18.0 tests +run-name: Tests on PostgreSQL 18.0 tests triggered by '${{ github.event_name }}'. Run No ${{ github.run_number }}. + +on: + push: + branches: + - 'master' + - 'master-*' + paths: + # containers + - 'Containers/postgres/do-postgres-18' + - 'Containers/postgres/**.sh' + - 'Containers/postgres/**.sql' + # main project - most common part, that may have changes that affect + - 'Orm/Xtensive.Orm/Orm/Providers/**' + - 'Orm/Xtensive.Orm/Orm/Rse/**' + - 'Orm/Xtensive.Orm/Orm/Upgrade/**' + - 'Orm/Xtensive.Orm/Sql/**' + # provider + - 'Orm/Xtensive.Orm.MySql/**' + - '!Orm/Xtensive.Orm.MySql/**.csproj' + - '!Orm/Xtensive.Orm.MySql/NuGetContent/**' + # main test project - any code change + - 'Orm/Xtensive.Orm.Tests/Issues/**' + - 'Orm/Xtensive.Orm.Tests/Storage/**' + - 'Orm/Xtensive.Orm.Tests/Upgrade/**' + # sql tests - general and provider-specific + - 'Orm/Xtensive.Orm.Tests.Sql/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Firebird/**' + - '!Orm/Xtensive.Orm.Tests.Sql/MySQL/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Oracle/**' + #- '!Orm/Xtensive.Orm.Tests.Sql/PostgreSql/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Sqlite/**' + - '!Orm/Xtensive.Orm.Tests.Sql/SqlServer/**' + - '!Orm/Xtensive.Orm.Tests.Sql/SqlServerCe/**' + - '!Orm/Xtensive.Orm.Tests.Sql/**.csproj' + # ability to trigger on demand + - 'TestFileForBuildServerTests.txt' + + pull_request: + branches: + - 'master' + paths: + # containers + - 'Containers/postgres/do-postgres-18' + - 'Containers/postgres/**.sh' + - 'Containers/postgres/**.sql' + # main project - most common part, that may have changes that affect + - 'Orm/Xtensive.Orm/Orm/Providers/**' + - 'Orm/Xtensive.Orm/Orm/Rse/**' + - 'Orm/Xtensive.Orm/Orm/Upgrade/**' + - 'Orm/Xtensive.Orm/Sql/**' + # provider + - 'Orm/Xtensive.Orm.MySql/**' + - '!Orm/Xtensive.Orm.MySql/**.csproj' + - '!Orm/Xtensive.Orm.MySql/NuGetContent/**' + # main test project - any code change + - 'Orm/Xtensive.Orm.Tests/Issues/**' + - 'Orm/Xtensive.Orm.Tests/Storage/**' + - 'Orm/Xtensive.Orm.Tests/Upgrade/**' + # sql tests - general and provider-specific + - 'Orm/Xtensive.Orm.Tests.Sql/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Firebird/**' + - '!Orm/Xtensive.Orm.Tests.Sql/MySQL/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Oracle/**' + #- '!Orm/Xtensive.Orm.Tests.Sql/PostgreSql/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Sqlite/**' + - '!Orm/Xtensive.Orm.Tests.Sql/SqlServer/**' + - '!Orm/Xtensive.Orm.Tests.Sql/SqlServerCe/**' + - '!Orm/Xtensive.Orm.Tests.Sql/**.csproj' + # ability to trigger on demand + - 'TestFileForBuildServerTests.txt' + + pull_request_review: + branches: + - 'master' + paths: + # containers + - 'Containers/postgres/do-postgres-18' + - 'Containers/postgres/**.sh' + - 'Containers/postgres/**.sql' + # main project - most common part, that may have changes that affect + - 'Orm/Xtensive.Orm/Orm/Providers/**' + - 'Orm/Xtensive.Orm/Orm/Rse/**' + - 'Orm/Xtensive.Orm/Orm/Upgrade/**' + - 'Orm/Xtensive.Orm/Sql/**' + # provider + - 'Orm/Xtensive.Orm.MySql/**' + - '!Orm/Xtensive.Orm.MySql/**.csproj' + - '!Orm/Xtensive.Orm.MySql/NuGetContent/**' + # main test project - any code change + - 'Orm/Xtensive.Orm.Tests/Issues/**' + - 'Orm/Xtensive.Orm.Tests/Storage/**' + - 'Orm/Xtensive.Orm.Tests/Upgrade/**' + # sql tests - general and provider-specific + - 'Orm/Xtensive.Orm.Tests.Sql/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Firebird/**' + - '!Orm/Xtensive.Orm.Tests.Sql/MySQL/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Oracle/**' + #- '!Orm/Xtensive.Orm.Tests.Sql/PostgreSql/**' + - '!Orm/Xtensive.Orm.Tests.Sql/Sqlite/**' + - '!Orm/Xtensive.Orm.Tests.Sql/SqlServer/**' + - '!Orm/Xtensive.Orm.Tests.Sql/SqlServerCe/**' + - '!Orm/Xtensive.Orm.Tests.Sql/**.csproj' + # ability to trigger on demand + - 'TestFileForBuildServerTests.txt' + +# new commits with the same key will cancel previously run workflows +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + actions: read + checks: write + +jobs: + test_on_pgsql180: + name: Tests on PostgreSQL 18.0 + strategy: + matrix: + net: [ 'net8.0' ] # for cold runs we run for one .net + # For security reasons we allow test runs either for pushes from the team or for pull-requests after their changes were seen and approved by someone + # + # push filter - to cover pushes from the team to main branch of major version + # first 'pull_request_review' filter - to cover external pull-requests, since there are major security concerns about content of pull-request we cannot allow auto-runs of tests + # second 'pull_request_review' - to cover internal pull-requests that were not covered by 'on push' trigger + # + if: | + github.event_name == 'push' + || (github.event_name == 'pull_request_review' + && github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name + && startsWith(github.event.pull_request.base.ref, 'master') + && github.event.review.state == 'approved') + || (github.event_name == 'pull_request' + && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name + && !startsWith(github.head_ref, 'master-')) + uses: DataObjects-NET/dataobjects-net/.github/workflows/reusable-storage-dependant-tests.yml@master + with: + storage: pgsql180 + build_config: Release + target_framework: ${{ matrix.net }} + test_output_verbosity: minimal + test_run_timeout: 30 + run_main: true + run_sql: true + run_extensions: true + publish_raw_results: false \ No newline at end of file diff --git a/.github/workflows/dispatched-pgsql10-tests.yml b/.github/workflows/dispatched-pgsql10-tests.yml index c24b97ef2..a579501a5 100644 --- a/.github/workflows/dispatched-pgsql10-tests.yml +++ b/.github/workflows/dispatched-pgsql10-tests.yml @@ -13,21 +13,24 @@ on: type: boolean default: false required: true - pgsql100: - description: 'PostgreSQL 10' - type: boolean - default: false - required: true - pgsql110: - description: 'PostgreSQL 11' - type: boolean - default: false - required: true - pgsql120: - description: 'PostgreSQL 12' - type: boolean - default: false - required: true + # EOL - moved to addtional versions + #pgsql100: + # description: 'PostgreSQL 10' + # type: boolean + # default: false + # required: true + # EOL - moved to addtional versions + #pgsql110: + # description: 'PostgreSQL 11' + # type: boolean + # default: false + # required: true + # EOL - moved to addtional versions + #pgsql120: + # description: 'PostgreSQL 12' + # type: boolean + # default: false + # required: true pgsql130: description: 'PostgreSQL 13' type: boolean @@ -53,6 +56,22 @@ on: type: boolean default: true required: true + pgsql180: + description: 'PostgreSQL 18' + type: boolean + default: false + required: true + #pgsql190: + # description: 'PostgreSQL 19' + # type: boolean + # default: false + # required: true + additional_versions: + description: 'Additional versions (separated by ;)' + required: false + default: 'pgsql100;pgsql110;pgsql120' + type: string + # new commits with the same key will cancel previously run workflows concurrency: @@ -67,7 +86,7 @@ permissions: jobs: test_on_pgsql100: name: Tests on PostgreSQL 10 - if: ${{ inputs.pgsql100 }} + if: ${{ contains(inputs.additional_versions, 'pgsql100') }} strategy: matrix: net: [ 'net6.0', 'net7.0', 'net8.0' ] @@ -87,7 +106,7 @@ jobs: test_on_pgsql110: name: Tests on PostgreSQL 11 - if: ${{ inputs.pgsql110 }} + if: ${{ contains(inputs.additional_versions, 'pgsql110') }} strategy: matrix: net: [ 'net6.0', 'net7.0', 'net8.0' ] @@ -107,7 +126,7 @@ jobs: test_on_pgsql120: name: Tests on PostgreSQL 12 - if: ${{ inputs.pgsql120 }} + if: ${{ contains(inputs.additional_versions, 'pgsql120') }} strategy: matrix: net: [ 'net6.0', 'net7.0', 'net8.0' ] @@ -224,4 +243,44 @@ jobs: run_main: true run_sql: true run_extensions: true - publish_raw_results: true \ No newline at end of file + publish_raw_results: true + + test_on_pgsql180: + name: Tests on PostgreSQL 18 + if: ${{ inputs.pgsql180 }} + strategy: + matrix: + net: [ 'net6.0', 'net7.0', 'net8.0' ] + uses: DataObjects-NET/dataobjects-net/.github/workflows/reusable-storage-dependant-tests.yml@master + with: + storage: pgsql180 + build_config: Release + target_framework: ${{ matrix.net }} + specific_sha: ${{ inputs.specific_sha }} + show_all_fails: ${{ fromJSON(inputs.show_all_fails) }} + test_output_verbosity: minimal + test_run_timeout: 30 + run_main: true + run_sql: true + run_extensions: true + publish_raw_results: true + + #test_on_pgsql190: + # name: Tests on PostgreSQL 19 + # if: ${{ inputs.pgsql190 }} + # strategy: + # matrix: + # net: [ 'net6.0', 'net7.0', 'net8.0' ] + # uses: DataObjects-NET/dataobjects-net/.github/workflows/reusable-storage-dependant-tests.yml@master + # with: + # storage: pgsql190 + # build_config: Release + # target_framework: ${{ matrix.net }} + # specific_sha: ${{ inputs.specific_sha }} + # show_all_fails: ${{ fromJSON(inputs.show_all_fails) }} + # test_output_verbosity: minimal + # test_run_timeout: 30 + # run_main: true + # run_sql: true + # run_extensions: true + # publish_raw_results: true \ No newline at end of file diff --git a/Containers/postgres/do-postgres-18 b/Containers/postgres/do-postgres-18 new file mode 100644 index 000000000..01dcd51f3 --- /dev/null +++ b/Containers/postgres/do-postgres-18 @@ -0,0 +1,12 @@ +FROM postgres:18.0 + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + #Actualize time zone database + apt-get install -y tzdata && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists + +COPY init-postgre-instance.sh /docker-entrypoint-initdb.d/ + +RUN chmod +x /docker-entrypoint-initdb.d/init-postgre-instance.sh \ No newline at end of file From 2ff7bff5d85a5e76775624400e61760205928628 Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Sat, 1 Nov 2025 08:42:02 +0500 Subject: [PATCH 2/6] Update ReadMe: supported databases section --- ReadMe.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReadMe.md b/ReadMe.md index 2edf4fa09..90c01798b 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -17,8 +17,8 @@ Supported databases: - MS SQL Server 2008 R2, 2012, 2014, 2016, 2017, 2019, 2022 - MS Azure SQL Database - Oracle 10g, 11g -- PostgreSQL 8.3, 8.4, 9.0, 9.1, 9.2, 10, 11, 12, 13, 14, 15, 16, 17 -- MySQL 5.6, 5.7, 8.0 +- PostgreSQL 8.3, 8.4, 9.0, 9.1, 9.2, 10, 11, 12, 13, 14, 15, 16, 17, 18 +- MySQL 5.6, 5.7, 8.x, 9.x - Firebird 2.5, 4.0 - Sqlite 3 From 5b1886b23c55021d47131450bd7d6982e9cdb6f8 Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Sat, 1 Nov 2025 08:50:03 +0500 Subject: [PATCH 3/6] Fix container file --- Containers/postgres/do-postgres-18 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Containers/postgres/do-postgres-18 b/Containers/postgres/do-postgres-18 index 01dcd51f3..895b8b059 100644 --- a/Containers/postgres/do-postgres-18 +++ b/Containers/postgres/do-postgres-18 @@ -7,6 +7,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ apt-get clean && \ rm -rf /var/lib/apt/lists -COPY init-postgre-instance.sh /docker-entrypoint-initdb.d/ +COPY init-postgres-instance.sh /docker-entrypoint-initdb.d/ -RUN chmod +x /docker-entrypoint-initdb.d/init-postgre-instance.sh \ No newline at end of file +RUN chmod +x /docker-entrypoint-initdb.d/init-postgres-instance.sh \ No newline at end of file From af1a8e9464d7e7e90b4e20f3af31f7b4672eb6e9 Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Sat, 1 Nov 2025 09:15:45 +0500 Subject: [PATCH 4/6] Bump version to 7.2.0-RC --- ChangeLog/{7.2.0-RC-dev.txt => 7.2.0-RC.txt} | 0 Version.props | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename ChangeLog/{7.2.0-RC-dev.txt => 7.2.0-RC.txt} (100%) diff --git a/ChangeLog/7.2.0-RC-dev.txt b/ChangeLog/7.2.0-RC.txt similarity index 100% rename from ChangeLog/7.2.0-RC-dev.txt rename to ChangeLog/7.2.0-RC.txt diff --git a/Version.props b/Version.props index 6caef4323..c02501b31 100644 --- a/Version.props +++ b/Version.props @@ -3,7 +3,7 @@ 7.2.0 - RC-dev + RC From 7d19bf929da558f8c2b799a864dbc4d51c1e16ef Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Sat, 1 Nov 2025 14:27:05 +0500 Subject: [PATCH 5/6] Change version to next --- Version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Version.props b/Version.props index c02501b31..8d395a6b6 100644 --- a/Version.props +++ b/Version.props @@ -3,7 +3,7 @@ 7.2.0 - RC + dev From b45662ed7df8b1afd8a3f0f2fbb41ce620acfc48 Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Sat, 1 Nov 2025 14:27:24 +0500 Subject: [PATCH 6/6] Create changlog file --- ChangeLog/7.2.0-dev.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ChangeLog/7.2.0-dev.txt diff --git a/ChangeLog/7.2.0-dev.txt b/ChangeLog/7.2.0-dev.txt new file mode 100644 index 000000000..e69de29bb