Skip to content

Commit ad992b9

Browse files
committed
ci: add refresh sandbox DB containers script
1 parent 369fe0d commit ad992b9

1 file changed

Lines changed: 80 additions & 0 deletions

File tree

dev/deploy-to-container/refresh.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#!/usr/bin/env node
2+
3+
import Docker from 'dockerode'
4+
5+
async function main () {
6+
// Connect to Docker Engine API
7+
console.info('Connecting to Docker Engine API...')
8+
const dock = new Docker()
9+
await dock.ping()
10+
console.info('Connected to Docker Engine API.')
11+
12+
// Pull latest DB image
13+
console.info('Pulling latest DB docker image...')
14+
const dbImagePullStream = await dock.pull('ghcr.io/ietf-tools/datatracker-db:latest')
15+
await new Promise((resolve, reject) => {
16+
dock.modem.followProgress(dbImagePullStream, (err, res) => err ? reject(err) : resolve(res))
17+
})
18+
console.info('Pulled latest DB docker image successfully.')
19+
20+
// Terminate existing containers
21+
console.info('Terminating DB containers and stopping app containers...')
22+
const containers = await dock.listContainers({ all: true })
23+
const dbContainersToCreate = []
24+
const containersToRestart = []
25+
for (const container of containers) {
26+
if (
27+
container.Names.some(n => n.startsWith('/dt-db-'))
28+
) {
29+
console.info(`Terminating DB container ${container.Id}...`)
30+
dbContainersToCreate.push(container.Names.find(n => n.startsWith('/dt-db-')).substring(1))
31+
const oldContainer = dock.getContainer(container.Id)
32+
if (container.State === 'running') {
33+
await oldContainer.stop({ t: 5 })
34+
}
35+
await oldContainer.remove({
36+
force: true,
37+
v: true
38+
})
39+
} else if (
40+
container.Names.some(n => n.startsWith('/dt-app-')) ||
41+
container.Names.some(n => n.startsWith('/dt-celery-')) ||
42+
container.Names.some(n => n.startsWith('/dt-beat-'))
43+
) {
44+
if (container.State === 'running') {
45+
containersToRestart.push(container)
46+
console.info(`Stopping app / celery container ${container.Id}...`)
47+
await container.stop({ t: 5 })
48+
}
49+
}
50+
}
51+
console.info('DB containers have been terminated.')
52+
53+
// Create DB containers
54+
for (const dbContainerName of dbContainersToCreate) {
55+
console.info(`Recreating DB docker container... [${dbContainerName}]`)
56+
const dbContainer = await dock.createContainer({
57+
Image: 'ghcr.io/ietf-tools/datatracker-db:latest',
58+
name: dbContainerName,
59+
Hostname: dbContainerName,
60+
HostConfig: {
61+
NetworkMode: 'shared',
62+
RestartPolicy: {
63+
Name: 'unless-stopped'
64+
}
65+
}
66+
})
67+
await dbContainer.start()
68+
}
69+
console.info('Recreated and started DB docker containers successfully.')
70+
71+
console.info('Restarting app / celery containers...')
72+
for (const appContainer of containersToRestart) {
73+
await appContainer.start()
74+
}
75+
console.info('Done.')
76+
77+
process.exit(0)
78+
}
79+
80+
main()

0 commit comments

Comments
 (0)