12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- var color = require('cli-color')
- var execSync = require('child_process').execSync || require('execSync').exec
- var fs = require('fs')
- var path = require('path')
- /**
- * So most of this stuff will be sync, because we are moving
- * files around building docker images, etc. These all have
- * to be done in a specific order or chaos ensues
- */
- var cwd = path.join(process.cwd(), 'tests')
- process.stdout.write('Fetching Distributions... ')
- var distros = fs.readdirSync(cwd)
- var failed = []
- process.stdout.write('[' + color.green('OK!') + ']\n')
- distros.forEach(function (v1) {
- if (!fs.statSync(path.join(cwd, v1)).isDirectory()) return
- process.stdout.write('Fetching versions of ' + capitalize(v1) + '... ')
- var versions = fs.readdirSync(path.join(cwd, v1))
- process.stdout.write('[' + color.green('OK!') + ']\n')
- versions.forEach(function (v2) {
- if (!fs.statSync(path.join(cwd, v1, v2)).isDirectory()) return
- // If Dockerfile already exists, delete it.
- if (fs.existsSync(path.join(process.cwd(), 'Dockerfile'))) { fs.unlinkSync(path.join(process.cwd(), 'Dockerfile')) }
- // Move the dockerfile to the base of our repo
- fs.linkSync(path.join(cwd, v1, v2, 'Dockerfile'), path.join(process.cwd(), 'Dockerfile'))
- // Build the docker image using the dockerfile
- process.stdout.write('Building version ' + v2 + ' of ' + capitalize(v1) + '... ')
- try {
- var dockerResult = execSync('docker build -t "getos:' + v1 + v2 + '" .', { stdio: [] })
- } catch (e) {
- dockerResult = dockerResult || {}
- dockerResult.code = e
- }
- if (dockerResult.code && dockerResult.code !== 0) {
- failed.push(dockerResult)
- process.stdout.write('[' + color.red('FAILED!') + ']\n')
- } else {
- process.stdout.write('[' + color.green('OK!') + ']\n')
- process.stdout.write('Running container... ')
- // Show output from distribution
- try {
- var nodeResult = execSync('docker run -d getos:' + v1 + v2, { stdio: [] })
- } catch (e) {
- nodeResult = nodeResult || {}
- nodeResult.code = e
- }
- if (nodeResult.code && nodeResult.code !== 0) {
- failed.push(nodeResult)
- process.stdout.write('[' + color.red('FAILED!') + ']\n')
- } else {
- try {
- var dockerLog = execSync('sleep 2s && docker logs ' + (nodeResult.stdout || nodeResult.toString()), { stdio: [] })
- } catch (e) {
- dockerLog = dockerLog || {}
- dockerLog.code = e
- }
- if (dockerLog.code && dockerLog.code !== 0) {
- failed.push(dockerLog)
- process.stdout.write('[' + color.red('FAILED!') + ']\n')
- } else {
- process.stdout.write('[' + color.green('OK!') + ']\n')
- process.stdout.write('Output from version ' + v2 + ' of ' + capitalize(v1) + ': \n')
- process.stdout.write(dockerLog.stdout || dockerLog.toString())
- }
- }
- }
- // Delete the dockerfile
- fs.unlinkSync(path.join(process.cwd(), 'Dockerfile'))
- })
- })
- if (failed.length > 0) {
- fs.writeFileSync('tests.log', JSON.stringify(failed, null, ' '))
- }
- function capitalize (str) {
- return str.charAt(0).toUpperCase() + str.slice(1)
- }
|