2022-02-01 02:31:20 +00:00
|
|
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
2022-04-03 00:31:08 +00:00
|
|
|
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';
|
2022-04-03 00:31:08 +00:00
|
|
|
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`);
|
|
|
|
|
|
2022-04-03 00:31:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('pre build steps');
|
2022-02-01 02:31:20 +00:00
|
|
|
let output = '';
|
2022-04-03 00:31:08 +00:00
|
|
|
if (CloudRunner.buildParameters.preBuildSteps !== '') {
|
|
|
|
|
output += await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.preBuildSteps);
|
2022-02-01 02:31:20 +00:00
|
|
|
}
|
2022-04-03 00:31:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
2022-02-01 02:31:20 +00:00
|
|
|
CloudRunnerLogger.logWithTime('Configurable pre build step(s) time');
|
|
|
|
|
|
2022-04-03 00:31:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('build');
|
2022-04-02 23:12:35 +00:00
|
|
|
CloudRunnerLogger.log(baseImage.toString());
|
2022-04-03 00:31:08 +00:00
|
|
|
CloudRunnerLogger.logLine(` `);
|
|
|
|
|
CloudRunnerLogger.logLine('Starting build automation job');
|
|
|
|
|
|
|
|
|
|
output += await CloudRunner.CloudRunnerProviderPlatform.runTask(
|
|
|
|
|
CloudRunner.buildParameters.buildGuid,
|
|
|
|
|
baseImage.toString(),
|
|
|
|
|
BuildAutomationWorkflow.FullWorkflow,
|
|
|
|
|
`/${CloudRunnerFolders.buildVolumeFolder}`,
|
2022-04-03 19:32:04 +00:00
|
|
|
`/${CloudRunnerFolders.buildVolumeFolder}/`,
|
2022-04-04 19:21:37 +00:00
|
|
|
CloudRunner.cloudRunnerEnvironmentVariables,
|
2022-04-03 00:31:08 +00:00
|
|
|
CloudRunner.defaultSecrets,
|
2022-02-01 02:31:20 +00:00
|
|
|
);
|
2022-04-03 00:31:08 +00:00
|
|
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
2022-02-01 02:31:20 +00:00
|
|
|
CloudRunnerLogger.logWithTime('Build time');
|
|
|
|
|
|
2022-04-03 00:31:08 +00:00
|
|
|
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
|
|
|
}
|
2022-04-03 00:31:08 +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;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-04-03 00:31:08 +00:00
|
|
|
|
|
|
|
|
private static get FullWorkflow() {
|
2022-04-03 19:32:04 +00:00
|
|
|
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-03 00:31:08 +00:00
|
|
|
);
|
2022-04-03 20:54:42 +00:00
|
|
|
return `apt-get update -q
|
2022-04-03 21:23:36 +00:00
|
|
|
apt-get install -q -y zip tree npm git-lfs jq unzip git
|
2022-04-03 19:20:06 +00:00
|
|
|
npm install -g n
|
|
|
|
|
n stable
|
2022-04-03 19:32:04 +00:00
|
|
|
${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-03 00:31:08 +00:00
|
|
|
${BuildAutomationWorkflow.SetupCommands}
|
2022-04-03 19:32:04 +00:00
|
|
|
${setupHooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
|
|
|
|
${buildHooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
|
|
|
|
${buildHooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
2022-04-03 00:31:08 +00:00
|
|
|
${BuildAutomationWorkflow.BuildCommands}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static get SetupCommands() {
|
|
|
|
|
return `export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
|
|
|
|
|
echo "cloning"
|
|
|
|
|
mkdir -p ${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
|
|
|
|
|
git clone -q -b ${CloudRunner.buildParameters.cloudRunnerBranch} ${
|
|
|
|
|
CloudRunnerFolders.unityBuilderRepoUrl
|
|
|
|
|
} "${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}"
|
|
|
|
|
${
|
|
|
|
|
CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'
|
|
|
|
|
} tree ${CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
|
|
|
|
|
chmod +x ${path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
|
|
|
|
echo "caching"
|
2022-04-03 02:22:25 +00:00
|
|
|
node --version
|
2022-04-03 00:31:08 +00:00
|
|
|
node ${path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static get BuildCommands() {
|
|
|
|
|
return `cp -r "${path
|
|
|
|
|
.join(CloudRunnerFolders.builderPathFull, 'dist', 'default-build-script')
|
|
|
|
|
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
|
2022-04-03 19:20:06 +00:00
|
|
|
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"
|
|
|
|
|
cd "${CloudRunnerFolders.libraryFolderFull.replace(/\\/g, `/`)}/.."
|
2022-04-03 20:39:20 +00:00
|
|
|
zip -q -r "lib-${CloudRunner.buildParameters.buildGuid}.zip" "Library"
|
2022-04-03 19:20:06 +00:00
|
|
|
mv "lib-${CloudRunner.buildParameters.buildGuid}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(
|
2022-04-03 00:31:08 +00:00
|
|
|
/\\/g,
|
|
|
|
|
`/`,
|
|
|
|
|
)}/Library"
|
2022-04-03 19:20:06 +00:00
|
|
|
cd "${CloudRunnerFolders.repoPathFull.replace(/\\/g, `/`)}"
|
|
|
|
|
zip -r "build-${CloudRunner.buildParameters.buildGuid}.zip" "build"
|
|
|
|
|
mv "build-${CloudRunner.buildParameters.buildGuid}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}"
|
2022-04-03 00:31:08 +00:00
|
|
|
chmod +x ${path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
2022-04-04 19:24:50 +00:00
|
|
|
node "${path
|
2022-04-03 00:31:08 +00:00
|
|
|
.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`)
|
2022-04-04 19:24:50 +00:00
|
|
|
.replace(/\\/g, `/`)}" -m cache-push "Library" "lib-${
|
2022-04-03 00:31:08 +00:00
|
|
|
CloudRunner.buildParameters.buildGuid
|
|
|
|
|
}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
|
|
|
|
|
${CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${
|
|
|
|
|
CloudRunnerFolders.cacheFolderFull
|
|
|
|
|
}"`;
|
|
|
|
|
}
|
2022-02-01 02:31:20 +00:00
|
|
|
}
|