diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 000000000000..2402d43b9f8d
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,7 @@
+# Initial commits that enabled spotless automatic formatting
+59731c089e9d649a663c81d9622b54557d6aba37
+4d63ffd98cdead513ab0be0fa23f9787423092d3
+# Envers removal/restore
+9c7dd3bf34dfbb2f4fa9eb79a0294c2cc759c836
+b2a528f2945cee26667b22b867ccef143b7c430c
+4273f1cde06f3622f50c2846078398c1977a49c4
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000000..8400dd4b2be9
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,17 @@
+# By default, detect text files automatically, and use whatever line terminators make sense for the OS
+* text=auto eol=lf
+
+# Java files are text, and we want Java-friendly readable hunk headers for diff
+*.java text diff=java eol=lf
+
+# Force LF/CRLF format for files that are known to require it.
+*.sh text eol=lf
+*.bat text eol=crlf
+
+# For some reason the above is not enough, in particular for gradlew.bat,
+# as some commands (git status, git add --renormalize) will still change its line endings to LF.
+# So, we explicitly tell git not to mess with *.bat line endings.
+# It's annoying as git won't show diffs for these files anymore,
+# but that's the best I could come up with after an hour of head-scratching.
+*.bat binary
+
diff --git a/.github/ci-prerequisites-atlas.sh b/.github/ci-prerequisites-atlas.sh
new file mode 100755
index 000000000000..b0a16f22b1e8
--- /dev/null
+++ b/.github/ci-prerequisites-atlas.sh
@@ -0,0 +1,6 @@
+# Reclaims disk space and sanitizes user home on Atlas infrastructure
+
+# We use the GitHub cache for the relevant parts of these directories.
+# Also, we do not want to keep things like ~/.gradle/build-scan-data.
+rm -rf ~/.gradle/
+rm -rf ~/.m2/
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index ecaad86410ba..ed5881241baa 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -6,15 +6,139 @@ registries:
username: dummy # Required by dependabot
password: dummy # Required by dependabot
updates:
- - package-ecosystem: "gradle"
+ - package-ecosystem: github-actions
directory: "/"
+ schedule:
+ interval: monthly
+ groups:
+ workflow-actions:
+ patterns:
+ - "*"
allow:
- - dependency-name: "com.gradle*"
+ - dependency-name: "actions/*"
+ - dependency-name: "redhat-actions/*"
+ - package-ecosystem: "gradle"
+ directory: "/"
registries:
- gradle-plugin-portal
schedule:
interval: "weekly"
- - package-ecosystem: github-actions
- directory: "/"
- schedule:
- interval: daily
+ day: "wednesday"
+ open-pull-requests-limit: 20
+ groups:
+ # These are used in tooling we publish (Gradle, Ant, Maven plugins)
+ # and thus must be treated as runtime dependencies,
+ # which cannot be included in the build-dependencies group below.
+ tooling-dependencies:
+ patterns:
+ # Note: Gradle tooling dependencies seem to be tied to the version of Gradle we use for building.
+ - "org.apache.ant*"
+ - "org.apache.maven:maven-plugin-api"
+ - "org.apache.maven:maven-project"
+ - "org.apache.maven.shared:file-management"
+ - "org.apache.maven.plugin-tools:maven-plugin-annotations"
+ # This group combines all build-only dependencies. Published artifacts do not depend on them.
+ # Grouping such dependencies will make Dependabot create PRs with a branch name
+ # following the pattern (`dependabot/maven/build-dependencies-.*`)
+ # and with a title like `Bump the build-dependencies group with 8 updates` that we can easily
+ # use for Hibernate Bot rules.
+ build-dependencies:
+ patterns:
+ # Gradle plugins:
+ - "com.gradle*"
+ - "org.moditect*"
+ - "de.thetaphi*"
+ - "org.gradlex*"
+ - "org.hibernate.build*"
+ - "org.hibernate.orm.build*"
+ - "org.hibernate.orm.database-service*"
+ - "org.hibernate.orm.antlr*"
+ - "io.github.gradle-nexus*"
+ - "biz.aQute.bnd*"
+ - "org.checkerframework*"
+ - "org.jetbrains.gradle*"
+ - "com.dorongold*"
+ - "org.asciidoctor*"
+ - "com.diffplug.spotless*"
+ # Local build plugin dependencies:
+ - "org.apache.maven*"
+ - "org.apache.httpcomponents*"
+ # DB drivers:
+ - "com.h2database:h2"
+ - "org.orbisgis:h2gis"
+ - "org.hsqldb:hsqldb"
+ - "org.apache.derby*"
+ - "org.postgresql:*"
+ - "com.mysql:mysql-connector-j"
+ - "org.mariadb.jdbc:mariadb-java-client"
+ - "com.oracle.database.*"
+ - "com.microsoft.sqlserver:mssql-jdbc"
+ - "com.ibm.db2:jcc"
+ - "com.sap.cloud.db.jdbc:ngdbc"
+ - "net.sourceforge.jtds:jtds"
+ - "com.ibm.informix:jdbc"
+ - "org.firebirdsql.jdbc:jaybird"
+ - "com.altibase:altibase-jdbc"
+ # Other test dependencies
+ - "org.apache.groovy:groovy-jsr223" # used for scripting maven plugin
+ - "org.apache.commons:commons-lang3" # used in hibernate-search-util-common tests
+ - "org.apache.commons:commons-math3" # used to solve dependency convergence for Wiremock
+ - "org.openjdk.jmh:*" # performance testing dependency
+ - "com.google.guava:guava" # Guava is used in our test utils
+ - "org.asciidoctor:*" # Asciidoctor is used for rendering the documentation
+ - "org.jboss.marshalling:jboss-marshalling" # JBeret IT dependency
+ - "org.wildfly.security:wildfly-security-manager" # JBeret IT dependency
+ - "org.springframework.boot:*" # Spring is only for ITs
+ - "io.agroal:agroal-spring-boot-starter" # part of Spring dependencies, is only for ITs
+ - "dev.snowdrop:narayana-spring-boot-starter" # part of Spring dependencies, is only for ITs
+ - "org.mockito:*"
+ - "org.hamcrest:*"
+ - "org.apache.logging.log4j:*"
+ - "org.assertj:*"
+ - "org.jsoup:*"
+ - "org.junit*"
+ - "org.jboss.weld.se:*"
+ - "org.jboss.narayana.*:*"
+ - "org.wildfly.transaction:*"
+ - "org.jboss:jboss-transaction-spi"
+ - "org.jboss.shrinkwrap*"
+ - "org.jboss.byteman*"
+ hibernate:
+ patterns:
+ - "org.hibernate*"
+ jakarta:
+ patterns:
+ - "jakarta.*"
+ - "org.glassfish*"
+ - "org.eclipse:yasson"
+ ignore:
+ # Avoid non-patch updates for complex dependencies and their implementation, even if we only use them for tests.
+ - dependency-name: "org.hibernate*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "jakarta.*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "org.jboss.narayana*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "org.jboss.weld*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "org.wildfly*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "org.glassfish*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "org.eclipse:yasson"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "org.apache.maven*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ - dependency-name: "org.apache.ant*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ # Avoid non-patch updates for JUnit, because it is exposed in hibernate-testing,
+ # which contains @BytecodeEnhanced, which is very sensitive to internal changes in JUnit.
+ - dependency-name: "org.junit*"
+ update-types: ["version-update:semver-major", "version-update:semver-minor"]
+ # Sticking to SLF4J 1.x for now since later versions require upgrading providers
+ # (Log4j, ... see https://www.slf4j.org/faq.html#changesInVersion200),
+ # and also because we only need this dependency for Maven,
+ # which is currently still on SLF4J 1.x
+ # (see https://central.sonatype.com/artifact/org.apache.maven/maven-embedder/3.9.9/dependencies)
+ - dependency-name: "org.slf4j:*"
+ update-types: ["version-update:semver-major"]
diff --git a/.github/hibernate-github-bot.yml b/.github/hibernate-github-bot.yml
index 21b7d779fb7c..55e504a033ec 100644
--- a/.github/hibernate-github-bot.yml
+++ b/.github/hibernate-github-bot.yml
@@ -2,9 +2,14 @@
jira:
projectKey: "HHH"
insertLinksInPullRequests: true
+ ignore:
+ # See the `build-dependencies` group in Dependabot's configuration file
+ - user: dependabot[bot]
+ titlePattern: "Bump.*the (build-dependencies|workflow-actions) group.*+"
ignoreFiles:
# Git
- ".git*"
+ - "*/.git*"
- ".mailmap"
# Gradle
- "gradlew*"
@@ -19,6 +24,7 @@ jira:
- "ci/"
- "databases/"
- "*.sh"
+ - "*.bat"
- "Jenkinsfile"
- "*/Jenkinsfile"
- "*.Jenkinsfile"
@@ -37,6 +43,8 @@ jira:
- "release/"
- "rules/"
- "shared/"
+ - ".sdkmanrc"
+ - "*/.sdkmanrc"
develocity:
buildScan:
addCheck: true
@@ -53,7 +61,13 @@ develocity:
pattern: "s390x"
replacement: "$0"
- column: "DB"
- pattern: "((?:h2|postgres(?:ql)?|pgsql|mysql|mariadb|mssql|derby|tidb|cockroach(?:db)?|oracle|db2|hsqldb|edb|sybase)(?:.*(?=_ci)|.*))(?:_ci)?"
+ pattern: "((?:h2|postgres(?:ql)?|pgsql|mysql|mariadb|mssql|tidb|cockroach(?:db)?|oracle|db2|hsqldb|edb|sybase)(?:.*(?=_ci)|.*))(?:_ci)?"
replacement: "$1"
- pattern: "main|HEAD|\\d+.\\d+|PR-\\d+"
- replacement: "" # Just remove these tags
\ No newline at end of file
+ replacement: "" # Just remove these tags
+licenseAgreement:
+ enabled: true
+ ignore:
+ # See the `build-dependencies` group in the Dependabot's configuration file
+ - user: dependabot[bot]
+ titlePattern: "Bump.*"
diff --git a/.github/workflows/atlas.yml b/.github/workflows/atlas.yml
deleted file mode 100644
index afd8892e7cf8..000000000000
--- a/.github/workflows/atlas.yml
+++ /dev/null
@@ -1,118 +0,0 @@
-# The main CI of Hibernate ORM is https://ci.hibernate.org/job/hibernate-orm-pipeline/.
-# However, Hibernate ORM builds run on GitHub actions regularly
-# to check that it still works and can be used in GitHub forks.
-# See https://docs.github.com/en/free-pro-team@latest/actions
-# for more information about GitHub actions.
-
-name: Hibernate ORM build-Atlas
-
-on:
- push:
- branches:
- - 'main'
- # WARNING: Using pull_request_target to access secrets, but we check out the PR head commit.
- # See checkout action for details.
- pull_request_target:
- branches:
- - 'main'
-
-permissions: {} # none
-
-# See https://github.com/hibernate/hibernate-orm/pull/4615 for a description of the behavior we're getting.
-concurrency:
- # Consider that two builds are in the same concurrency group (cannot run concurrently)
- # if they use the same workflow and are about the same branch ("ref") or pull request.
- group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
- # Cancel previous builds in the same concurrency group even if they are in process
- # for pull requests or pushes to forks (not the upstream repository).
- cancel-in-progress: ${{ github.event_name == 'pull_request_target' || github.repository != 'hibernate/hibernate-orm' }}
-
-jobs:
- build:
- permissions:
- contents: read
- name: Java 11
- # runs-on: ubuntu-latest
- runs-on: [self-hosted, Linux, X64, OCI]
- strategy:
- fail-fast: false
- matrix:
- include:
- - rdbms: oracle_atps
- - rdbms: oracle_db19c
- - rdbms: oracle_db21c
- - rdbms: oracle_db23c
- steps:
- - name: Check out commit already pushed to branch
- if: "! github.event.pull_request.number"
- uses: actions/checkout@v4
- with:
- persist-credentials: false
- - name: Check out PR head
- uses: actions/checkout@v4
- if: github.event.pull_request.number
- with:
- # WARNING: This is potentially dangerous since we're checking out unreviewed code,
- # and since we're using the pull_request_target event we can use secrets.
- # Thus, we must be extra careful to never expose secrets to steps that execute this code,
- # and to strictly limit our of secrets to those that only pose minor security threats.
- # This means in particular we won't expose Develocity credentials to the main gradle executions,
- # but instead will execute gradle a second time just to push build scans to Develocity;
- # see below.
- ref: "refs/pull/${{ github.event.pull_request.number }}/head"
- persist-credentials: false
- - name: Reclaim Disk Space
- run: .github/ci-prerequisites.sh
- - name: Start database
- env:
- RDBMS: ${{ matrix.rdbms }}
- RUNID: ${{ github.run_number }}
- run: ci/database-start.sh
- - name: Set up Java 11
- uses: graalvm/setup-graalvm@v1
- with:
- distribution: 'graalvm'
- java-version: '21'
- - name: Get year/month for cache key
- id: get-date
- run: echo "yearmonth=$(/bin/date -u "+%Y-%m")" >> $GITHUB_OUTPUT
- shell: bash
- - name: Cache Maven local repository
- uses: actions/cache@v4
- id: cache-maven
- with:
- path: |
- ~/.m2/repository
- ~/.gradle/caches/
- ~/.gradle/wrapper/
- # refresh cache every month to avoid unlimited growth
- key: maven-localrepo-${{ steps.get-date.outputs.yearmonth }}
- - name: Run build script
- env:
- RDBMS: ${{ matrix.rdbms }}
- RUNID: ${{ github.run_number }}
- # WARNING: exposes secrets, so must only be passed to a step that doesn't run unapproved code.
- # WARNING: As this runs on untrusted nodes, we use the same access key as for PRs:
- # it has limited access, essentially it can only push build scans.
- DEVELOCITY_ACCESS_KEY: "${{ github.event_name == 'push' && secrets.GRADLE_ENTERPRISE_ACCESS_KEY_PR || '' }}"
- run: ./ci/build-github.sh
- shell: bash
- - name: Publish Develocity build scan for previous build
- # Don't fail a build if publishing fails
- continue-on-error: true
- if: "${{ !cancelled() && github.event_name == 'pull_request_target' && github.repository == 'hibernate/hibernate-orm' }}"
- run: |
- ./gradlew buildScanPublishPrevious
- env:
- # WARNING: exposes secrets, so must only be passed to a step that doesn't run unapproved code.
- DEVELOCITY_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY_PR }}
- - name: Upload test reports (if Gradle failed)
- uses: actions/upload-artifact@v4
- if: failure()
- with:
- name: test-reports-java11-${{ matrix.rdbms }}
- path: |
- ./**/target/reports/tests/
- ./**/target/reports/checkstyle/
- - name: Omit produced artifacts from build cache
- run: ./ci/before-cache.sh
\ No newline at end of file
diff --git a/.github/workflows/ci-report.yml b/.github/workflows/ci-report.yml
new file mode 100644
index 000000000000..e1faf992097f
--- /dev/null
+++ b/.github/workflows/ci-report.yml
@@ -0,0 +1,78 @@
+name: GH Actions CI reporting
+
+on:
+ workflow_run:
+ workflows: [ "GH Actions CI" ]
+ types: [ completed ]
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ publish-build-scans:
+ name: Publish Develocity build scans
+ if: github.repository == 'hibernate/hibernate-orm' && github.event.workflow_run.conclusion != 'cancelled'
+ runs-on: ubuntu-latest
+ steps:
+ # Checkout target branch which has trusted code
+ - name: Check out target branch
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
+ ref: ${{ github.ref }}
+ - name: Set up JDK
+ uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+
+ - name: Generate cache key
+ id: cache-key
+ run: |
+ CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}"
+ CURRENT_MONTH=$(/bin/date -u "+%Y-%m")
+ CURRENT_DAY=$(/bin/date -u "+%d")
+ ROOT_CACHE_KEY="buildtool-cache"
+ echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT
+ echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT
+ echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT
+ - name: Restore Maven/Gradle Dependency/Dist Caches
+ uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ with:
+ path: |
+ ~/.m2/repository/
+ ~/.m2/wrapper/
+ ~/.gradle/caches/modules-2
+ ~/.gradle/wrapper/
+ key: ${{ steps.cache-key.outputs.buildtool-cache-key }}
+ restore-keys: |
+ ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}-
+ ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}-
+
+ - name: Download GitHub Actions artifacts for the Develocity build scans
+ id: downloadBuildScan
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+ with:
+ pattern: build-scan-data-*
+ github-token: ${{ github.token }}
+ repository: ${{ github.repository }}
+ run-id: ${{ github.event.workflow_run.id }}
+ path: /tmp/downloaded-build-scan-data/
+ # Don't fail the build if there are no matching artifacts
+ continue-on-error: true
+ - name: Publish Develocity build scans for previous builds
+ if: ${{ steps.downloadBuildScan.outcome != 'failure'}}
+ run: |
+ shopt -s nullglob # Don't run the loop below if there are no artifacts
+ status=0
+ mkdir -p ~/.gradle/
+ for build_scan_data_directory in /tmp/downloaded-build-scan-data/*
+ do
+ rm -rf ~/.gradle/build-scan-data
+ mv "$build_scan_data_directory" ~/.gradle/build-scan-data \
+ && ./gradlew --no-build-cache buildScanPublishPrevious || status=1
+ done
+ exit $status
+ env:
+ DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY_PR }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 000000000000..442c46f96a72
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,339 @@
+name: GH Actions CI
+
+on:
+ push:
+ branches:
+ # Pattern order matters: the last matching inclusion/exclusion wins
+ - 'main'
+ # We don't want to run CI on branches for dependabot, just on the PR.
+ - '!dependabot/**'
+ pull_request:
+ branches:
+ - 'main'
+ # Ignore dependabot PRs that are not just about build dependencies or workflows;
+ # we'll reject such PRs and send one ourselves.
+ - '!dependabot/**'
+ - 'dependabot/maven/build-dependencies-**'
+ - 'dependabot/github_actions/workflow-actions-**'
+
+permissions: { } # none
+
+# See https://github.com/hibernate/hibernate-orm/pull/4615 for a description of the behavior we're getting.
+concurrency:
+ # Consider that two builds are in the same concurrency group (cannot run concurrently)
+ # if they use the same workflow and are about the same branch ("ref") or pull request.
+ group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
+ # Cancel previous builds in the same concurrency group even if they are in progress
+ # for pull requests or pushes to forks (not the upstream repository).
+ cancel-in-progress: ${{ github.event_name == 'pull_request' || github.repository != 'hibernate/hibernate-orm' }}
+
+jobs:
+
+ # Main job for h2/docker DBs.
+ build:
+ permissions:
+ contents: read
+ name: OpenJDK 21 - ${{matrix.rdbms}}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - rdbms: h2
+ - rdbms: hsqldb
+ - rdbms: mysql
+ - rdbms: mariadb
+ - rdbms: postgresql
+ - rdbms: edb
+ - rdbms: oracle
+ - rdbms: db2
+ - rdbms: mssql
+ - rdbms: sybase
+ # Running with CockroachDB requires at least 2-4 vCPUs, which we don't have on GH Actions runners
+ # - rdbms: cockroachdb
+ # Running with HANA requires at least 8GB memory just for the database, which we don't have on GH Actions runners
+ # - rdbms: hana
+ steps:
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
+ - name: Reclaim Disk Space
+ run: .github/ci-prerequisites.sh
+ - name: Start database
+ env:
+ RDBMS: ${{ matrix.rdbms }}
+ run: ci/database-start.sh
+ - name: Set up Java 21
+ uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+
+ - name: Generate cache key
+ id: cache-key
+ run: |
+ CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}"
+ CURRENT_MONTH=$(/bin/date -u "+%Y-%m")
+ CURRENT_DAY=$(/bin/date -u "+%d")
+ ROOT_CACHE_KEY="buildtool-cache"
+ echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT
+ echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT
+ echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT
+ - name: Cache Maven/Gradle Dependency/Dist Caches
+ id: cache-maven
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ # if it's not a pull request, we restore and save the cache
+ if: github.event_name != 'pull_request'
+ with:
+ path: |
+ ~/.m2/repository/
+ ~/.m2/wrapper/
+ ~/.gradle/caches/modules-2
+ ~/.gradle/wrapper/
+ # A new cache will be stored daily. After that first store of the day, cache save actions will fail because the cache is immutable but it's not a problem.
+ # The whole cache is dropped monthly to prevent unlimited growth.
+ # The cache is per branch but in case we don't find a branch for a given branch, we will get a cache from another branch.
+ key: ${{ steps.cache-key.outputs.buildtool-cache-key }}
+ restore-keys: |
+ ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}-
+ ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}-
+ - name: Restore Maven/Gradle Dependency/Dist Caches
+ uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ # if it a pull request, we restore the cache but we don't save it
+ if: github.event_name == 'pull_request'
+ with:
+ path: |
+ ~/.m2/repository/
+ ~/.m2/wrapper/
+ ~/.gradle/caches/modules-2
+ ~/.gradle/wrapper/
+ key: ${{ steps.cache-key.outputs.buildtool-cache-key }}
+ restore-keys: |
+ ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}-
+ ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}-
+
+ - name: Run build script
+ run: ./ci/build-github.sh
+ shell: bash
+ env:
+ RDBMS: ${{ matrix.rdbms }}
+ # For jobs running on 'push', publish build scan and cache immediately.
+ # This won't work for pull requests, since they don't have access to secrets.
+ POPULATE_REMOTE_GRADLE_CACHE: ${{ github.event_name == 'push' && github.repository == 'hibernate/hibernate-orm' && 'true' || 'false' }}
+ DEVELOCITY_ACCESS_KEY: "${{ secrets.DEVELOCITY_ACCESS_KEY }}"
+
+ # For jobs running on 'pull_request', upload build scan data.
+ # The actual publishing must be done in a separate job (see ci-report.yml).
+ # We don't write to the remote cache as that would be unsafe.
+ - name: Upload GitHub Actions artifact for the Develocity build scan
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ if: "${{ github.event_name == 'pull_request' && !cancelled() }}"
+ with:
+ name: build-scan-data-${{ matrix.rdbms }}
+ path: ~/.gradle/build-scan-data
+
+ - name: Upload test reports (if Gradle failed)
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ if: failure()
+ with:
+ name: test-reports-java11-${{ matrix.rdbms }}
+ path: |
+ ./**/target/reports/tests/
+ - name: Omit produced artifacts from build cache
+ run: ./ci/before-cache.sh
+
+ # Job for builds on Atlas (Oracle) infrastructure.
+ # This is untrusted, even for pushes, see below.
+ atlas:
+ permissions:
+ contents: read
+ name: GraalVM 21 - ${{matrix.rdbms}}
+ # runs-on: ubuntu-latest
+ runs-on: [ self-hosted, Linux, X64, OCI ]
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - rdbms: oracle_atps
+ - rdbms: oracle_db19c
+ - rdbms: oracle_db21c
+ - rdbms: oracle_db23c
+ steps:
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
+ - name: Reclaim disk space and sanitize user home
+ run: .github/ci-prerequisites-atlas.sh
+ - name: Start database
+ env:
+ RDBMS: ${{ matrix.rdbms }}
+ RUNID: ${{ github.run_number }}
+ run: ci/database-start.sh
+ - name: Set up Java 21
+ uses: graalvm/setup-graalvm@aafbedb8d382ed0ca6167d3a051415f20c859274 # v1.2.8
+ with:
+ distribution: 'graalvm'
+ java-version: '21'
+
+ - name: Generate cache key
+ id: cache-key
+ run: |
+ CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}"
+ CURRENT_MONTH=$(/bin/date -u "+%Y-%m")
+ CURRENT_DAY=$(/bin/date -u "+%d")
+ ROOT_CACHE_KEY="buildtool-cache-atlas"
+ echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT
+ echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT
+ echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT
+ - name: Cache Maven/Gradle Dependency/Dist Caches
+ id: cache-maven
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ # if it's not a pull request, we restore and save the cache
+ if: github.event_name != 'pull_request'
+ with:
+ path: |
+ ~/.m2/repository/
+ ~/.m2/wrapper/
+ ~/.gradle/caches/modules-2
+ ~/.gradle/wrapper/
+ # A new cache will be stored daily. After that first store of the day, cache save actions will fail because the cache is immutable but it's not a problem.
+ # The whole cache is dropped monthly to prevent unlimited growth.
+ # The cache is per branch but in case we don't find a branch for a given branch, we will get a cache from another branch.
+ key: ${{ steps.cache-key.outputs.buildtool-cache-key }}
+ restore-keys: |
+ ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}-
+ ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}-
+ - name: Restore Maven/Gradle Dependency/Dist Caches
+ uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ # if it a pull request, we restore the cache but we don't save it
+ if: github.event_name == 'pull_request'
+ with:
+ path: |
+ ~/.m2/repository/
+ ~/.m2/wrapper/
+ ~/.gradle/caches/modules-2
+ ~/.gradle/wrapper/
+ key: ${{ steps.cache-key.outputs.buildtool-cache-key }}
+ restore-keys: |
+ ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}-
+ ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}-
+
+ - name: Run build script
+ env:
+ RDBMS: ${{ matrix.rdbms }}
+ RUNID: ${{ github.run_number }}
+ # These runners have no HOME variable set by default, we need to explicitly set it to make the build work
+ HOME: /root
+ # Needed for TFO (TCP fast open)
+ LD_PRELOAD: /home/opc/libtfojdbc1.so
+ LD_LIBRARY_PATH: /home/opc
+ run: ./ci/build-github.sh
+ shell: bash
+ # Upload build scan data.
+ # The actual publishing must be done in a separate job (see ci-report.yml).
+ # We don't write to the remote cache as that would be unsafe.
+ # That's even on push, because we do not trust Atlas runners to hold secrets: they are shared infrastructure.
+ - name: Upload GitHub Actions artifact for the Develocity build scan
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ if: "${{ !cancelled() }}"
+ with:
+ name: build-scan-data-${{ matrix.rdbms }}
+ path: ~/.gradle/build-scan-data
+ - name: Upload test reports (if Gradle failed)
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ if: failure()
+ with:
+ name: test-reports-java11-${{ matrix.rdbms }}
+ path: |
+ ./**/target/reports/tests/
+ - name: Omit produced artifacts from build cache
+ run: ./ci/before-cache.sh
+
+ # Static code analysis check
+ format_checks:
+ permissions:
+ contents: read
+ name: Static code analysis
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ persist-credentials: false
+ - name: Reclaim disk space and sanitize user home
+ run: .github/ci-prerequisites-atlas.sh
+ - name: Set up Java 21
+ uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+
+ - name: Generate cache key
+ id: cache-key
+ run: |
+ CURRENT_BRANCH="${{ github.repository != 'hibernate/hibernate-orm' && 'fork' || github.base_ref || github.ref_name }}"
+ CURRENT_MONTH=$(/bin/date -u "+%Y-%m")
+ CURRENT_DAY=$(/bin/date -u "+%d")
+ ROOT_CACHE_KEY="buildtool-cache-atlas"
+ echo "buildtool-monthly-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}" >> $GITHUB_OUTPUT
+ echo "buildtool-monthly-branch-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}" >> $GITHUB_OUTPUT
+ echo "buildtool-cache-key=${ROOT_CACHE_KEY}-${CURRENT_MONTH}-${CURRENT_BRANCH}-${CURRENT_DAY}" >> $GITHUB_OUTPUT
+ - name: Cache Maven/Gradle Dependency/Dist Caches
+ id: cache-maven
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ # if it's not a pull request, we restore and save the cache
+ if: github.event_name != 'pull_request'
+ with:
+ path: |
+ ~/.m2/repository/
+ ~/.m2/wrapper/
+ ~/.gradle/caches/modules-2
+ ~/.gradle/wrapper/
+ # A new cache will be stored daily. After that first store of the day, cache save actions will fail because the cache is immutable but it's not a problem.
+ # The whole cache is dropped monthly to prevent unlimited growth.
+ # The cache is per branch but in case we don't find a branch for a given branch, we will get a cache from another branch.
+ key: ${{ steps.cache-key.outputs.buildtool-cache-key }}
+ restore-keys: |
+ ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}-
+ ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}-
+ - name: Restore Maven/Gradle Dependency/Dist Caches
+ uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ # if it a pull request, we restore the cache but we don't save it
+ if: github.event_name == 'pull_request'
+ with:
+ path: |
+ ~/.m2/repository/
+ ~/.m2/wrapper/
+ ~/.gradle/caches/modules-2
+ ~/.gradle/wrapper/
+ key: ${{ steps.cache-key.outputs.buildtool-cache-key }}
+ restore-keys: |
+ ${{ steps.cache-key.outputs.buildtool-monthly-branch-cache-key }}-
+ ${{ steps.cache-key.outputs.buildtool-monthly-cache-key }}-
+
+ - name: Run build script
+ run: ./gradlew formatChecks
+ env:
+ # For jobs running on 'push', publish build scan and cache immediately.
+ # This won't work for pull requests, since they don't have access to secrets.
+ POPULATE_REMOTE_GRADLE_CACHE: ${{ github.event_name == 'push' && github.repository == 'hibernate/hibernate-orm' && 'true' || 'false' }}
+ DEVELOCITY_ACCESS_KEY: "${{ secrets.DEVELOCITY_ACCESS_KEY }}"
+
+ # For jobs running on 'pull_request', upload build scan data.
+ # The actual publishing must be done in a separate job (see ci-report.yml).
+ # We don't write to the remote cache as that would be unsafe.
+ - name: Upload GitHub Actions artifact for the Develocity build scan
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ if: "${{ github.event_name == 'pull_request' && !cancelled() }}"
+ with:
+ name: build-scan-data-sca
+ path: ~/.gradle/build-scan-data
+
+ - name: Upload test reports (if Gradle failed)
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ if: failure()
+ with:
+ name: test-reports-java11-sca
+ path: |
+ ./**/target/reports/tests/
+ - name: Omit produced artifacts from build cache
+ run: ./ci/before-cache.sh
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index a05c7b585b5d..89ed21898618 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -35,12 +35,19 @@ jobs:
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
+
+ - name: Set up JDK
+ uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1
+ with:
+ distribution: 'temurin'
+ java-version: '21'
+
- name: Checkout repository
- uses: actions/checkout@v4
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v3
+ uses: github/codeql-action/init@7e3036b9cd87fc26dd06747b7aa4b96c27aaef3a # v3.28.4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -54,7 +61,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@v3
+ uses: github/codeql-action/autobuild@7e3036b9cd87fc26dd06747b7aa4b96c27aaef3a # v3.28.4
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
@@ -67,6 +74,6 @@ jobs:
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
+ uses: github/codeql-action/analyze@7e3036b9cd87fc26dd06747b7aa4b96c27aaef3a # v3.28.4
with:
- category: "/language:${{matrix.language}}"
\ No newline at end of file
+ category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/contributor-build.yml b/.github/workflows/contributor-build.yml
deleted file mode 100644
index 8d393ce5cfdb..000000000000
--- a/.github/workflows/contributor-build.yml
+++ /dev/null
@@ -1,126 +0,0 @@
-# The main CI of Hibernate ORM is https://ci.hibernate.org/job/hibernate-orm-pipeline/.
-# However, Hibernate ORM builds run on GitHub actions regularly
-# to check that it still works and can be used in GitHub forks.
-# See https://docs.github.com/en/free-pro-team@latest/actions
-# for more information about GitHub actions.
-
-name: Hibernate ORM build
-
-on:
- push:
- branches:
- - 'main'
- # WARNING: Using pull_request_target to access secrets, but we check out the PR head commit.
- # See checkout action for details.
- pull_request_target:
- branches:
- - 'main'
-
-permissions: {} # none
-
-# See https://github.com/hibernate/hibernate-orm/pull/4615 for a description of the behavior we're getting.
-concurrency:
- # Consider that two builds are in the same concurrency group (cannot run concurrently)
- # if they use the same workflow and are about the same branch ("ref") or pull request.
- group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}"
- # Cancel previous builds in the same concurrency group even if they are in process
- # for pull requests or pushes to forks (not the upstream repository).
- cancel-in-progress: ${{ github.event_name == 'pull_request_target' || github.repository != 'hibernate/hibernate-orm' }}
-
-jobs:
- build:
- permissions:
- contents: read
- name: Java 11
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- include:
- - rdbms: h2
- - rdbms: hsqldb
- - rdbms: derby
- - rdbms: mysql
- - rdbms: mariadb
- - rdbms: postgresql
- - rdbms: edb
- - rdbms: oracle
- - rdbms: db2
- - rdbms: mssql
- - rdbms: sybase
-# Running with CockroachDB requires at least 2-4 vCPUs, which we don't have on GH Actions runners
-# - rdbms: cockroachdb
-# Running with HANA requires at least 8GB memory just for the database, which we don't have on GH Actions runners
-# - rdbms: hana
- steps:
- - name: Check out commit already pushed to branch
- if: "! github.event.pull_request.number"
- uses: actions/checkout@v4
- with:
- persist-credentials: false
- - name: Check out PR head
- uses: actions/checkout@v4
- if: github.event.pull_request.number
- with:
- # WARNING: This is potentially dangerous since we're checking out unreviewed code,
- # and since we're using the pull_request_target event we can use secrets.
- # Thus, we must be extra careful to never expose secrets to steps that execute this code,
- # and to strictly limit our of secrets to those that only pose minor security threats.
- # This means in particular we won't expose Develocity credentials to the main gradle executions,
- # but instead will execute gradle a second time just to push build scans to Develocity;
- # see below.
- ref: "refs/pull/${{ github.event.pull_request.number }}/head"
- persist-credentials: false
- - name: Reclaim Disk Space
- run: .github/ci-prerequisites.sh
- - name: Start database
- env:
- RDBMS: ${{ matrix.rdbms }}
- run: ci/database-start.sh
- - name: Set up Java 11
- uses: actions/setup-java@v4
- with:
- distribution: 'temurin'
- java-version: '11'
- - name: Get year/month for cache key
- id: get-date
- run: echo "yearmonth=$(/bin/date -u "+%Y-%m")" >> $GITHUB_OUTPUT
- shell: bash
- - name: Cache Maven local repository
- uses: actions/cache@v4
- id: cache-maven
- with:
- path: |
- ~/.m2/repository
- ~/.gradle/caches/
- ~/.gradle/wrapper/
- # refresh cache every month to avoid unlimited growth
- key: maven-localrepo-${{ steps.get-date.outputs.yearmonth }}
- - name: Run build script
- env:
- RDBMS: ${{ matrix.rdbms }}
- # Don't populate Develocity cache in pull requests as that's potentially dangerous
- POPULATE_REMOTE_GRADLE_CACHE: "${{ github.event_name == 'push' }}"
- # WARNING: exposes secrets, so must only be passed to a step that doesn't run unapproved code.
- DEVELOCITY_ACCESS_KEY: "${{ github.event_name == 'push' && secrets.GRADLE_ENTERPRISE_ACCESS_KEY || '' }}"
- run: ./ci/build-github.sh
- shell: bash
- - name: Publish Develocity build scan for previous build (pull request)
- # Don't fail a build if publishing fails
- continue-on-error: true
- if: "${{ !cancelled() && github.event_name == 'pull_request_target' && github.repository == 'hibernate/hibernate-orm' }}"
- run: |
- ./gradlew buildScanPublishPrevious
- env:
- # WARNING: exposes secrets, so must only be passed to a step that doesn't run unapproved code.
- DEVELOCITY_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY_PR }}
- - name: Upload test reports (if Gradle failed)
- uses: actions/upload-artifact@v4
- if: failure()
- with:
- name: test-reports-java11-${{ matrix.rdbms }}
- path: |
- ./**/target/reports/tests/
- ./**/target/reports/checkstyle/
- - name: Omit produced artifacts from build cache
- run: ./ci/before-cache.sh
diff --git a/.gitignore b/.gitignore
index 1427882b7fdc..38f13ef5aa12 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,7 @@ lib
# IntelliJ specific files/directories
out
-.idea
+# See .idea/.gitignore for more precise rules in that directory
*.ipr
*.iws
*.iml
@@ -45,10 +45,9 @@ ObjectStore
*.hprof
/.nb-gradle/
-# Additional databases used in local envs
-databases/mysql/
-databases/postgis/
-
# Vim
*.swp
*.swo
+
+# SDKman, used by some module maintainers
+.sdkmanrc
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 000000000000..afff55542715
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+*
+!.gitignore
+
+# See https://stackoverflow.com/a/67976259/6692043
+!codeStyles/
+!codeStyles/Project.xml
+!codeStyles/codeStyleConfig.xml
+!inspectionProfiles/
+!inspectionProfiles/Project_Default.xml
+!icon.svg
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 000000000000..c8bd7f0a2413
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 000000000000..79ee123c2b23
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/icon.svg b/.idea/icon.svg
new file mode 100644
index 000000000000..2b19df67f460
--- /dev/null
+++ b/.idea/icon.svg
@@ -0,0 +1,11 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 000000000000..582f55855748
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.mailmap b/.mailmap
index 831b56ce7b99..8c5b76135c47 100644
--- a/.mailmap
+++ b/.mailmap
@@ -43,11 +43,15 @@
# assume any information here is accurate.
Adam Warski adamw
+Adar Lieber-Dembo
Alex Snaps
+Alexander Kotlyarov
+Alexey Nesterov
Andrea Boriero
Andrej Golovnin Andrej Golovnin
Andrig Miller andrigtmiller
Andrig Miller andy.miller
+Arcadiy Ivanov
Barry LaFond blafond
Boris Korogvich VEINHORN
Brett Meyer
@@ -61,6 +65,7 @@ Chris Cranford Naros
Chris Cranford
Chris Cranford cranforc
Christoph Dreis ChristophDreis
+Daniel Heinrich
Dave Repshas drepshas
David M. Carr davidmc24
David M. Carr dcarr
@@ -82,7 +87,10 @@ Hardy Ferentschik
Hardy Ferentschik
Harsh Panchal BOOTMGR
Hernán Chanfreau hernan
+Ivan Munic
Jaikiran Pai Jaikiran
+Janario Oliveira
+Janario Oliveira
Jeremy Whiting Jeremy Whiting
John O'Hara johara
John O'Hara
@@ -90,18 +98,26 @@ John O'Hara JohnOhara
John O'Hara John OHara
John Verhaeg John Verhaeg
John Verhaeg JPAV
+Laurent Almeras
+Laurent Almeras
+Leonard Siu
Loïc LEFEVRE LLEFEVRE
Luis Barreiro barreiro
Lukasz Antoniak lukasz-antoniak
+Matthew Vance
Marco Belladelli marco
Marco Belladelli
+Michael Nachmias
Misty Stanley-Jones misty
Misty Stanley-Jones
Misty Stanley-Jones mstanleyjones
Nathan Xu
Nathan Xu
+Nelson Rodrigues
+Nikolay Mukhanov
Oliver Breidenbach obr
-Radim Vansa rvansa
+Radim Vansa rvansa
+Rob Worsnop
Sanne Grinovero
Scott Marlow Scott Marlow
Scott Marlow smarlow
@@ -110,6 +126,7 @@ Ståle W. Pedersen
Steve Ebersole
Steve Ebersole
Strong Liu
+Viacheslav Rarata
Vlad Mihalcea
Vlad Mihalcea
Vlad Mihalcea
diff --git a/.release/.gitignore b/.release/.gitignore
index 20f846ffeb97..cdd9a17d6b0d 100644
--- a/.release/.gitignore
+++ b/.release/.gitignore
@@ -1,2 +1,3 @@
# The folder into which we checkout our release scripts into
-*
\ No newline at end of file
+*
+!.gitignore
\ No newline at end of file
diff --git a/AUTHORS.txt b/AUTHORS.txt
new file mode 100644
index 000000000000..234330ef0bf7
--- /dev/null
+++ b/AUTHORS.txt
@@ -0,0 +1,295 @@
+# This file lists copyright owners of the project.
+# The list is not exhaustive: other copyright owners exist.
+# See CONTRIBUTING.md for instructions regarding how to be added to this list.
+
+# Corporate contributors
+
+Red Hat, Inc.
+Oracle, Corporation.
+
+# Individual contributors
+
+A Garcia
+Adam Warski
+Adar Lieber-Dembo
+Adrodoc
+ageery
+Aleksander Blomskøld
+Ales Justin
+Alex Kalashnikov
+Alex Snaps
+Alex Soto
+Alexey Loubyansky
+Alexey Nesterov
+Alvaro Esteban Pedraza
+amaeda
+Amit Mendapara
+amkad
+Anders Wallgren
+Andrea Boriero
+Andreas Asplund
+Andreas Knees
+Andrei Ivanov
+Andrei Solntsev
+Andrew Clemons
+Andrew Guibert
+Andrew Judson
+Andrew Lee Rubinger
+Andrig Miller
+András Eisenberger
+Andy2003
+Anilabha Baral
+Anthony Patricio
+Antoine Reilles
+Anton Marsden
+Archie L. Cobbs
+Arnold Galovics
+bananan
+Barnaby Court
+Barnaby Court
+Barney
+Barry LaFond
+Bas van Schaik
+Batbileg Dorj
+Bato-Bair
+Bawany Satgunanathan
+bb7133
+Becca Gaspard
+Benedikt Waldvogel
+Benjamin Hartmann
+benoit
+Bogdan Stirbat
+Boris Korogvich
+boris-unckel
+Brad Koehn
+Bradley Hess
+Brett Meyer
+Brian Stansberry
+Bryan Varner
+Burkhard Graves
+Cash Costello
+Cedomir Igaly
+Chris Bredesen
+Chris Cranford
+Chris Dennis
+Christian Bauer
+Christian Beikov
+Christoph Dreis
+clement
+Cody Lerum
+Craig K
+cristhiank
+Csaba Varga
+Cédric Tabin
+Damien Hollis
+Daniel Black
+Daniel Gredler
+Daniel Mensinger
+Daniel Shuy
+Dave Stephan
+David Avenante
+David Ellingsworth
+David M. Lloyd
+Davide D'Alto
+dcebotarenco
+dewarder
+Dgray16
+Diego Plentz
+dkublik
+Dmitrii Bocharov
+Dmitrii Karmanov
+Dmitry Kryukov
+Dmytro Bondar
+Dominique Toupin
+Edward.Wilson
+Emmanuel Bernard
+Emmanuel Duchastenier
+Emond Papegaaij
+Eric Dalquist
+Erik-Berndt Scheper
+Erin Schnabel
+Etienne Miret
+Ettavolt
+Fabio Massimo Ercoli
+Fabricio Gregorio
+Falko Modler
+Farah Juma
+Felix
+Felix Feisst
+Fernando Guardiola
+Filipe Roque
+Florian Heck
+fmusolino
+Francesco Nigro
+Frank Doherty
+Fábio Ueno
+Gabriel Belingueres
+Gail Badner
+Galder Zamarreño
+Gary Gregory
+Gary LosHuertos
+Gavin King
+Georg Echterling
+George Gastaldi
+Georgios Andrianakis
+graemerocher
+Gregorio Palamà
+Guenther Demetz
+Guillaume Smet
+Gunnar Morling
+H.Lo