Upsert dbs support #3625
Workflow file for this run
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 | |
tags: | |
- '2.*' | |
pull_request: | |
branches: main | |
# 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' || 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.0.32 | |
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:15.2 | |
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: | |
- uses: actions/checkout@v2 | |
- 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/setup-java@v2.2.0 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- 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@v2 | |
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', 'DB2', 'CockroachDB', 'MSSQLServer', 'Oracle' ] | |
db: [ 'MariaDB', 'MySQL', 'PostgreSQL', 'MSSQLServer', 'CockroachDB', 'Db2', 'Oracle' ] | |
steps: | |
- uses: actions/checkout@v2 | |
- 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/setup-java@v2.2.0 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- 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@v2 | |
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-ea", java_version_numeric: 21, from: 'jdk.java.net', jvm_args: '--enable-preview' } | |
# We skip this until Vert.x fixes a bug preventing the build to pass: https://github.com/eclipse-vertx/vertx-sql-client/issues/1379 | |
# - { name: "22-ea", java_version_numeric: 22, from: 'jdk.java.net', jvm_args: '--enable-preview' } | |
steps: | |
- uses: actions/checkout@v2 | |
- 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-java${{ matrix.java }}-${{ steps.get-date.outputs.yearmonth }} | |
- 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/setup-java@v2.2.0 | |
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/setup-java@v2.2.0 | |
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: 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@v2 | |
if: failure() | |
with: | |
name: reports-java${{ matrix.java.name }} | |
path: './**/build/reports/' | |
snapshot: | |
name: Create snapshot | |
if: github.event_name == 'push' && startsWith( github.ref, 'refs/heads/' ) | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set up JDK 11 | |
uses: actions/setup-java@v2.2.0 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Create artifacts | |
run: ./gradlew assemble | |
- name: Detect the version of Hibernate Reactive | |
id: detect-version | |
run: | | |
sed -E 's/^projectVersion( *= *| +)([^ ]+)/::set-output name=version::\2/g' gradle/version.properties | |
- name: Publish snapshot to JBoss Nexus | |
env: | |
ORG_GRADLE_PROJECT_jbossNexusUser: ${{ secrets.JBOSS_NEXUS_USER }} | |
ORG_GRADLE_PROJECT_jbossNexusPassword: ${{ secrets.JBOSS_NEXUS_PASSWORD }} | |
if: endsWith( steps.detect-version.outputs.version, '-SNAPSHOT' ) && env.ORG_GRADLE_PROJECT_jbossNexusUser | |
run: ./gradlew publishToJBossNexus closeAndReleaseJBossNexusStagingRepository | |
release: | |
name: Release | |
if: github.event_name == 'push' && startsWith( github.ref, 'refs/tags/' ) | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set git username and email | |
run: | | |
git config --global user.email "hibernate@users.noreply.github.com" | |
git config --global user.name "hibernate" | |
- name: Set up JDK 11 | |
uses: actions/setup-java@v2.2.0 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Create artifacts | |
run: ./gradlew assemble | |
- name: Install SSH key | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.HIBERNATE_ORG_SSH_KEY }} | |
name: id_rsa_hibernate.org | |
known_hosts: ${{ secrets.HIBERNATE_ORG_SSH_KNOWN_HOSTS }} | |
config: | | |
Host github.com | |
User hibernate | |
IdentityFile ~/.ssh/id_rsa_hibernate.org | |
- name: Publish documentation on Hibernate.org | |
run: ./gradlew publishDocumentation -PdocPublishBranch=production | |
- name: Publish artifacts to OSSRH, close repository and release | |
env: | |
ORG_GRADLE_PROJECT_sonatypeOssrhUser: ${{ secrets.SONATYPE_OSSRH_USER }} | |
ORG_GRADLE_PROJECT_sonatypeOssrhPassword: ${{ secrets.SONATYPE_OSSRH_PASSWORD }} | |
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository |