mirror of
https://github.com/game-ci/unity-builder.git
synced 2026-01-29 12:19:06 +08:00
* Enable noImplicitAny Add types to all implicit any variables Bump target to ES2020 for recent language features (optional chaining) Code cleanup Add debug configuration for vscode Remove autorun flag from jest to remove warning Bump packages to fix dependency version mismatch warning Changed @arkweid/lefthook to @evilmartians/lefthook as @arkweid/lefthook has been deprecated in favor of @evilmartians/lefthook Added concurrency groups to integrity check and build workflows. New commits to branches will cancel superseded runs on the same branch/pr Update imports to not use require syntax Use node packages (ie node:fs rather than fs) AndroidVersionCode is now a string rather than a number as it gets converted to a string when passed out of the system Reduce timeout for windows builds Remove 2020.1.17f1 from windows builds due to repeated license activation errors Update naming scheme of workflows for consistency Update build names so target platform and unity version aren't cut off by github actions UI * Add exclude to test matrix for 2022.2 on android until Unity bug is fixed --------- Co-authored-by: AndrewKahr <AndrewKahr@users.noreply.github.com>
115 lines
3.9 KiB
TypeScript
115 lines
3.9 KiB
TypeScript
import { BuildParameters, Input } from '../..';
|
|
import YAML from 'yaml';
|
|
import CloudRunnerSecret from './cloud-runner-secret';
|
|
import { RemoteClientLogger } from '../remote-client/remote-client-logger';
|
|
import path from 'node:path';
|
|
import CloudRunnerOptions from '../cloud-runner-options';
|
|
import fs from 'node:fs';
|
|
|
|
// import CloudRunnerLogger from './cloud-runner-logger';
|
|
|
|
export class CloudRunnerCustomHooks {
|
|
// TODO also accept hooks as yaml files in the repo
|
|
public static ApplyHooksToCommands(commands: string, buildParameters: BuildParameters): string {
|
|
const hooks = CloudRunnerCustomHooks.getHooks(buildParameters.customJobHooks).filter((x) => x.step.includes(`all`));
|
|
|
|
return `echo "---"
|
|
echo "start cloud runner init"
|
|
${CloudRunnerOptions.cloudRunnerDebugEnv ? `printenv` : `#`}
|
|
echo "start of cloud runner job"
|
|
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
|
${commands}
|
|
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
|
echo "end of cloud runner job"
|
|
echo "---${buildParameters.logId}"`;
|
|
}
|
|
|
|
public static getHooks(customJobHooks: string): Hook[] {
|
|
const experimentHooks = customJobHooks;
|
|
let output = new Array<Hook>();
|
|
if (experimentHooks && experimentHooks !== '') {
|
|
output = YAML.parse(experimentHooks);
|
|
}
|
|
|
|
return output.filter((x) => x.step !== undefined && x.hook !== undefined && x.hook.length > 0);
|
|
}
|
|
|
|
static GetCustomHooksFromFiles(hookLifecycle: string): Hook[] {
|
|
const results: Hook[] = [];
|
|
RemoteClientLogger.log(`GetCustomStepFiles: ${hookLifecycle}`);
|
|
try {
|
|
const gameCiCustomStepsPath = path.join(process.cwd(), `game-ci`, `hooks`);
|
|
const files = fs.readdirSync(gameCiCustomStepsPath);
|
|
for (const file of files) {
|
|
if (!CloudRunnerOptions.customHookFiles.includes(file.replace(`.yaml`, ``))) {
|
|
continue;
|
|
}
|
|
const fileContents = fs.readFileSync(path.join(gameCiCustomStepsPath, file), `utf8`);
|
|
const fileContentsObject = CloudRunnerCustomHooks.ParseHooks(fileContents)[0];
|
|
if (fileContentsObject.hook.includes(hookLifecycle)) {
|
|
results.push(fileContentsObject);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
RemoteClientLogger.log(`Failed Getting: ${hookLifecycle} \n ${JSON.stringify(error, undefined, 4)}`);
|
|
}
|
|
RemoteClientLogger.log(`Active Steps From Files: \n ${JSON.stringify(results, undefined, 4)}`);
|
|
|
|
return results;
|
|
}
|
|
|
|
private static ConvertYamlSecrets(object: Hook) {
|
|
if (object.secrets === undefined) {
|
|
object.secrets = [];
|
|
|
|
return;
|
|
}
|
|
object.secrets = object.secrets.map((x) => {
|
|
return {
|
|
ParameterKey: x.ParameterKey,
|
|
EnvironmentVariable: Input.ToEnvVarFormat(x.ParameterKey),
|
|
ParameterValue: x.ParameterValue,
|
|
};
|
|
});
|
|
}
|
|
|
|
public static ParseHooks(steps: string): Hook[] {
|
|
if (steps === '') {
|
|
return [];
|
|
}
|
|
|
|
// if (CloudRunner.buildParameters?.cloudRunnerIntegrationTests) {
|
|
|
|
// CloudRunnerLogger.log(`Parsing build hooks: ${steps}`);
|
|
|
|
// }
|
|
const isArray = steps.replace(/\s/g, ``)[0] === `-`;
|
|
const object: Hook[] = isArray ? YAML.parse(steps) : [YAML.parse(steps)];
|
|
for (const hook of object) {
|
|
CloudRunnerCustomHooks.ConvertYamlSecrets(hook);
|
|
if (hook.secrets === undefined) {
|
|
hook.secrets = [];
|
|
}
|
|
}
|
|
if (object === undefined) {
|
|
throw new Error(`Failed to parse ${steps}`);
|
|
}
|
|
|
|
return object;
|
|
}
|
|
|
|
public static getSecrets(hooks: Hook[]) {
|
|
const secrets = hooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0);
|
|
|
|
// eslint-disable-next-line unicorn/no-array-reduce
|
|
return secrets.length > 0 ? secrets.reduce((x, y) => [...x, ...y]) : [];
|
|
}
|
|
}
|
|
export class Hook {
|
|
public commands!: string[];
|
|
public secrets: CloudRunnerSecret[] = new Array<CloudRunnerSecret>();
|
|
public name!: string;
|
|
public hook!: string[];
|
|
public step!: string[];
|
|
}
|