Add option to install a generated distro to the local Helios data folder
* Run g distro with --installLocal to have the generated file be copied into the local helios data folder. * New property required in the .env, HELIOS_DATA_FOLDER * Added two launch configurations to vs code.
This commit is contained in:
22
.vscode/launch.json
vendored
22
.vscode/launch.json
vendored
@@ -7,14 +7,26 @@
|
|||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "Launch Program",
|
"name": "Generate Distribution",
|
||||||
"program": "${workspaceFolder}\\src\\index.ts",
|
"program": "${workspaceFolder}\\src\\index.ts",
|
||||||
"args": [
|
"args": [
|
||||||
"g",
|
"g", "distro"
|
||||||
"distro",
|
|
||||||
"xyz"
|
|
||||||
],
|
],
|
||||||
"preLaunchTask": "compile",
|
"preLaunchTask": "build",
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/dist/**/*.js"
|
||||||
|
],
|
||||||
|
"outputCapture": "std",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Install Dev Distribution",
|
||||||
|
"program": "${workspaceFolder}\\src\\index.ts",
|
||||||
|
"args": [
|
||||||
|
"g", "distro", "dev_distribution", "--installLocal"
|
||||||
|
],
|
||||||
|
"preLaunchTask": "build",
|
||||||
"outFiles": [
|
"outFiles": [
|
||||||
"${workspaceFolder}/dist/**/*.js"
|
"${workspaceFolder}/dist/**/*.js"
|
||||||
],
|
],
|
||||||
|
|||||||
10
.vscode/tasks.json
vendored
10
.vscode/tasks.json
vendored
@@ -13,6 +13,16 @@
|
|||||||
"presentation": {
|
"presentation": {
|
||||||
"reveal": "silent"
|
"reveal": "silent"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "build",
|
||||||
|
"type": "npm",
|
||||||
|
"script": "build",
|
||||||
|
"group": "build",
|
||||||
|
"problemMatcher": [],
|
||||||
|
"presentation": {
|
||||||
|
"reveal": "silent"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
10
README.md
10
README.md
@@ -25,6 +25,7 @@ Example
|
|||||||
JAVA_EXECUTABLE=C:\Program Files\AdoptOpenJDK\jdk-8.0.232.09-hotspot\bin\java.exe
|
JAVA_EXECUTABLE=C:\Program Files\AdoptOpenJDK\jdk-8.0.232.09-hotspot\bin\java.exe
|
||||||
ROOT=D:\TestRoot2
|
ROOT=D:\TestRoot2
|
||||||
BASE_URL=http://localhost:8080/
|
BASE_URL=http://localhost:8080/
|
||||||
|
HELIOS_DATA_FOLDER=C:\Users\user\AppData\Roaming\Helios Launcher
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -121,11 +122,20 @@ Arguments:
|
|||||||
* `name` The name of the distribution file.
|
* `name` The name of the distribution file.
|
||||||
* OPTIONAL (default: `distribution`)
|
* OPTIONAL (default: `distribution`)
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
* `--installLocal` Have the application install a copy of the generated distribution to the Helios data folder.
|
||||||
|
* OPTIONAL (default: false)
|
||||||
|
* This is useful to easily test the new distribution.json in dev mode on Helios.
|
||||||
|
* Tip: Set name to `dev_distribution` when using this option.
|
||||||
|
|
||||||
>
|
>
|
||||||
> Example Usage
|
> Example Usage
|
||||||
>
|
>
|
||||||
> `generate distro`
|
> `generate distro`
|
||||||
>
|
>
|
||||||
|
> `generate distro dev_distribution --installLocal`
|
||||||
|
>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
47
src/index.ts
47
src/index.ts
@@ -20,6 +20,13 @@ function getRoot(): string {
|
|||||||
return resolvePath(process.env.ROOT as string)
|
return resolvePath(process.env.ROOT as string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getHeliosDataFolder(): string | null {
|
||||||
|
if(process.env.HELIOS_DATA_FOLDER) {
|
||||||
|
return resolvePath(process.env.HELIOS_DATA_FOLDER as string)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
function getBaseURL(): string {
|
function getBaseURL(): string {
|
||||||
let baseUrl = process.env.BASE_URL as string
|
let baseUrl = process.env.BASE_URL as string
|
||||||
// Users must provide protocol in all other instances.
|
// Users must provide protocol in all other instances.
|
||||||
@@ -33,6 +40,16 @@ function getBaseURL(): string {
|
|||||||
return (new URL(baseUrl)).toString()
|
return (new URL(baseUrl)).toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function installLocalOption(yargs: yargs.Argv) {
|
||||||
|
return yargs.option('installLocal', {
|
||||||
|
describe: 'Install the generated distribution to your local Helios data folder.',
|
||||||
|
type: 'boolean',
|
||||||
|
demandOption: false,
|
||||||
|
global: false,
|
||||||
|
default: false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// function rootOption(yargs: yargs.Argv) {
|
// function rootOption(yargs: yargs.Argv) {
|
||||||
// return yargs.option('root', {
|
// return yargs.option('root', {
|
||||||
// describe: 'File structure root.',
|
// describe: 'File structure root.',
|
||||||
@@ -177,8 +194,7 @@ const generateDistroCommand: yargs.CommandModule = {
|
|||||||
command: 'distro [name]',
|
command: 'distro [name]',
|
||||||
describe: 'Generate a distribution index from the root file structure.',
|
describe: 'Generate a distribution index from the root file structure.',
|
||||||
builder: (yargs) => {
|
builder: (yargs) => {
|
||||||
// yargs = rootOption(yargs)
|
yargs = installLocalOption(yargs)
|
||||||
// yargs = baseUrlOption(yargs)
|
|
||||||
yargs = namePositional(yargs)
|
yargs = namePositional(yargs)
|
||||||
return yargs
|
return yargs
|
||||||
},
|
},
|
||||||
@@ -186,17 +202,36 @@ const generateDistroCommand: yargs.CommandModule = {
|
|||||||
argv.root = getRoot()
|
argv.root = getRoot()
|
||||||
argv.baseUrl = getBaseURL()
|
argv.baseUrl = getBaseURL()
|
||||||
|
|
||||||
|
const finalName = `${argv.name}.json`
|
||||||
|
|
||||||
logger.debug(`Root set to ${argv.root}`)
|
logger.debug(`Root set to ${argv.root}`)
|
||||||
logger.debug(`Base Url set to ${argv.baseUrl}`)
|
logger.debug(`Base Url set to ${argv.baseUrl}`)
|
||||||
logger.debug(`Invoked generate distro name ${argv.name}.json.`)
|
logger.debug(`Install option set to ${argv.install}`)
|
||||||
|
logger.debug(`Invoked generate distro name ${finalName}.`)
|
||||||
|
|
||||||
|
const doLocalInstall = argv.installLocal as boolean
|
||||||
|
const heliosDataFolder = getHeliosDataFolder()
|
||||||
|
if(doLocalInstall && heliosDataFolder == null) {
|
||||||
|
logger.error('You MUST specify HELIOS_DATA_FOLDER in your .env when using the --install option.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const distributionStruct = new DistributionStructure(argv.root as string, argv.baseUrl as string)
|
const distributionStruct = new DistributionStructure(argv.root as string, argv.baseUrl as string)
|
||||||
const distro = await distributionStruct.getSpecModel()
|
const distro = await distributionStruct.getSpecModel()
|
||||||
const distroPath = resolvePath(argv.root as string, `${argv.name}.json`)
|
const distroOut = JSON.stringify(distro, null, 2)
|
||||||
writeFile(distroPath, JSON.stringify(distro, null, 2))
|
const distroPath = resolvePath(argv.root as string, finalName)
|
||||||
logger.info(`Successfully generated ${argv.name}.json`)
|
writeFile(distroPath, distroOut)
|
||||||
|
logger.info(`Successfully generated ${finalName}`)
|
||||||
logger.info(`Saved to ${distroPath}`)
|
logger.info(`Saved to ${distroPath}`)
|
||||||
logger.debug('Preview:\n', distro)
|
logger.debug('Preview:\n', distro)
|
||||||
|
if(doLocalInstall) {
|
||||||
|
const finalDestination = resolvePath(heliosDataFolder!, finalName)
|
||||||
|
logger.info(`Installing distribution to ${finalDestination}`)
|
||||||
|
writeFile(finalDestination, distroOut)
|
||||||
|
logger.info('Success!')
|
||||||
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(`Failed to generate distribution with root ${argv.root}.`, error)
|
logger.error(`Failed to generate distribution with root ${argv.root}.`, error)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user