unity-builder/src/model/cli/cli.ts

113 lines
4.0 KiB
TypeScript
Raw Normal View History

2022-02-01 02:31:20 +00:00
import { Command } from 'commander-ts';
import { BuildParameters, CloudRunner, ImageTag, Input } from '..';
import * as core from '@actions/core';
import { ActionYamlReader } from '../input-readers/action-yaml';
import CloudRunnerLogger from '../cloud-runner/services/cloud-runner-logger';
import { CliFunction, GetAllCliModes, GetCliFunctions } from './cli-decorator';
import { RemoteClientLogger } from './remote-client/remote-client-services/remote-client-logger';
import { SetupCloudRunnerRepository } from './remote-client/setup-cloud-runner-repository';
import * as SDK from 'aws-sdk';
2022-04-04 21:05:46 +00:00
import { Caching } from './remote-client/remote-client-services/caching';
2022-02-01 02:31:20 +00:00
export class CLI {
private static options;
2022-02-01 02:31:20 +00:00
public static InitCliMode() {
2022-02-01 02:31:20 +00:00
const program = new Command();
program.version('0.0.1');
const properties = Object.getOwnPropertyNames(Input);
const actionYamlReader: ActionYamlReader = new ActionYamlReader();
for (const element of properties) {
program.option(`--${element} <${element}>`, actionYamlReader.GetActionYamlValue(element));
}
program.option(
'-m, --mode <mode>',
GetAllCliModes()
.map((x) => `${x.key} (${x.description})`)
.join(` | `),
);
2022-04-04 21:05:46 +00:00
program.option('--populateOverride <populate>', 'should use override query to pull input false by default');
2022-02-01 02:31:20 +00:00
program.parse(process.argv);
CLI.options = program.opts();
Input.cliOptions = CLI.options;
return Input.cliMode;
}
2022-02-01 02:31:20 +00:00
static async RunCli(): Promise<void> {
Input.githubInputEnabled = false;
2022-04-04 21:05:46 +00:00
if (CLI.options['populate'] === `true`) {
await Input.PopulateQueryOverrideInput();
}
CLI.logInput();
const results = GetCliFunctions(CLI.options.mode);
CloudRunnerLogger.log(`Entrypoint: ${results.key}`);
CLI.options.versioning = 'None';
return await results.target[results.propertyKey]();
}
private static logInput() {
core.info(`\n`);
core.info(`INPUT:`);
const properties = Object.getOwnPropertyNames(Input);
for (const element of properties) {
if (
Input[element] !== undefined &&
Input[element] !== '' &&
typeof Input[element] !== `function` &&
element !== 'length' &&
element !== 'cliOptions' &&
element !== 'prototype'
) {
core.info(`${element} ${Input[element]}`);
}
}
core.info(`\n`);
2022-02-01 02:31:20 +00:00
}
@CliFunction(`cli`, `runs a cloud runner build`)
public static async CLIBuild(): Promise<string> {
const buildParameter = await BuildParameters.create();
const baseImage = new ImageTag(buildParameter);
return await CloudRunner.run(buildParameter, baseImage.toString());
}
@CliFunction(`remote-cli`, `sets up a repository, usually before a game-ci build`)
static async runRemoteClientJob() {
const buildParameter = JSON.parse(process.env.BUILD_PARAMETERS || '{}');
RemoteClientLogger.log(`Build Params:
${JSON.stringify(buildParameter, undefined, 4)}
`);
CloudRunner.buildParameters = buildParameter;
2022-02-01 02:31:20 +00:00
await SetupCloudRunnerRepository.run();
}
2022-04-04 19:54:48 +00:00
@CliFunction(`cache-push`, `push to cache`)
2022-04-04 21:05:46 +00:00
static async cachePush() {
const buildParameter = JSON.parse(process.env.BUILD_PARAMETERS || '{}');
RemoteClientLogger.log(`Build Params:
${JSON.stringify(buildParameter, undefined, 4)}
`);
CloudRunner.buildParameters = buildParameter;
await Caching.PushToCache(
Input.cliOptions['cachePushFrom'],
Input.cliOptions['cachePushTo'],
Input.cliOptions['artifactName'],
);
CloudRunnerLogger.log(
`${Input.cliOptions['cachePushFrom']} ${Input.cliOptions['cachePushTo']} ${Input.cliOptions['artifactName']}`,
);
}
2022-02-01 02:31:20 +00:00
2022-04-04 19:54:48 +00:00
@CliFunction(`cache-pull`, `pull from cache`)
2022-02-01 02:31:20 +00:00
static async cachePull() {}
@CliFunction(`garbage-collect-aws`, `garbage collect aws`)
static async garbageCollectAws() {
process.env.AWS_REGION = Input.region;
const CF = new SDK.CloudFormation();
const stacks = await CF.listStacks().promise();
CloudRunnerLogger.log(JSON.stringify(stacks, undefined, 4));
}
}