docker-compose.ts 1004 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
import * as compose from 'docker-compose'
import * as shell from 'shelljs'
import * as path from 'path'


type ServiceNames = 'batch_submitter' | 'dtl' | 'l2geth' | 'relayer'

const OPS_DIRECTORY = path.join(process.cwd(), '../ops')
const DEFAULT_SERVICES: ServiceNames[] = ['batch_submitter', 'dtl', 'l2geth', 'relayer']

export class DockerComposeNetwork {
    constructor(private readonly services: ServiceNames[] = DEFAULT_SERVICES) {}

    async up() {
        const out = await compose.upMany(this.services, {cwd: OPS_DIRECTORY})

        const {err, exitCode} = out;

        if (!err || exitCode) {
            console.error(err)
            throw new Error('Unexpected error when starting docker-compose network, dumping output')
        }

        if (err.includes('Creating')) {
            console.info('🐳 Tests required starting containers. Waiting for sequencer to ready.')
            shell.exec(`${OPS_DIRECTORY}/scripts/wait-for-sequencer.sh`, {cwd: OPS_DIRECTORY})
        }
    }
}