Compare commits

...

10 Commits

Author SHA1 Message Date
90fcdcaa4f Update README.md 2026-04-16 16:17:12 +00:00
d26f0a1310 Upgrade dependencies 2026-02-19 14:16:50 +01:00
e3931e3e8f improve ci 2026-01-13 18:16:01 +01:00
3380f50cc7 update README
All checks were successful
/ publish (push) Successful in 1m2s
2025-12-13 23:11:46 +01:00
b777eadd13 bump version to 1.1.1 2025-12-13 23:09:13 +01:00
bba1f2d63d update dependencies 2025-12-13 23:09:05 +01:00
27b335a0af fix workflow
All checks were successful
/ publish (push) Successful in 48s
2025-12-13 01:31:56 +01:00
21ed1c40b5 refactor build.gradle.kts 2025-12-13 01:04:46 +01:00
d0c130cb61 use common plugin 2025-12-13 00:49:46 +01:00
1fbff53dbd refactor 2025-12-12 21:59:18 +01:00
7 changed files with 70 additions and 100 deletions

View File

@@ -1,34 +0,0 @@
on:
push:
branches:
- main
env:
GIT__TOKEN: ${{ secrets.TOKEN }}
jobs:
publish:
runs-on: linux
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
with:
key: gradle
path: |
~/.gradle/caches/
~/.gradle/wrapper/
- uses: actions/setup-java@v4
with:
java-version: '24'
distribution: 'temurin'
- run: ./gradlew publish
- uses: actions/cache/save@v4
with:
key: gradle
path: |
~/.gradle/caches/
~/.gradle/wrapper/

View File

@@ -0,0 +1,30 @@
on:
push:
branches: [ main ]
jobs:
publish:
runs-on: linux
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '24'
distribution: 'temurin'
- name: Cache Gradle
uses: actions/cache@v4
with:
key: gradle-${{ hashFiles('**/libs.versions.toml') }}
restore-keys: gradle
path: |
~/.gradle/caches/
~/.gradle/wrapper/
- name: Publish
run: ./gradlew publish
env:
INFENDRO__TOKEN: ${{ secrets.TOKEN }}

View File

@@ -1,12 +1,6 @@
# Ktor Plugin for Database Migration # migration.ktor
This plugin enables code-based database migrations in Ktor using [Kotlin Database Migration](https://git.infendro.com/Infendro/kotlin-migration). `migration.ktor` is a Kotlin library that enables code-based migrations in Ktor.
## Features
* Declare database migrations (identified by a unique name).
* Migrations are executed in the order they are declared in.
* Executed migrations are tracked in a database table and skipped on subsequent runs.
## Installation ## Installation
@@ -18,17 +12,13 @@ repositories {
} }
dependencies { dependencies {
implementation("com.infendro:ktor-migration:1.1.0") implementation("com.infendro:ktor-migration:1.2.0")
} }
``` ```
## Usage ## Usage
```kotlin ```kotlin
import com.infendro.ktor.migration.Migration
import io.ktor.server.application.*
import org.jetbrains.exposed.sql.Database
fun Application.configureDatabase() { fun Application.configureDatabase() {
// connect to a database // connect to a database
Database.connect(/* parameters */) Database.connect(/* parameters */)

View File

@@ -1,55 +1,37 @@
group = "com.infendro" import com.infendro.plugin.infendro
version = "1.1.0" import com.infendro.plugin.token
repositories { group = "com.infendro"
maven("https://git.infendro.com/api/packages/Infendro/maven") version = "1.2.0"
mavenCentral()
}
plugins { plugins {
alias(libs.plugins.infendro)
alias(libs.plugins.kotlin) alias(libs.plugins.kotlin)
id("maven-publish") id("maven-publish")
} }
repositories {
infendro()
mavenCentral()
}
dependencies { dependencies {
implementation(libs.ktor.server) implementation(libs.ktor.server)
implementation(libs.exposed)
implementation(libs.migration) implementation(libs.migration)
implementation(libs.exposed)
implementation(libs.exposed.jdbc)
} }
publishing { publishing {
publications { publications {
create<MavenPublication>("JVM") { create<MavenPublication>("JVM") {
from(components["java"]) from(components["java"])
groupId = group as String groupId = project.group as String
artifactId = project.name artifactId = project.name
version = version version = project.version as String
} }
} }
repositories { repositories {
maven { infendro(token)
url = uri("https://git.infendro.com/api/packages/Infendro/maven")
authentication.create("header", HttpHeaderAuthentication::class)
credentials(HttpHeaderCredentials::class) {
val token = secret("git.token") ?: throw GradleException()
name = "Authorization"
value = "token $token"
}
}
} }
} }
fun secret(
key: String,
): String? {
val property = key
val environment = key
.uppercase()
.replace(".", "__")
val prop = properties[property] as String?
val env = System.getenv(environment)
return prop ?: env
}

View File

@@ -1,14 +1,16 @@
[versions] [versions]
kotlin = "2.2.10" infendro = "1.1.0"
ktor = "3.2.3" kotlin = "2.3.0"
exposed = "0.61.0" ktor = "3.4.0"
migration = "1.1.0" migration = "1.2.0"
exposed = "1.0.0"
[plugins] [plugins]
infendro = { id = "com.infendro.plugin", version.ref = "infendro" }
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
[libraries] [libraries]
ktor-server = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" } ktor-server = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" }
exposed = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
migration = { module = "com.infendro:migration", version.ref = "migration" } migration = { module = "com.infendro:migration", version.ref = "migration" }
exposed = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }

View File

@@ -1 +1,6 @@
rootProject.name = "ktor-migration" rootProject.name = "migration-ktor"
pluginManagement.repositories {
maven("https://git.infendro.com/api/packages/Infendro/maven")
mavenCentral()
}

View File

@@ -1,24 +1,19 @@
package com.infendro.ktor.migration package com.infendro.ktor.migration
import com.infendro.migration.Config
import com.infendro.migration.migrate import com.infendro.migration.migrate
import io.ktor.server.application.* import io.ktor.server.application.*
import org.jetbrains.exposed.sql.Transaction import org.jetbrains.exposed.v1.jdbc.JdbcTransaction
@Suppress("UNUSED") val Migration = createApplicationPlugin("Migration", MigrationConfig::new) {
val Migration = createApplicationPlugin(
name = "Migration",
createConfiguration = { MigrationConfig() },
) {
migrate(pluginConfig.config) migrate(pluginConfig.config)
} }
class MigrationConfig { class MigrationConfig {
internal val config = Config() internal val config = com.infendro.migration.MigrationConfig()
@Suppress("UNUSED") fun migration(name: String, migrate: JdbcTransaction.() -> Unit) = config.migration(name, migrate)
fun migration(
name: String, companion object {
migrate: Transaction.() -> Unit, fun new() = MigrationConfig()
) = config.migration(name, migrate) }
} }