Fix for SQL serve #4067
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Hibernate Reactive CI | |
on: | |
push: | |
branches: | |
- 'main' | |
- 'wip/**' | |
tags: | |
- '2.*' | |
pull_request: | |
branches: | |
- 'main' | |
- 'wip/**' | |
# For building snapshots | |
workflow_call: | |
inputs: | |
branch: | |
required: true | |
type: string | |
# Allow running this workflow against a specific branch/tag | |
workflow_dispatch: | |
# 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"), pull request, and branch name input (for scheduled job). | |
group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.ref }}, pr = ${{ github.event.pull_request.id }}, branch=${{ inputs.branch }}" | |
# 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' || github.repository != 'hibernate/hibernate-reactive' }} | |
jobs: | |
run_examples: | |
name: Run examples in '${{ matrix.example }}' on ${{ matrix.db }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
example: [ 'session-example', 'native-sql-example' ] | |
db: [ 'MySQL', 'PostgreSQL' ] | |
exclude: | |
# 'native-sql-example' doesn't run on MySQL because it has native queries | |
- example: 'native-sql-example' | |
db: 'MySQL' | |
services: | |
# Label used to access the service container | |
mysql: | |
# Docker Hub image | |
image: mysql:8.4.0 | |
env: | |
MYSQL_ROOT_PASSWORD: hreact | |
MYSQL_DATABASE: hreact | |
MYSQL_USER: hreact | |
MYSQL_PASSWORD: hreact | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd="mysqladmin ping" | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
- 3306:3306 | |
postgres: | |
# Docker Hub image | |
image: postgres:16.3 | |
env: | |
POSTGRES_DB: hreact | |
POSTGRES_USER: hreact | |
POSTGRES_PASSWORD: hreact | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
- 5432:5432 | |
steps: | |
- name: Checkout ${{ inputs.branch }} | |
uses: actions/checkout@v2 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: Get year/month for cache key | |
id: get-date | |
run: | | |
echo "::set-output name=yearmonth::$(/bin/date -u "+%Y-%m")" | |
shell: bash | |
- name: Cache Gradle downloads | |
uses: actions/cache@v2 | |
id: cache-gradle | |
with: | |
path: | | |
.gradle/caches | |
.gradle/jdks | |
.gradle/wrapper | |
# refresh cache every month to avoid unlimited growth | |
key: gradle-examples-${{ matrix.db }}-${{ steps.get-date.outputs.yearmonth }} | |
- name: Set up JDK 11 | |
uses: actions/[email protected] | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Print the effective ORM version used | |
run: ./gradlew :${{ matrix.example }}:dependencyInsight --dependency org.hibernate.orm:hibernate-core | |
- name: Run examples in '${{ matrix.example }}' on ${{ matrix.db }} | |
run: ./gradlew :${{ matrix.example }}:runAllExamplesOn${{ matrix.db }} | |
- name: Upload reports (if build failed) | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: reports-examples-${{ matrix.db }} | |
path: './**/build/reports/' | |
test_dbs: | |
name: Test with ${{ matrix.db }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
db: [ 'MariaDB', 'MySQL', 'PostgreSQL', 'MSSQLServer', 'CockroachDB', 'Db2', 'Oracle' ] | |
steps: | |
- name: Checkout ${{ inputs.branch }} | |
uses: actions/checkout@v2 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: Get year/month for cache key | |
id: get-date | |
run: | | |
echo "::set-output name=yearmonth::$(/bin/date -u "+%Y-%m")" | |
shell: bash | |
- name: Cache Gradle downloads | |
uses: actions/cache@v2 | |
id: cache-gradle | |
with: | |
path: | | |
.gradle/caches | |
.gradle/jdks | |
.gradle/wrapper | |
# refresh cache every month to avoid unlimited growth | |
key: gradle-db-${{ matrix.db }}-${{ steps.get-date.outputs.yearmonth }} | |
- name: Set up JDK 11 | |
uses: actions/[email protected] | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Print the effective ORM version used | |
run: ./gradlew :hibernate-reactive-core:dependencyInsight --dependency org.hibernate.orm:hibernate-core | |
- name: Build and Test with ${{ matrix.db }} | |
run: ./gradlew build -PshowStandardOutput -Pdocker -Pdb=${{ matrix.db }} | |
- name: Upload reports (if build failed) | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: reports-db-${{ matrix.db }} | |
path: './**/build/reports/' | |
test_jdks: | |
name: Test with Java ${{ matrix.java.name }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
# To list the available "feature versions" on adoptium.net (ignore "tip_version", it's not relevant): | |
# https://api.adoptium.net/v3/info/available_releases | |
# To list the available releases for a given "feature version" on adoptium.net (example for 16): | |
# https://api.adoptium.net/v3/assets/latest/16/hotspot | |
# To see the available versions and download links on jdk.java.net: | |
# https://github.com/oracle-actions/setup-java/blob/main/jdk.java.net-uri.properties | |
java: | |
- { name: "11", java_version_numeric: 11 } | |
- { name: "17", java_version_numeric: 17 } | |
# We want to enable preview features when testing newer builds of OpenJDK: | |
# even if we don't use these features, just enabling them can cause side effects | |
# and it's useful to test that. | |
- { name: "20", java_version_numeric: 20, jvm_args: '--enable-preview' } | |
- { name: "21", java_version_numeric: 21, jvm_args: '--enable-preview' } | |
- { name: "23", java_version_numeric: 23, from: 'jdk.java.net', jvm_args: '--enable-preview' } | |
- { name: "24-ea", java_version_numeric: 24, from: 'jdk.java.net', jvm_args: '--enable-preview' } | |
steps: | |
- name: Checkout ${{ inputs.branch }} | |
uses: actions/checkout@v2 | |
with: | |
ref: ${{ inputs.branch }} | |
- name: Get year/month for cache key | |
id: get-date | |
run: | | |
echo "::set-output name=yearmonth::$(/bin/date -u "+%Y-%m")" | |
shell: bash | |
- 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@v4 | |
# 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@v4 | |
# if it's 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: Set up latest JDK ${{ matrix.java.name }} from jdk.java.net | |
if: matrix.java.from == 'jdk.java.net' | |
uses: oracle-actions/setup-java@v1 | |
with: | |
website: jdk.java.net | |
release: ${{ matrix.java.java_version_numeric }} | |
- name: Set up latest JDK ${{ matrix.java.name }} from Adoptium | |
if: matrix.java.from == '' || matrix.java.from == 'adoptium.net' | |
uses: actions/[email protected] | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java.java_version_numeric }} | |
check-latest: true | |
- name: Export path to JDK ${{ matrix.java.name }} | |
id: testjdk-exportpath | |
run: echo "::set-output name=path::${JAVA_HOME}" | |
# Always use JDK 11 to build the main code: that's what we use for releases. | |
- name: Set up JDK 11 | |
uses: actions/[email protected] | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
check-latest: true | |
- name: Export path to JDK 11 | |
id: mainjdk-exportpath | |
run: echo "::set-output name=path::${JAVA_HOME}" | |
- name: Display exact version of JDK ${{ matrix.java.name }} | |
run: | | |
${{ steps.testjdk-exportpath.outputs.path }}/bin/java -version | |
- name: Print the effective ORM version used | |
run: ./gradlew :hibernate-reactive-core:dependencyInsight --dependency org.hibernate.orm:hibernate-core | |
- name: Build and Test with Java ${{ matrix.java.name }} | |
run: | | |
./gradlew build -PshowStandardOutput -Pdocker -Ptest.jdk.version=${{ matrix.java.java_version_numeric }} \ | |
-Porg.gradle.java.installations.paths=${{ steps.mainjdk-exportpath.outputs.path }},${{ steps.testjdk-exportpath.outputs.path }} \ | |
${{ matrix.java.jvm_args && '-Ptest.jdk.launcher.args=' }}${{ matrix.java.jvm_args }} | |
- name: Upload reports (if build failed) | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: reports-java${{ matrix.java.name }} | |
path: './**/build/reports/' |