unity-builder/src/model/cloud-runner/workflows/build-automation-workflow.ts

122 lines
5.4 KiB
TypeScript
Raw Normal View History

2022-02-01 02:31:20 +00:00
import CloudRunnerLogger from '../services/cloud-runner-logger';
import { CloudRunnerFolders } from '../services/cloud-runner-folders';
import { CloudRunnerStepState } from '../cloud-runner-step-state';
2022-02-01 02:31:20 +00:00
import { CustomWorkflow } from './custom-workflow';
import { WorkflowInterface } from './workflow-interface';
import * as core from '@actions/core';
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
import path from 'path';
import CloudRunner from '../cloud-runner';
2022-02-01 02:31:20 +00:00
export class BuildAutomationWorkflow implements WorkflowInterface {
async run(cloudRunnerStepState: CloudRunnerStepState) {
try {
return await BuildAutomationWorkflow.standardBuildAutomation(cloudRunnerStepState.image);
} catch (error) {
throw error;
}
}
private static async standardBuildAutomation(baseImage: any) {
try {
CloudRunnerLogger.log(`Cloud Runner is running standard build automation`);
if (!CloudRunner.buildParameters.cliMode) core.startGroup('pre build steps');
2022-02-01 02:31:20 +00:00
let output = '';
if (CloudRunner.buildParameters.preBuildSteps !== '') {
output += await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.preBuildSteps);
2022-02-01 02:31:20 +00:00
}
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
2022-02-01 02:31:20 +00:00
CloudRunnerLogger.logWithTime('Configurable pre build step(s) time');
if (!CloudRunner.buildParameters.cliMode) core.startGroup('build');
CloudRunnerLogger.log(baseImage.toString());
CloudRunnerLogger.logLine(` `);
CloudRunnerLogger.logLine('Starting build automation job');
output += await CloudRunner.CloudRunnerProviderPlatform.runTask(
CloudRunner.buildParameters.buildGuid,
baseImage.toString(),
BuildAutomationWorkflow.FullWorkflow,
`/${CloudRunnerFolders.buildVolumeFolder}`,
`/${CloudRunnerFolders.buildVolumeFolder}/`,
2022-04-04 19:21:37 +00:00
CloudRunner.cloudRunnerEnvironmentVariables,
CloudRunner.defaultSecrets,
2022-02-01 02:31:20 +00:00
);
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
2022-02-01 02:31:20 +00:00
CloudRunnerLogger.logWithTime('Build time');
if (!CloudRunner.buildParameters.cliMode) core.startGroup('post build steps');
if (CloudRunner.buildParameters.postBuildSteps !== '') {
output += await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.postBuildSteps);
2022-02-01 02:31:20 +00:00
}
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
2022-02-01 02:31:20 +00:00
CloudRunnerLogger.logWithTime('Configurable post build step(s) time');
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
return output;
} catch (error) {
throw error;
}
}
private static get FullWorkflow() {
const setupHooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunner.buildParameters.customJobHooks).filter(
(x) => x.step.includes(`setup`),
);
const buildHooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunner.buildParameters.customJobHooks).filter(
(x) => x.step.includes(`build`),
);
2022-04-04 22:27:19 +00:00
const builderPath = path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`);
2022-04-04 19:54:48 +00:00
return `apt-get update > /dev/null
apt-get install -y zip tree npm git-lfs jq unzip git > /dev/null
2022-04-04 19:59:13 +00:00
npm install -g n > /dev/null
n stable > /dev/null
${setupHooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
2022-04-03 20:39:20 +00:00
export GITHUB_WORKSPACE="${CloudRunnerFolders.repoPathFull.replace(/\\/g, `/`)}"
2022-04-04 22:27:19 +00:00
${BuildAutomationWorkflow.SetupCommands(builderPath)}
${setupHooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
${buildHooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
2022-04-04 22:27:19 +00:00
${BuildAutomationWorkflow.BuildCommands(builderPath)}
2022-04-04 19:59:13 +00:00
${buildHooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}`;
}
2022-04-04 22:27:19 +00:00
private static SetupCommands(builderPath) {
return `export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
2022-04-04 21:44:44 +00:00
echo "cloning game ci"
mkdir -p ${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
git clone -q -b ${CloudRunner.buildParameters.cloudRunnerBranch} ${
CloudRunnerFolders.unityBuilderRepoUrl
} "${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}"
2022-04-04 22:27:19 +00:00
chmod +x ${builderPath}
2022-04-04 21:44:44 +00:00
echo "cloud runner remote cli"
2022-04-03 02:22:25 +00:00
node --version
2022-04-04 22:27:19 +00:00
node ${builderPath} -m remote-cli`;
}
2022-04-04 22:27:19 +00:00
private static BuildCommands(builderPath) {
return `cp -r "${path
.join(CloudRunnerFolders.builderPathFull, 'dist', 'default-build-script')
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
cp -r "${path
.join(CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
.replace(/\\/g, `/`)}" "/entrypoint.sh"
cp -r "${path
.join(CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
.replace(/\\/g, `/`)}" "/steps"
chmod -R +x "/entrypoint.sh"
chmod -R +x "/steps"
echo "enter build scripts"
/entrypoint.sh
echo "post build scripts"
2022-04-04 22:27:19 +00:00
chmod +x ${builderPath}
node ${builderPath} -m cache-push --cachePushFrom "Library" --artifactName "lib-${
CloudRunner.buildParameters.buildGuid
2022-04-04 22:46:44 +00:00
}" --cachePushTo "${CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
2022-04-04 22:27:19 +00:00
node ${builderPath} -m cache-push --cachePushFrom "build" --artifactName "build-${
CloudRunner.buildParameters.buildGuid
2022-04-04 22:46:44 +00:00
}" --cachePushTo "${CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}""`;
}
2022-02-01 02:31:20 +00:00
}