FINERACT-984-7: Extend GitHub Action pipeline for PostgreSQL
This commit is contained in:
committed by
Aleksandar Vidakovic
parent
8eec00b50f
commit
11b0a91aa7
@@ -0,0 +1,25 @@
|
|||||||
|
name: Fineract Docker build for PostgreSQL
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'zulu'
|
||||||
|
- name: Build the image
|
||||||
|
run: ./gradlew :fineract-provider:clean :fineract-provider:jibDockerBuild -x test
|
||||||
|
- name: Start the stack
|
||||||
|
run: docker-compose -f docker-compose-postgresql.yml up -d
|
||||||
|
- name: Wait for stack to come up
|
||||||
|
run: sleep 60
|
||||||
|
- name: Check health
|
||||||
|
run: curl -f -k --retry 5 --retry-connrefused --connect-timeout 30 --retry-delay 30 https://localhost:8443/fineract-provider/actuator/health
|
||||||
|
- name: Check info
|
||||||
|
run: (( $(curl -f -k --retry 5 --retry-connrefused --connect-timeout 30 --retry-delay 30 https://localhost:8443/fineract-provider/actuator/info | wc --chars) > 100 ))
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
name: Fineract Gradle build - basicauth - PostgreSQL
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgresql:
|
||||||
|
image: postgres:13.4
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
env:
|
||||||
|
POSTGRES_USER: root
|
||||||
|
POSTGRES_PASSWORD: postgres
|
||||||
|
options: --health-cmd="pg_isready -q -d postgres -U root" --health-interval=5s --health-timeout=2s --health-retries=3
|
||||||
|
|
||||||
|
mock-oauth2-server:
|
||||||
|
image: ghcr.io/navikt/mock-oauth2-server:0.4.0
|
||||||
|
ports:
|
||||||
|
- 9000:9000
|
||||||
|
env:
|
||||||
|
SERVER_PORT: 9000
|
||||||
|
JSON_CONFIG: '{ "interactiveLogin": true, "httpServer": "NettyWrapper", "tokenCallbacks": [ { "issuerId": "auth/realms/fineract", "tokenExpiry": 120, "requestMappings": [{ "requestParam": "scope", "match": "fineract", "claims": { "sub": "mifos", "scope": [ "test" ] } } ] } ] }'
|
||||||
|
|
||||||
|
env:
|
||||||
|
TZ: Asia/Kolkata
|
||||||
|
steps:
|
||||||
|
- name: Set up cache
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.gradle/caches
|
||||||
|
~/.gradle/wrapper
|
||||||
|
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-gradle-
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'zulu'
|
||||||
|
- name: Validate Gradle wrapper
|
||||||
|
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
|
||||||
|
- name: Verify MariaDB connection
|
||||||
|
run: |
|
||||||
|
while ! pg_isready -d postgres -U root -h 127.0.0.1 -p 5432 ; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
- name: Initialise databases
|
||||||
|
run: |
|
||||||
|
./gradlew --no-daemon -q createPGDB -PdbName=fineract_tenants
|
||||||
|
./gradlew --no-daemon -q createPGDB -PdbName=fineract_default
|
||||||
|
- name: Install additional software
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install ghostscript -y
|
||||||
|
|
||||||
|
- name: Basic Auth Build & Test
|
||||||
|
run: ./gradlew --no-daemon -q --console=plain licenseMain licenseTest check build test --fail-fast doc -x :twofactor-tests:test -x :oauth2-test:test -PdbType=postgresql -PexcludeTests=org.apache.fineract.integrationtests.guarantor.GuarantorTest.testGuarantor_UNDO_DISBURSAL
|
||||||
|
|
||||||
|
- name: 2FA Build & Test
|
||||||
|
run: ./gradlew --no-daemon -q --console=plain :twofactor-tests:test --fail-fast -PdbType=postgresql
|
||||||
|
|
||||||
|
- name: OAuth2 Build & Test
|
||||||
|
run: ./gradlew --no-daemon -q --console=plain :oauth2-tests:test --fail-fast -PdbType=postgresql
|
||||||
@@ -612,6 +612,12 @@ configure(project.fineractJavaProjects) {
|
|||||||
|
|
||||||
test {
|
test {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
|
|
||||||
|
if (project.hasProperty('excludeTests')) {
|
||||||
|
filter {
|
||||||
|
excludeTestsMatching project.property('excludeTests')
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testlogger {
|
testlogger {
|
||||||
|
|||||||
@@ -194,6 +194,8 @@ import groovy.sql.Sql
|
|||||||
|
|
||||||
project.ext.mysqlUser='root'
|
project.ext.mysqlUser='root'
|
||||||
project.ext.mysqlPassword='mysql'
|
project.ext.mysqlPassword='mysql'
|
||||||
|
project.ext.pgUser='root'
|
||||||
|
project.ext.pgPassword='postgres'
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
driver
|
driver
|
||||||
@@ -209,7 +211,7 @@ configurations.driver.each {File file ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
task createDB {
|
task createDB {
|
||||||
description= "Creates the Database. Needs database name to be passed (like: -PdbName=someDBname)"
|
description= "Creates the MySQL Database. Needs database name to be passed (like: -PdbName=someDBname)"
|
||||||
doLast {
|
doLast {
|
||||||
def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' )
|
def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' )
|
||||||
sql.execute( 'create database '+"`$dbName`" )
|
sql.execute( 'create database '+"`$dbName`" )
|
||||||
@@ -217,12 +219,29 @@ task createDB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
task dropDB {
|
task dropDB {
|
||||||
description= "Drops the specified database. The database name has to be passed (like: -PdbName=someDBname)"
|
description= "Drops the specified MySQL database. The database name has to be passed (like: -PdbName=someDBname)"
|
||||||
doLast {
|
doLast {
|
||||||
def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' )
|
def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' )
|
||||||
sql.execute( 'DROP DATABASE '+"`$dbName`")
|
sql.execute( 'DROP DATABASE '+"`$dbName`")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task createPGDB {
|
||||||
|
description= "Creates the PostgreSQL Database. Needs database name to be passed (like: -PdbName=someDBname)"
|
||||||
|
doLast {
|
||||||
|
def sql = Sql.newInstance( 'jdbc:postgresql://localhost:5432/', pgUser, pgPassword, 'org.postgresql.Driver' )
|
||||||
|
sql.execute( 'create database '+"$dbName" )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task dropPGDB {
|
||||||
|
description= "Drops the specified PostgreSQL database. The database name has to be passed (like: -PdbName=someDBname)"
|
||||||
|
doLast {
|
||||||
|
def sql = Sql.newInstance( 'jdbc:postgresql://localhost:5432/', pgUser, pgPassword, 'org.postgresql.Driver' )
|
||||||
|
sql.execute( 'DROP DATABASE '+ "$dbName")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
task setBlankPassword {
|
task setBlankPassword {
|
||||||
doLast {
|
doLast {
|
||||||
def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' )
|
def sql = Sql.newInstance( 'jdbc:mariadb://localhost:3306/', mysqlUser, mysqlPassword, 'org.mariadb.jdbc.Driver' )
|
||||||
|
|||||||
+7
-1
@@ -183,7 +183,13 @@ public final class ResultsetColumnHeaderData implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isAnyInteger() {
|
private boolean isAnyInteger() {
|
||||||
return isInt() || isInteger() || isSmallInt() || isTinyInt() || isMediumInt() || isBigInt() || isLong();
|
return isInt() || isInteger() || isSmallInt() || isTinyInt() || isMediumInt() || isBigInt() || isLong() || isSerial();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isSerial() {
|
||||||
|
return "SERIAL".equalsIgnoreCase(this.columnType) || "SERIAL4".equalsIgnoreCase(this.columnType)
|
||||||
|
|| "SERIAL8".equalsIgnoreCase(this.columnType) || "SMALLSERIAL".equalsIgnoreCase(this.columnType)
|
||||||
|
|| "BIGSERIAL".equalsIgnoreCase(this.columnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isInt() {
|
private boolean isInt() {
|
||||||
|
|||||||
@@ -46,7 +46,13 @@ cargo {
|
|||||||
}
|
}
|
||||||
startStopTimeout = 240000
|
startStopTimeout = 240000
|
||||||
containerProperties {
|
containerProperties {
|
||||||
property 'cargo.start.jvmargs', '--add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dspring.datasource.hikari.driverClassName=org.mariadb.jdbc.Driver -Dspring.datasource.hikari.jdbcUrl=jdbc:mariadb://localhost:3306/fineract_tenants -Dspring.datasource.hikari.username=root -Dspring.datasource.hikari.password=mysql -Dfineract.tenant.host=localhost -Dfineract.tenant.port=3306 -Dfineract.tenant.username=root -Dfineract.tenant.password=mysql'
|
def jvmArgs = '--add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED '
|
||||||
|
if (project.hasProperty('dbType') && 'postgresql'.equalsIgnoreCase(dbType)) {
|
||||||
|
jvmArgs += '-Dspring.datasource.hikari.driverClassName=org.postgresql.Driver -Dspring.datasource.hikari.jdbcUrl=jdbc:postgresql://localhost:5432/fineract_tenants -Dspring.datasource.hikari.username=root -Dspring.datasource.hikari.password=postgres -Dfineract.tenant.host=localhost -Dfineract.tenant.port=5432 -Dfineract.tenant.username=root -Dfineract.tenant.password=postgres'
|
||||||
|
} else {
|
||||||
|
jvmArgs += '-Dspring.datasource.hikari.driverClassName=org.mariadb.jdbc.Driver -Dspring.datasource.hikari.jdbcUrl=jdbc:mariadb://localhost:3306/fineract_tenants -Dspring.datasource.hikari.username=root -Dspring.datasource.hikari.password=mysql -Dfineract.tenant.host=localhost -Dfineract.tenant.port=3306 -Dfineract.tenant.username=root -Dfineract.tenant.password=mysql'
|
||||||
|
}
|
||||||
|
property 'cargo.start.jvmargs', jvmArgs
|
||||||
property 'cargo.tomcat.connector.keystoreFile', file("$rootDir/fineract-provider/src/main/resources/keystore.jks")
|
property 'cargo.tomcat.connector.keystoreFile', file("$rootDir/fineract-provider/src/main/resources/keystore.jks")
|
||||||
property 'cargo.tomcat.connector.keystorePass', 'openmf'
|
property 'cargo.tomcat.connector.keystorePass', 'openmf'
|
||||||
property 'cargo.tomcat.httpSecure', true
|
property 'cargo.tomcat.httpSecure', true
|
||||||
|
|||||||
+4
-2
@@ -339,7 +339,8 @@ public class GuarantorTest {
|
|||||||
verifySavingsOnHoldBalance(externalSavigsId_1, external1_hold_funds);
|
verifySavingsOnHoldBalance(externalSavigsId_1, external1_hold_funds);
|
||||||
verifySavingsOnHoldBalance(externalSavigsId_2, external2_hold_funds);
|
verifySavingsOnHoldBalance(externalSavigsId_2, external2_hold_funds);
|
||||||
List<HashMap> guarantors = this.guarantorHelper.getAllGuarantor(loanID);
|
List<HashMap> guarantors = this.guarantorHelper.getAllGuarantor(loanID);
|
||||||
this.guarantorHelper.deleteGuarantor(externalGuarantor, loanID);
|
HashMap response = this.guarantorHelper.deleteGuarantor(externalGuarantor, loanID);
|
||||||
|
assertEquals(externalGuarantor, response.get("resourceId"));
|
||||||
assertFalse((Boolean) this.guarantorHelper.getGuarantor(externalGuarantor, loanID, "status"));
|
assertFalse((Boolean) this.guarantorHelper.getGuarantor(externalGuarantor, loanID, "status"));
|
||||||
HashMap errorlog = this.guarantorHelper.deleteGuarantor(withoutGuaranteeAmount, loanID);
|
HashMap errorlog = this.guarantorHelper.deleteGuarantor(withoutGuaranteeAmount, loanID);
|
||||||
ArrayList<HashMap> error = (ArrayList<HashMap>) errorlog.get(CommonConstants.RESPONSE_ERROR);
|
ArrayList<HashMap> error = (ArrayList<HashMap>) errorlog.get(CommonConstants.RESPONSE_ERROR);
|
||||||
@@ -359,7 +360,8 @@ public class GuarantorTest {
|
|||||||
verifySavingsOnHoldBalance(externalSavigsId_3, EXTERNAL1_GURANTEE);
|
verifySavingsOnHoldBalance(externalSavigsId_3, EXTERNAL1_GURANTEE);
|
||||||
Assertions.assertNotNull(externalGuarantee_3);
|
Assertions.assertNotNull(externalGuarantee_3);
|
||||||
|
|
||||||
this.guarantorHelper.deleteGuarantor(externalGuarantee_1, fundDetailId, loanID);
|
response = this.guarantorHelper.deleteGuarantor(externalGuarantee_3, fundDetailId, loanID);
|
||||||
|
assertEquals(externalGuarantee_3, response.get("resourceId"));
|
||||||
guarantors = this.guarantorHelper.getAllGuarantor(loanID);
|
guarantors = this.guarantorHelper.getAllGuarantor(loanID);
|
||||||
assertEquals(4, guarantors.size());
|
assertEquals(4, guarantors.size());
|
||||||
externalGuarantee_1_details = (List<HashMap>) this.guarantorHelper.getGuarantor(externalGuarantee_1, loanID,
|
externalGuarantee_1_details = (List<HashMap>) this.guarantorHelper.getGuarantor(externalGuarantee_1, loanID,
|
||||||
|
|||||||
Reference in New Issue
Block a user