enso/run

58 lines
1.9 KiB
JavaScript
Executable File

#!/usr/bin/env node
const cmd = require('./build/cmd')
const fs = require('fs').promises
const path = require('path')
const os = require('os')
const fss = require('fs')
const paths = require('./build/paths')
process.on('unhandledRejection', error => { throw(error.stack) })
let args = process.argv.slice(2)
let skip_validation = '--skip-version-validation'
async function init () {
if(!args.includes(skip_validation)) {
cmd.section('Version Validation')
console.log("Use the `" + skip_validation + "` flag to skip it.")
console.log("Querying npm for the latest LTS versions.")
let [node_lts_version,npm_lts_version] = await cmd.get_node_lts_version()
console.log("Checking versions of installed packages.")
await cmd.check_version('node',node_lts_version)
await cmd.check_version('npm',npm_lts_version)
await cmd.check_version('rustc','1.61.0-nightly',{
preprocess:(v)=>v.substring(6,20)
})
}
let initialized = fss.existsSync(paths.dist.buildInit)
if (!initialized) {
cmd.section('Initialization')
console.log('Installing build script dependencies.')
await cmd.with_cwd(paths.script.root, async () => {
await cmd.run('npm',['install'])
})
await fs.mkdir(paths.dist.root, {recursive:true})
await fs.open(paths.dist.buildInit,'w')
}
}
// Check the location of the repository root. It must not be located at `~/enso`, as this directory
// is used by project manager to store Enso's projects.
function throwIfInvalidRootLocation() {
let rootPath = path.resolve(__dirname)
let homeDir = os.homedir()
if (rootPath == path.resolve(homeDir, 'enso')) {
throw '~/enso location cannot be used as a repository root, please use a different location'
}
}
async function main() {
throwIfInvalidRootLocation()
await init()
cmd.run('node',[paths.script.run].concat(args))
}
main()