Skip to content

Commit e468aeb

Browse files
committed
HHH-14336 Enable tests across databases in Github Actions
1 parent 1a9bd7d commit e468aeb

File tree

12 files changed

+324
-32
lines changed

12 files changed

+324
-32
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# The main CI of Hibernate ORM is https://ci.hibernate.org/job/hibernate-orm-6.0-h2-main/.
2+
# However, Hibernate ORM builds run on GitHub actions regularly
3+
# to check that it still works and can be used in GitHub forks.
4+
# See https://docs.github.com/en/free-pro-team@latest/actions
5+
# for more information about GitHub actions.
6+
7+
name: Hibernate ORM contributor build
8+
9+
on:
10+
push:
11+
branches:
12+
- 'master'
13+
- 'wip/6.0'
14+
pull_request:
15+
branches:
16+
- 'master'
17+
- 'wip/6.0'
18+
jobs:
19+
build:
20+
name: Build and test on Java 8 against a wide range of DBs
21+
runs-on: ubuntu-latest
22+
strategy:
23+
matrix:
24+
include:
25+
- rdbms: h2
26+
jdk: 8
27+
- rdbms: derby
28+
jdk: 8
29+
- rdbms: mariadb
30+
jdk: 8
31+
- rdbms: postgresql
32+
jdk: 8
33+
- rdbms: oracle
34+
jdk: 8
35+
- rdbms: db2
36+
jdk: 8
37+
- rdbms: mssql
38+
jdk: 8
39+
steps:
40+
- uses: actions/checkout@v2
41+
- name: Set up Java 8
42+
uses: actions/setup-java@v1
43+
with:
44+
java-version: 1.8
45+
- name: Get year/month for cache key
46+
id: get-date
47+
run: |
48+
echo "::set-output name=yearmonth::$(/bin/date -u "+%Y-%m")"
49+
shell: bash
50+
- name: Cache Maven local repository
51+
uses: actions/cache@v2
52+
id: cache-maven
53+
with:
54+
path: |
55+
~/.m2/repository
56+
~/.gradle/caches/
57+
~/.gradle/wrapper/
58+
# refresh cache every month to avoid unlimited growth
59+
key: maven-localrepo-${{ steps.get-date.outputs.yearmonth }}
60+
- name: Run build script
61+
env:
62+
RDBMS: ${{ matrix.rdbms }}
63+
JDK: ${{ matrix.jdk }}
64+
run: ./ci/build-guthub.sh
65+
shell: bash
66+
- name: Upload test reports (if Gradle failed)
67+
uses: actions/upload-artifact@v2
68+
if: failure()
69+
with:
70+
name: test-reports-java8
71+
path: './**/target/reports/tests/test/'
72+
- name: Omit produced artifacts from build cache
73+
run: ./ci/before-cache.sh
74+
build11:
75+
name: Build and test on Java 11
76+
runs-on: ubuntu-latest
77+
steps:
78+
- uses: actions/checkout@v2
79+
- name: Set up Java 11
80+
uses: actions/setup-java@v1
81+
with:
82+
java-version: 11
83+
- name: Get year/month for cache key
84+
id: get-date
85+
run: |
86+
echo "::set-output name=yearmonth::$(/bin/date -u "+%Y-%m")"
87+
shell: bash
88+
- name: Cache Maven local repository
89+
uses: actions/cache@v2
90+
id: cache-maven
91+
with:
92+
path: |
93+
~/.m2/repository
94+
~/.gradle/caches/
95+
~/.gradle/wrapper/
96+
# refresh cache every month to avoid unlimited growth
97+
key: maven-localrepo-${{ steps.get-date.outputs.yearmonth }}
98+
- name: Run build script
99+
env:
100+
JDK: 11
101+
run: ./ci/build-guthub.sh
102+
shell: bash
103+
- name: Upload test reports (if Gradle failed)
104+
uses: actions/upload-artifact@v2
105+
if: failure()
106+
with:
107+
name: test-reports-java11
108+
path: './**/target/reports/tests/test/'
109+
- name: Omit produced artifacts from build cache
110+
run: ./ci/before-cache.sh

.travis.yml

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,56 @@
11
dist: trusty
22
language: java
3-
4-
jobs:
5-
include:
6-
- stage: Oracle JDK 8
7-
jdk: oraclejdk8
8-
- stage: AdoptOpenJDK 11.0.9
9-
install:
10-
- curl -L -o install-jdk.sh https://github.com/sormuras/bach/raw/master/install-jdk.sh
11-
- source ./install-jdk.sh --target ./openjdk11 --url https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.9%2B11.1/OpenJDK11U-jdk_x64_linux_hotspot_11.0.9_11.tar.gz
12-
13-
before_script:
14-
- java -version
15-
- ./gradlew assemble
163
script:
17-
- ./gradlew check -Plog-test-progress=true --stacktrace
4+
- ./ci/build-travis.sh
185
before_cache:
19-
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
20-
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
21-
- rm -f $HOME/.gradle/caches/*/fileHashes/fileHashes.bin
22-
- rm -f $HOME/.gradle/caches/*/fileHashes/fileHashes.lock
6+
- ./ci/before-cache.sh
237
cache:
248
directories:
259
- $HOME/.gradle/caches/
2610
- $HOME/.gradle/wrapper/
11+
matrix:
12+
fast_finish: true
13+
include:
14+
- env: RDBMS=h2
15+
jdk: oraclejdk8
16+
sudo: required
17+
# - env: RDBMS=derby
18+
# jdk: oraclejdk8
19+
# sudo: required
20+
# - env: RDBMS=mariadb
21+
# jdk: oraclejdk8
22+
# sudo: true
23+
# services:
24+
# - docker
25+
# - env: RDBMS=postgresql
26+
# jdk: oraclejdk8
27+
# sudo: true
28+
# services:
29+
# - docker
30+
# - env: RDBMS=oracle
31+
# jdk: oraclejdk8
32+
# sudo: true
33+
# services:
34+
# - docker
35+
# - env: RDBMS=db2
36+
# jdk: oraclejdk8
37+
# sudo: true
38+
# services:
39+
# - docker
40+
# - env: RDBMS=mssql
41+
# jdk: oraclejdk8
42+
# sudo: true
43+
# services:
44+
# - docker
45+
- env: JDK=11
46+
install:
47+
- curl -L -o install-jdk.sh https://github.com/sormuras/bach/raw/master/install-jdk.sh
48+
- source ./install-jdk.sh --target ./openjdk11 --url https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.9%2B11.1/OpenJDK11U-jdk_x64_linux_hotspot_11.0.9_11.tar.gz
49+
allow_failures:
50+
# - env: RDBMS=derby
51+
# - env: RDBMS=mariadb
52+
# - env: RDBMS=postgresql
53+
# - env: RDBMS=oracle
54+
# - env: RDBMS=db2
55+
# - env: RDBMS=mssql
56+
- env: JDK=11

ci/before-cache.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#! /bin/bash
2+
3+
rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
4+
rm -fr $HOME/.gradle/caches/*/plugin-resolution/
5+
rm -f $HOME/.gradle/caches/*/fileHashes/fileHashes.bin
6+
rm -f $HOME/.gradle/caches/*/fileHashes/fileHashes.lock
7+
rm -fr $HOME/.m2/repository/org/hibernate

ci/build-github.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#! /bin/bash
2+
3+
java -version
4+
./gradlew assemble
5+
if [ "$RDBMS" == 'mysql' ]; then
6+
bash ../docker_db.sh mysql_5_7
7+
elif [ "$RDBMS" == 'mysql8' ]; then
8+
bash ../docker_db.sh mysql_8_0
9+
elif [ "$RDBMS" == 'mariadb' ]; then
10+
bash ../docker_db.sh mariadb
11+
elif [ "$RDBMS" == 'postgresql' ]; then
12+
bash ../docker_db.sh postgresql_9_5
13+
elif [ "$RDBMS" == 'db2' ]; then
14+
bash ../docker_db.sh db2
15+
elif [ "$RDBMS" == 'oracle' ]; then
16+
bash ../docker_db.sh oracle
17+
elif [ "$RDBMS" == 'mssql' ]; then
18+
bash ../docker_db.sh mssql
19+
fi
20+
21+
exec bash ./build.sh

ci/build-travis.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#! /bin/bash
2+
3+
java -version
4+
./gradlew assemble
5+
if [ "$RDBMS" == 'mysql' ]; then
6+
sudo service mysql stop
7+
bash ../docker_db.sh mysql_5_7
8+
elif [ "$RDBMS" == 'mysql8' ]; then
9+
sudo service mysql stop
10+
bash ../docker_db.sh mysql_8_0
11+
elif [ "$RDBMS" == 'mariadb' ]; then
12+
sudo service mysql stop
13+
bash ../docker_db.sh mariadb
14+
elif [ "$RDBMS" == 'postgresql' ]; then
15+
sudo service postgres stop
16+
bash ../docker_db.sh postgresql_9_5
17+
elif [ "$RDBMS" == 'db2' ]; then
18+
bash ../docker_db.sh db2
19+
elif [ "$RDBMS" == 'oracle' ]; then
20+
bash ../docker_db.sh oracle
21+
elif [ "$RDBMS" == 'mssql' ]; then
22+
bash ../docker_db.sh mssql
23+
fi
24+
25+
exec bash ./build.sh

ci/build.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#! /bin/bash
2+
3+
goal=
4+
if [ "$RDBMS" == "derby" ]; then
5+
goal="-Pdb=derby"
6+
elif [ "$RDBMS" == "mariadb" ]; then
7+
goal="-Pdb=mariadb"
8+
elif [ "$RDBMS" == "postgresql" ]; then
9+
goal="-Pdb=pgsql"
10+
elif [ "$RDBMS" == "oracle" ]; then
11+
goal="-Pdb=oracle -Dhibernate.connection.url=jdbc:oracle:thin:@localhost:1521:XE -Dhibernate.connection.username=SYSTEM -Dhibernate.connection.password=Oracle18"
12+
elif [ "$RDBMS" == "db2" ]; then
13+
goal="-Pdb=db2 -Dhibernate.connection.url=jdbc:db2://localhost:50000/orm_test -Dhibernate.connection.username=orm_test -Dhibernate.connection.password=orm_test"
14+
elif [ "$RDBMS" == "mssql" ]; then
15+
goal="-Pdb=mssql -Dhibernate.connection.url=jdbc:sqlserver://localhost:1433;databaseName= -Dhibernate.connection.username=sa -Dhibernate.connection.password=hibernate_orm_test"
16+
fi
17+
18+
exec ./gradlew check ${goal} -Plog-test-progress=true --stacktrace

databases/db2/matrix.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
8+
jdbcDependency 'com.ibm.db2:jcc:11.5.4.0'
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#
2+
# Hibernate, Relational Persistence for Idiomatic Java
3+
#
4+
# License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
#
7+
8+
hibernate.dialect org.hibernate.dialect.DB2Dialect
9+
hibernate.connection.driver_class com.ibm.db2.jcc.DB2Driver
10+
hibernate.connection.url jdbc:db2://localhost:50000/orm_test
11+
hibernate.connection.username orm_test
12+
hibernate.connection.password orm_test
13+
14+
hibernate.connection.pool_size 5
15+
16+
hibernate.show_sql false
17+
hibernate.format_sql true
18+
19+
hibernate.max_fetch_depth 5
20+
21+
hibernate.cache.region_prefix hibernate.test
22+
hibernate.cache.region.factory_class org.hibernate.testing.cache.CachingRegionFactory
23+
24+
javax.persistence.validation.mode=NONE
25+
hibernate.service.allow_crawling=false
26+
hibernate.session.events.log=true

databases/mssqlserver/matrix.gradle

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,4 @@
55
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
66
*/
77

8-
/*
9-
* Hibernate, Relational Persistence for Idiomatic Java
10-
*
11-
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
12-
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
13-
*/
148
jdbcDependency 'com.microsoft.sqlserver:mssql-jdbc:6.4.0.jre8'

databases/mssqlserver/resources/hibernate.properties

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,6 @@
55
# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
66
#
77

8-
#
9-
# Hibernate, Relational Persistence for Idiomatic Java
10-
#
11-
# License: GNU Lesser General Public License (LGPL), version 2.1 or later.
12-
# See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
13-
#
14-
158
hibernate.dialect org.hibernate.dialect.SQLServer2012Dialect
169
hibernate.connection.driver_class com.microsoft.sqlserver.jdbc.SQLServerDriver
1710
hibernate.connection.url jdbc:sqlserver://hibernate-testing-mssql-express.ccuzkqo3zqzq.us-east-1.rds.amazonaws.com

docker_db.sh

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#! /bin/bash
2+
3+
mysql_5_7() {
4+
docker rm -f mysql || true
5+
docker run --name mysql -e MYSQL_USER=hibernate_orm_test -e MYSQL_PASSWORD=hibernate_orm_test -e MYSQL_DATABASE=hibernate_orm_test -p3306:3306 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
6+
}
7+
8+
mysql_8_0() {
9+
docker rm -f mysql || true
10+
docker run --name mysql -e MYSQL_USER=hibernate_orm_test -e MYSQL_PASSWORD=hibernate_orm_test -e MYSQL_DATABASE=hibernate_orm_test -p3306:3306 -d mysql:8.0.21 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
11+
}
12+
13+
mariadb() {
14+
docker rm -f mariadb || true
15+
docker run --name mariadb -e MYSQL_USER=hibernate_orm_test -e MYSQL_PASSWORD=hibernate_orm_test -e MYSQL_DATABASE=hibernate_orm_test -p3306:3306 -d mariadb:10.5.8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
16+
}
17+
18+
postgresql_9_5() {
19+
docker rm -f postgres || true
20+
docker run --name postgres -e POSTGRES_USER=hibernate_orm_test -e POSTGRES_PASSWORD=hibernate_orm_test -e POSTGRES_DB=hibernate_orm_test -p5432:5432 -d postgres:9.5
21+
}
22+
23+
db2() {
24+
docker rm -f db2 || true
25+
docker run --name db2 --privileged -e DB2INSTANCE=orm_test -e DB2INST1_PASSWORD=orm_test -e DBNAME=orm_test -e LICENSE=accept -p 50000:50000 -d ibmcom/db2:11.5.0.0a
26+
# Give the container some time to start
27+
OUTPUT=
28+
while [[ $OUTPUT != *"Setup has completed"* ]]; do
29+
echo "Waiting for DB2 to start..."
30+
sleep 10
31+
OUTPUT=$(docker logs db2)
32+
done
33+
docker exec -t db2 su - orm_test bash -c ". /database/config/orm_test/sqllib/db2profile && /database/config/orm_test/sqllib/bin/db2 'connect to orm_test' && /database/config/orm_test/sqllib/bin/db2 'CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY AUTOMATIC STORAGE'"
34+
}
35+
36+
mssql() {
37+
docker rm -f mssql || true
38+
docker run --name mssql -d -p 1433:1433 -e "SA_PASSWORD=hibernate_orm_test" -e ACCEPT_EULA=Y microsoft/mssql-server-linux:2017-CU13
39+
}
40+
41+
oracle() {
42+
docker rm -f oracle || true
43+
# We need to use the defaults
44+
# SYSTEM/Oracle18
45+
docker run --shm-size=1536m --name oracle -d -p 1521:1521 quillbuilduser/oracle-18-xe
46+
}
47+
48+
if [ -z ${1} ]; then
49+
echo "No db name provided"
50+
echo "Provide one of:"
51+
echo -e "\tmysql_5_7"
52+
echo -e "\tmysql_8_0"
53+
echo -e "\tmariadb"
54+
echo -e "\tpostgresql_9_5"
55+
echo -e "\tdb2"
56+
echo -e "\tmssql"
57+
echo -e "\toracle"
58+
else
59+
${1}
60+
fi

0 commit comments

Comments
 (0)