Skip to content

Commit a0b2389

Browse files
committed
add DbSchemaGenerator, update dependencies, and integrate workflow for database file generation
1 parent 3a6a03f commit a0b2389

File tree

7 files changed

+88
-9
lines changed

7 files changed

+88
-9
lines changed

.github/workflows/build.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,12 @@ jobs:
5858
with:
5959
report_paths: 'server/build/test-results/test/TEST-*.xml'
6060
comment: true
61+
62+
- name: generate db file
63+
run: ./gradlew generateDb
64+
65+
- name: capture db file
66+
uses: actions/upload-artifact@v6
67+
with:
68+
name: database
69+
path: server/build/db.mv.db

fabric/gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# check these on https://fabricmc.net/develop
2-
loader_version=0.18.3
2+
loader_version=0.18.4
33
fabric_api_version=0.136.1+1.21.8
4-
fabric_kotlin_version=1.13.6+kotlin.2.2.20
4+
fabric_kotlin_version=1.13.8+kotlin.2.3.0

front/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@
3131
"tailwindcss": "^4.1.5",
3232
"yaml": "^2.7.1"
3333
}
34-
}
34+
}

server/build.gradle

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,15 @@ jar {
9999

100100
test {
101101
useJUnitPlatform()
102+
}
103+
104+
tasks.register("generateDbFile", JavaExec) {
105+
group = "other"
106+
description = "Generate H2 database with full schema"
107+
108+
//noinspection ConfigurationAvoidance
109+
classpath = sourceSets["main"].runtimeClasspath
110+
mainClass.set("ua.pp.lumivoid.iwtcms.server.DbSchemaGenerator")
111+
112+
workingDir = projectDir
102113
}

server/gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# https://ktor.io/docs/server-dependencies.html
2-
ktor_version=3.3.3
2+
ktor_version=3.4.0
33
# https://github.com/lightbend/config
4-
hocon_config_version=1.4.4
4+
hocon_config_version=1.4.5
55
# https://mvnrepository.com/artifact/commons-codec/commons-codec
6-
commons_codec=1.19.0
6+
commons_codec=1.21.0
77
# https://github.com/charleskorn/kaml/releases/latest
8-
kaml_version=0.98.0
8+
kaml_version=0.104.0
99

1010
# https://spark.lucko.me/docs/Developer-API
1111
spark_api_version=0.1-SNAPSHOT
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package ua.pp.lumivoid.iwtcms.server
2+
3+
import kotlinx.coroutines.runBlocking
4+
import org.jetbrains.exposed.v1.jdbc.Database
5+
import org.jetbrains.exposed.v1.jdbc.SchemaUtils
6+
import org.jetbrains.exposed.v1.jdbc.insertIgnore
7+
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
8+
import org.jetbrains.exposed.v1.jdbc.upsert
9+
import ua.pp.lumivoid.iwtcms.server.api.requests.api.user.CreateUser
10+
import ua.pp.lumivoid.iwtcms.server.tables.*
11+
import ua.pp.lumivoid.iwtcms.server.util.Config
12+
import java.io.File
13+
import kotlin.time.Instant
14+
15+
/**
16+
* This object used just to generate a database file in generateDbFile task
17+
* Used in actions to upload db copy to artifacts for future migrations testing
18+
*/
19+
object DbSchemaGenerator {
20+
@JvmStatic
21+
@Suppress("DuplicatedCode")
22+
fun main(args: Array<String>) {
23+
File("./build/db.mv.db").delete()
24+
File("./build/db.trace.db").delete()
25+
26+
Database.connect(
27+
url = "jdbc:h2:file:./build/db;MODE=MYSQL",
28+
driver = Config.DbDriver.H2.driver
29+
)
30+
31+
transaction {
32+
SchemaUtils.create(
33+
UsersTable,
34+
UserPermissionsTable,
35+
MetaTable
36+
)
37+
38+
MetaTable.insertIgnore { it[key] = "iwtcms"; it[value] = "iwtcms" } // just why no?
39+
MetaTable.insertIgnore { it[key] = "schema_version"; it[value] = Constants.SCHEMA_VERSION }
40+
MetaTable.insertIgnore { it[key] = "last_migration_at"; it[value] = "unknown" }
41+
MetaTable.insertIgnore { it[key] = "last_migration_from"; it[value] = "unknown" }
42+
MetaTable.insertIgnore { it[key] = "last_migration_to"; it[value] = "unknown" }
43+
MetaTable.insertIgnore { it[key] = "last_migration_success"; it[value] = "unknown" }
44+
MetaTable.insertIgnore { it[key] = "total_migrations"; it[value] = "0" }
45+
MetaTable.upsert { it[key] = "last_used_at"; it[value] = Instant.fromEpochMilliseconds(System.currentTimeMillis()).toString() }
46+
MetaTable.upsert { it[key] = "last_used_by"; it[value] = "iwtcms-test" } // for easy debug (if used not by iwtcms must be different, for e.g. iwtcms forks)
47+
MetaTable.insertIgnore { it[key] = "last_shutdown_at"; it[value] = "unknown" }
48+
MetaTable.insertIgnore { it[key] = "initial_iwtcms_version"; it[value] = Constants.MOD_VERSION }
49+
MetaTable.upsert { it[key] = "last_iwtcms_version"; it[value] = Constants.MOD_VERSION }
50+
51+
runBlocking { CreateUser.create("admin", "iwtcms", true, emptyList()) }
52+
UserPermissionEntity.new {
53+
this.permissionName = "test"
54+
this.user = UserEntity.all().single()
55+
}
56+
}
57+
}
58+
}

server/src/main/kotlin/ua/pp/lumivoid/iwtcms/server/Entry.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ internal object Entry {
2121
private val logger = Constants.LOGGER
2222

2323
@OptIn(ExperimentalTime::class)
24+
@Suppress("DuplicatedCode")
2425
fun launch() {
2526
logger.info("Starting iwtcms")
2627

@@ -42,9 +43,9 @@ internal object Entry {
4243
val dbUrl: String = if (config.useExternalDb) {
4344
"${config.externalDbDriver.url}//${config.externalDbIp}:${config.externalDbPort}/${config.externalDbIWTCMSName}"
4445
} else {
45-
"h2:file:///${Constants.DB_FILE.replace("\\", "/")};MODE=MYSQL"
46+
"h2:file:${Constants.DB_FILE.replace("\\", "/")};MODE=MYSQL"
4647
}
47-
val dbDriver = if (config.useExternalDb) config.externalDbDriver.driver else "h2"
48+
val dbDriver = if (config.useExternalDb) config.externalDbDriver.driver else Config.DbDriver.H2.driver
4849

4950
logger.info("Connecting to DB jdbc:$dbUrl with driver: $dbDriver")
5051

0 commit comments

Comments
 (0)