()
| 270 | |
| 271 | let mysqlContainer: Docker.Container; |
| 272 | export async function createDockerDB(): Promise<{ |
| 273 | connectionString: string; |
| 274 | container: Docker.Container; |
| 275 | }> { |
| 276 | const docker = new Docker(); |
| 277 | const port = await getPort({ port: 3306 }); |
| 278 | const image = 'mysql:8'; |
| 279 | |
| 280 | const pullStream = await docker.pull(image); |
| 281 | await new Promise((resolve, reject) => |
| 282 | docker.modem.followProgress(pullStream, (err) => err ? reject(err) : resolve(err)) |
| 283 | ); |
| 284 | |
| 285 | mysqlContainer = await docker.createContainer({ |
| 286 | Image: image, |
| 287 | Env: ['MYSQL_ROOT_PASSWORD=mysql', 'MYSQL_DATABASE=drizzle'], |
| 288 | name: `drizzle-integration-tests-${uuid()}`, |
| 289 | HostConfig: { |
| 290 | AutoRemove: true, |
| 291 | PortBindings: { |
| 292 | '3306/tcp': [{ HostPort: `${port}` }], |
| 293 | }, |
| 294 | }, |
| 295 | }); |
| 296 | |
| 297 | await mysqlContainer.start(); |
| 298 | await new Promise((resolve) => setTimeout(resolve, 4000)); |
| 299 | |
| 300 | return { |
| 301 | connectionString: `mysql://root:mysql@127.0.0.1:${port}/drizzle`, |
| 302 | container: mysqlContainer, |
| 303 | }; |
| 304 | } |
| 305 | |
| 306 | afterAll(async () => { |
| 307 | await mysqlContainer?.stop().catch(console.error); |
no test coverage detected