Thanks,
Where does the import of PostgreSQLContainer come from? I don't see it in 
imports and I don't see the dependency...

On Thursday 22 February 2024 at 12:36:29 UTC+1 HOMERMAN wrote:

> I do this exact thing in one of my Gradle builds. Runnig this task with 
> *-Penvironment=test* will:
>
>    1. Create a Postgres Docker container
>    2. Initialize it with your Liquibase changelogs
>    3. Generate your jOOQ artifacts, and 
>    4. Shut down the container afterwards
>
> You can see *if(environment == "test")* then Docker + Liquibase 
> operations are invoked.
>
> There's some hard-coded concepts (like environment names, Docker image 
> version, etc), but you should be able to adapt it to your needs.
>
> ###################################
>
> import liquibase.Liquibase
> import liquibase.database.DatabaseFactory
> import liquibase.database.jvm.JdbcConnection
> import liquibase.resource.DirectoryResourceAccessor
> import java.sql.DriverManager
>
> tasks.register("jooqGenerate") {
>   group = "jooq"
>   description = "Runs the jOOQ code generator against the schema defined 
> in the Liquibase changelogs"
>
>   doLast {
>     val environment = findProperty("environment")?.toString() ?: "local"
>
>     var postgresContainer: PostgreSQLContainer<Nothing>? = null
>     val schemaName: String
>     val driverClassName: String
>     val jdbcUrl: String
>     val username: String
>     val password: String
>
>     if(environment == "test") {
>       postgresContainer = 
> PostgreSQLContainer<Nothing>("postgres:16.1").apply { start() }
>
>       schemaName = "public"
>
>       driverClassName = postgresContainer!!.driverClassName
>       jdbcUrl = postgresContainer.jdbcUrl
>       username = postgresContainer.username
>       password = postgresContainer.password
>
>       Class.forName(driverClassName)
>
>       DriverManager.getConnection(jdbcUrl, username, password)
>         .use { connection ->
>           connection.autoCommit = true
>
>           connection.createStatement().use { statement ->
>             statement.executeUpdate("create schema if not exists 
> $schemaName")
>           }
>
>           connection.schema = schemaName
>
>           JdbcConnection(connection).use { liquibaseJdbcConnection ->
>             val liquibaseDatabase = 
> DatabaseFactory.getInstance().findCorrectDatabaseImplementation(liquibaseJdbcConnection)
>
>             val liquibase = Liquibase("main.yaml", 
> DirectoryResourceAccessor(File("...")), liquibaseDatabase)
>             liquibase.update("")
>             liquibase.forceReleaseLocks()
>           }
>         }
>
>     } else {
>       schemaName = if(environment == "local") "public" else environment
>
>       driverClassName = findProperty(...)!!.toString()
>       jdbcUrl = findProperty(...)!!.toString()
>       username = findProperty(...)!!.toString()
>       password = findProperty(...)!!.toString()
>     }
>
>     GenerationTool.generate(
>       Configuration()
>         .withJdbc(
>           Jdbc()
>             .withDriver(org.postgresql.Driver::class.java.name)
>             .withUrl(jdbcUrl)
>             .withUsername(username)
>             .withPassword(password)
>         )
>         .withGenerator(
>           Generator()
>             .withName(...)
>             .withStrategy(...)
>             .withDatabase(...)
>             .withGenerate(...)
>             .withTarget(...)
>         )
>     )
>
>     postgresContainer?.stop()
>   }
> }
>
>
> On Thursday, February 22, 2024 at 6:31:34 PM UTC+9 [email protected] 
> wrote:
>
>> Well, what did you try?
>>
>> On Thu, Feb 22, 2024 at 10:19 AM Pasha Finkelshtein <
>> [email protected]> wrote:
>>
>>> This obviously SHOULD work, but it doesn't. And I was hoping to get a 
>>> concrete example to understand what I'm doing wrong.
>>>
>>> It seems to me that test containers just don't work during the gradle 
>>> build, but maybe I'm wrong. And since nobody in the Testcontainers slack 
>>> answer I thought that maybe here somebody has a working example.
>>>
>>> Sorry for bothering you
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jooq-user/6e2cf30e-eb82-4339-848b-5cd3cb614af1n%40googlegroups.com.

Reply via email to