Refactor and cleanup - no async input, combined setup/build, removed github logs for cli runs
parent
0675a2756c
commit
f24b458d21
|
|
@ -511,7 +511,6 @@ const action_yaml_1 = __nccwpck_require__(11091);
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const cli_decorator_1 = __nccwpck_require__(8731);
|
const cli_decorator_1 = __nccwpck_require__(8731);
|
||||||
const remote_client_logger_1 = __nccwpck_require__(28082);
|
const remote_client_logger_1 = __nccwpck_require__(28082);
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
|
||||||
const setup_cloud_runner_repository_1 = __nccwpck_require__(39656);
|
const setup_cloud_runner_repository_1 = __nccwpck_require__(39656);
|
||||||
const SDK = __importStar(__nccwpck_require__(71786));
|
const SDK = __importStar(__nccwpck_require__(71786));
|
||||||
class CLI {
|
class CLI {
|
||||||
|
|
@ -571,7 +570,7 @@ class CLI {
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`Build Params:
|
remote_client_logger_1.RemoteClientLogger.log(`Build Params:
|
||||||
${JSON.stringify(buildParameter, undefined, 4)}
|
${JSON.stringify(buildParameter, undefined, 4)}
|
||||||
`);
|
`);
|
||||||
cloud_runner_state_1.CloudRunnerState.setup(buildParameter);
|
__1.CloudRunner.buildParameters = buildParameter;
|
||||||
yield setup_cloud_runner_repository_1.SetupCloudRunnerRepository.run();
|
yield setup_cloud_runner_repository_1.SetupCloudRunnerRepository.run();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -632,8 +631,9 @@ exports.Caching = void 0;
|
||||||
const console_1 = __nccwpck_require__(96206);
|
const console_1 = __nccwpck_require__(96206);
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
||||||
const path_1 = __importDefault(__nccwpck_require__(71017));
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
||||||
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_folders_1 = __nccwpck_require__(13527);
|
||||||
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
||||||
const lfs_hashing_1 = __nccwpck_require__(31938);
|
const lfs_hashing_1 = __nccwpck_require__(31938);
|
||||||
const remote_client_logger_1 = __nccwpck_require__(28082);
|
const remote_client_logger_1 = __nccwpck_require__(28082);
|
||||||
|
|
@ -647,10 +647,10 @@ class Caching {
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cacheFolder}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cacheFolder}`);
|
||||||
}
|
}
|
||||||
process.chdir(path_1.default.resolve(sourceFolder, '..'));
|
process.chdir(path_1.default.resolve(sourceFolder, '..'));
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
cloud_runner_logger_1.default.log(`Hashed cache folder ${yield lfs_hashing_1.LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path_1.default.basename(sourceFolder)}`);
|
cloud_runner_logger_1.default.log(`Hashed cache folder ${yield lfs_hashing_1.LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path_1.default.basename(sourceFolder)}`);
|
||||||
}
|
}
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${path_1.default.basename(sourceFolder)}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${path_1.default.basename(sourceFolder)}`);
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line func-style
|
// eslint-disable-next-line func-style
|
||||||
|
|
@ -663,13 +663,13 @@ class Caching {
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path_1.default.basename(sourceFolder)}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path_1.default.basename(sourceFolder)}`);
|
||||||
console_1.assert(fs_1.default.existsSync(`${cacheKey}.zip`), 'cache zip exists');
|
console_1.assert(fs_1.default.existsSync(`${cacheKey}.zip`), 'cache zip exists');
|
||||||
console_1.assert(fs_1.default.existsSync(path_1.default.basename(sourceFolder)), 'source folder exists');
|
console_1.assert(fs_1.default.existsSync(path_1.default.basename(sourceFolder)), 'source folder exists');
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cachePushOverrideCommand) {
|
if (cloud_runner_1.default.buildParameters.cachePushOverrideCommand) {
|
||||||
cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_state_1.CloudRunnerState.buildParams.cachePushOverrideCommand));
|
cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_1.default.buildParameters.cachePushOverrideCommand));
|
||||||
}
|
}
|
||||||
cloud_runner_system_1.CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`);
|
cloud_runner_system_1.CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`);
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`);
|
remote_client_logger_1.RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`);
|
||||||
console_1.assert(fs_1.default.existsSync(`${path_1.default.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder');
|
console_1.assert(fs_1.default.existsSync(`${path_1.default.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder');
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${cacheFolder}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls ${cacheFolder}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -705,11 +705,11 @@ class Caching {
|
||||||
return typeof arguments_[number] != 'undefined' ? arguments_[number] : match;
|
return typeof arguments_[number] != 'undefined' ? arguments_[number] : match;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cachePullOverrideCommand) {
|
if (cloud_runner_1.default.buildParameters.cachePullOverrideCommand) {
|
||||||
cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_state_1.CloudRunnerState.buildParams.cachePullOverrideCommand));
|
cloud_runner_system_1.CloudRunnerSystem.Run(formatFunction(cloud_runner_1.default.buildParameters.cachePullOverrideCommand));
|
||||||
}
|
}
|
||||||
if (fs_1.default.existsSync(`${cacheSelection}.zip`)) {
|
if (fs_1.default.existsSync(`${cacheSelection}.zip`)) {
|
||||||
const resultsFolder = `results${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}`;
|
const resultsFolder = `results${cloud_runner_1.default.buildParameters.buildGuid}`;
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`);
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`);
|
remote_client_logger_1.RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`);
|
||||||
console_1.assert(`${fs_1.default.existsSync(destinationFolder)}`);
|
console_1.assert(`${fs_1.default.existsSync(destinationFolder)}`);
|
||||||
|
|
@ -741,8 +741,8 @@ class Caching {
|
||||||
}
|
}
|
||||||
static handleCachePurging() {
|
static handleCachePurging() {
|
||||||
if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) {
|
if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) {
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`purging ${cloud_runner_state_1.CloudRunnerState.purgeRemoteCaching}`);
|
remote_client_logger_1.RemoteClientLogger.log(`purging ${cloud_runner_folders_1.CloudRunnerFolders.purgeRemoteCaching}`);
|
||||||
fs_1.default.rmdirSync(cloud_runner_state_1.CloudRunnerState.cacheFolder, { recursive: true });
|
fs_1.default.rmdirSync(cloud_runner_folders_1.CloudRunnerFolders.cacheFolder, { recursive: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -838,7 +838,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.LFSHashing = void 0;
|
exports.LFSHashing = void 0;
|
||||||
const path_1 = __importDefault(__nccwpck_require__(71017));
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_folders_1 = __nccwpck_require__(13527);
|
||||||
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
||||||
const console_1 = __nccwpck_require__(96206);
|
const console_1 = __nccwpck_require__(96206);
|
||||||
|
|
@ -852,10 +852,10 @@ class LFSHashing {
|
||||||
console_1.assert(fs_1.default.existsSync(`.lfs-assets-guid`));
|
console_1.assert(fs_1.default.existsSync(`.lfs-assets-guid`));
|
||||||
const lfsHashes = {
|
const lfsHashes = {
|
||||||
lfsGuid: fs_1.default
|
lfsGuid: fs_1.default
|
||||||
.readFileSync(`${path_1.default.join(cloud_runner_state_1.CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8')
|
.readFileSync(`${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull, `.lfs-assets-guid`)}`, 'utf8')
|
||||||
.replace(/\n/g, ``),
|
.replace(/\n/g, ``),
|
||||||
lfsGuidSum: fs_1.default
|
lfsGuidSum: fs_1.default
|
||||||
.readFileSync(`${path_1.default.join(cloud_runner_state_1.CloudRunnerState.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8')
|
.readFileSync(`${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8')
|
||||||
.replace(' .lfs-assets-guid', '')
|
.replace(' .lfs-assets-guid', '')
|
||||||
.replace(/\n/g, ``),
|
.replace(/\n/g, ``),
|
||||||
};
|
};
|
||||||
|
|
@ -933,7 +933,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.SetupCloudRunnerRepository = void 0;
|
exports.SetupCloudRunnerRepository = void 0;
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
const fs_1 = __importDefault(__nccwpck_require__(57147));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
|
const cloud_runner_folders_1 = __nccwpck_require__(13527);
|
||||||
const caching_1 = __nccwpck_require__(38759);
|
const caching_1 = __nccwpck_require__(38759);
|
||||||
const lfs_hashing_1 = __nccwpck_require__(31938);
|
const lfs_hashing_1 = __nccwpck_require__(31938);
|
||||||
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
const cloud_runner_system_1 = __nccwpck_require__(66879);
|
||||||
|
|
@ -944,19 +945,19 @@ class SetupCloudRunnerRepository {
|
||||||
static run() {
|
static run() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_state_1.CloudRunnerState.buildPathFull}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.buildPathFull}`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_state_1.CloudRunnerState.repoPathFull}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull}`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_state_1.CloudRunnerState.cacheFolderFull}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull}`);
|
||||||
process.chdir(cloud_runner_state_1.CloudRunnerState.repoPathFull);
|
process.chdir(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull);
|
||||||
yield SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles();
|
yield SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles();
|
||||||
const lfsHashes = yield lfs_hashing_1.LFSHashing.createLFSHashFiles();
|
const lfsHashes = yield lfs_hashing_1.LFSHashing.createLFSHashFiles();
|
||||||
if (fs_1.default.existsSync(cloud_runner_state_1.CloudRunnerState.libraryFolderFull)) {
|
if (fs_1.default.existsSync(cloud_runner_folders_1.CloudRunnerFolders.libraryFolderFull)) {
|
||||||
remote_client_logger_1.RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`);
|
remote_client_logger_1.RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`);
|
||||||
}
|
}
|
||||||
yield caching_1.Caching.PullFromCache(cloud_runner_state_1.CloudRunnerState.lfsCacheFolderFull, cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`);
|
yield caching_1.Caching.PullFromCache(cloud_runner_folders_1.CloudRunnerFolders.lfsCacheFolderFull, cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`);
|
||||||
yield SetupCloudRunnerRepository.pullLatestLFS();
|
yield SetupCloudRunnerRepository.pullLatestLFS();
|
||||||
yield caching_1.Caching.PushToCache(cloud_runner_state_1.CloudRunnerState.lfsCacheFolderFull, cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`);
|
yield caching_1.Caching.PushToCache(cloud_runner_folders_1.CloudRunnerFolders.lfsCacheFolderFull, cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull, `${lfsHashes.lfsGuidSum}`);
|
||||||
yield caching_1.Caching.PullFromCache(cloud_runner_state_1.CloudRunnerState.libraryCacheFolderFull, cloud_runner_state_1.CloudRunnerState.libraryFolderFull);
|
yield caching_1.Caching.PullFromCache(cloud_runner_folders_1.CloudRunnerFolders.libraryCacheFolderFull, cloud_runner_folders_1.CloudRunnerFolders.libraryFolderFull);
|
||||||
caching_1.Caching.handleCachePurging();
|
caching_1.Caching.handleCachePurging();
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
|
|
@ -967,17 +968,17 @@ class SetupCloudRunnerRepository {
|
||||||
static cloneRepoWithoutLFSFiles() {
|
static cloneRepoWithoutLFSFiles() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
process.chdir(`${cloud_runner_state_1.CloudRunnerState.repoPathFull}`);
|
process.chdir(`${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull}`);
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);
|
remote_client_logger_1.RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global advice.detachedHead false`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global advice.detachedHead false`);
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`Cloning the repository being built:`);
|
remote_client_logger_1.RemoteClientLogger.log(`Cloning the repository being built:`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge --skip -- %f"`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge --skip -- %f"`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs install`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs install`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git clone ${cloud_runner_state_1.CloudRunnerState.targetBuildRepoUrl} ${path_1.default.resolve(`..`, path_1.default.basename(cloud_runner_state_1.CloudRunnerState.repoPathFull))}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git clone ${cloud_runner_folders_1.CloudRunnerFolders.targetBuildRepoUrl} ${path_1.default.resolve(`..`, path_1.default.basename(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull))}`);
|
||||||
console_1.assert(fs_1.default.existsSync(`.git`));
|
console_1.assert(fs_1.default.existsSync(`.git`));
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`${cloud_runner_state_1.CloudRunnerState.buildParams.branch}`);
|
remote_client_logger_1.RemoteClientLogger.log(`${cloud_runner_1.default.buildParameters.branch}`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git checkout ${cloud_runner_state_1.CloudRunnerState.buildParams.branch}`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git checkout ${cloud_runner_1.default.buildParameters.branch}`);
|
||||||
console_1.assert(fs_1.default.existsSync(path_1.default.join(`.git`, `lfs`)), 'LFS folder should not exist before caching');
|
console_1.assert(fs_1.default.existsSync(path_1.default.join(`.git`, `lfs`)), 'LFS folder should not exist before caching');
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`);
|
remote_client_logger_1.RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`);
|
||||||
}
|
}
|
||||||
|
|
@ -988,17 +989,17 @@ class SetupCloudRunnerRepository {
|
||||||
}
|
}
|
||||||
static pullLatestLFS() {
|
static pullLatestLFS() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull}/..`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull}/..`);
|
||||||
}
|
}
|
||||||
process.chdir(cloud_runner_state_1.CloudRunnerState.repoPathFull);
|
process.chdir(cloud_runner_folders_1.CloudRunnerFolders.repoPathFull);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs pull`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`git lfs pull`);
|
||||||
remote_client_logger_1.RemoteClientLogger.log(`pulled latest LFS files`);
|
remote_client_logger_1.RemoteClientLogger.log(`pulled latest LFS files`);
|
||||||
console_1.assert(fs_1.default.existsSync(cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull));
|
console_1.assert(fs_1.default.existsSync(cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull));
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_state_1.CloudRunnerState.lfsDirectoryFull}/..`);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`ls -lh ${cloud_runner_folders_1.CloudRunnerFolders.lfsDirectoryFull}/..`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -1193,13 +1194,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.AWSError = void 0;
|
exports.AWSError = void 0;
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
class AWSError {
|
class AWSError {
|
||||||
static handleStackCreationFailure(error, CF, taskDefStackName) {
|
static handleStackCreationFailure(error, CF, taskDefStackName) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
cloud_runner_logger_1.default.log('aws error: ');
|
cloud_runner_logger_1.default.log('aws error: ');
|
||||||
core.error(JSON.stringify(error, undefined, 4));
|
core.error(JSON.stringify(error, undefined, 4));
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
cloud_runner_logger_1.default.log('Getting events and resources for task stack');
|
cloud_runner_logger_1.default.log('Getting events and resources for task stack');
|
||||||
const events = (yield CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents;
|
const events = (yield CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents;
|
||||||
cloud_runner_logger_1.default.log(JSON.stringify(events, undefined, 4));
|
cloud_runner_logger_1.default.log(JSON.stringify(events, undefined, 4));
|
||||||
|
|
@ -1378,7 +1379,7 @@ const core = __importStar(__nccwpck_require__(42186));
|
||||||
const zlib = __importStar(__nccwpck_require__(59796));
|
const zlib = __importStar(__nccwpck_require__(59796));
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const __1 = __nccwpck_require__(41359);
|
const __1 = __nccwpck_require__(41359);
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
const cloud_runner_statics_1 = __nccwpck_require__(90828);
|
const cloud_runner_statics_1 = __nccwpck_require__(90828);
|
||||||
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
||||||
class AWSTaskRunner {
|
class AWSTaskRunner {
|
||||||
|
|
@ -1400,7 +1401,7 @@ class AWSTaskRunner {
|
||||||
{
|
{
|
||||||
name: taskDef.taskDefStackName,
|
name: taskDef.taskDefStackName,
|
||||||
environment,
|
environment,
|
||||||
command: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(commands, cloud_runner_state_1.CloudRunnerState.buildParams)],
|
command: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(commands, cloud_runner_1.default.buildParameters)],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
@ -1519,7 +1520,7 @@ class AWSTaskRunner {
|
||||||
if (json.messageType === 'DATA_MESSAGE') {
|
if (json.messageType === 'DATA_MESSAGE') {
|
||||||
for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) {
|
for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) {
|
||||||
let message = json.logEvents[logEventsIndex].message;
|
let message = json.logEvents[logEventsIndex].message;
|
||||||
if (json.logEvents[logEventsIndex].message.includes(`---${cloud_runner_state_1.CloudRunnerState.buildParams.logId}`)) {
|
if (json.logEvents[logEventsIndex].message.includes(`---${cloud_runner_1.default.buildParameters.logId}`)) {
|
||||||
cloud_runner_logger_1.default.log('End of log transmission received');
|
cloud_runner_logger_1.default.log('End of log transmission received');
|
||||||
shouldReadLogs = false;
|
shouldReadLogs = false;
|
||||||
}
|
}
|
||||||
|
|
@ -1527,7 +1528,7 @@ class AWSTaskRunner {
|
||||||
core.warning('LIBRARY NOT FOUND!');
|
core.warning('LIBRARY NOT FOUND!');
|
||||||
}
|
}
|
||||||
message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`;
|
message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`;
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
output += message;
|
output += message;
|
||||||
}
|
}
|
||||||
cloud_runner_logger_1.default.log(message);
|
cloud_runner_logger_1.default.log(message);
|
||||||
|
|
@ -1756,6 +1757,25 @@ exports.CloudRunnerStatics = CloudRunnerStatics;
|
||||||
CloudRunnerStatics.logPrefix = `Cloud-Runner-System`;
|
CloudRunnerStatics.logPrefix = `Cloud-Runner-System`;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 50121:
|
||||||
|
/***/ ((__unused_webpack_module, exports) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
|
exports.CloudRunnerStepState = void 0;
|
||||||
|
class CloudRunnerStepState {
|
||||||
|
constructor(image, environmentVariables, secrets) {
|
||||||
|
this.image = image;
|
||||||
|
this.environment = environmentVariables;
|
||||||
|
this.secrets = secrets;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.CloudRunnerStepState = CloudRunnerStepState;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 79144:
|
/***/ 79144:
|
||||||
|
|
@ -1796,10 +1816,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
const aws_1 = __importDefault(__nccwpck_require__(37569));
|
const aws_1 = __importDefault(__nccwpck_require__(37569));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
|
||||||
const k8s_1 = __importDefault(__nccwpck_require__(25107));
|
const k8s_1 = __importDefault(__nccwpck_require__(25107));
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const cloud_runner_step_state_1 = __nccwpck_require__(64854);
|
const cloud_runner_step_state_1 = __nccwpck_require__(50121);
|
||||||
const workflow_composition_root_1 = __nccwpck_require__(54204);
|
const workflow_composition_root_1 = __nccwpck_require__(54204);
|
||||||
const cloud_runner_error_1 = __nccwpck_require__(91477);
|
const cloud_runner_error_1 = __nccwpck_require__(91477);
|
||||||
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
||||||
|
|
@ -1807,7 +1826,7 @@ const core = __importStar(__nccwpck_require__(42186));
|
||||||
class CloudRunner {
|
class CloudRunner {
|
||||||
static setup(buildParameters) {
|
static setup(buildParameters) {
|
||||||
cloud_runner_logger_1.default.setup();
|
cloud_runner_logger_1.default.setup();
|
||||||
cloud_runner_state_1.CloudRunnerState.setup(buildParameters);
|
CloudRunner.buildParameters = buildParameters;
|
||||||
CloudRunner.setupBuildPlatform();
|
CloudRunner.setupBuildPlatform();
|
||||||
const parameters = task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables();
|
const parameters = task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables();
|
||||||
if (!buildParameters.cliMode) {
|
if (!buildParameters.cliMode) {
|
||||||
|
|
@ -1817,15 +1836,15 @@ class CloudRunner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static setupBuildPlatform() {
|
static setupBuildPlatform() {
|
||||||
switch (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCluster) {
|
switch (CloudRunner.buildParameters.cloudRunnerCluster) {
|
||||||
case 'k8s':
|
case 'k8s':
|
||||||
cloud_runner_logger_1.default.log('Cloud Runner platform selected Kubernetes');
|
cloud_runner_logger_1.default.log('Cloud Runner platform selected Kubernetes');
|
||||||
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new k8s_1.default(cloud_runner_state_1.CloudRunnerState.buildParams);
|
CloudRunner.CloudRunnerProviderPlatform = new k8s_1.default(CloudRunner.buildParameters);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case 'aws':
|
case 'aws':
|
||||||
cloud_runner_logger_1.default.log('Cloud Runner platform selected AWS');
|
cloud_runner_logger_1.default.log('Cloud Runner platform selected AWS');
|
||||||
cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform = new aws_1.default(cloud_runner_state_1.CloudRunnerState.buildParams);
|
CloudRunner.CloudRunnerProviderPlatform = new aws_1.default(CloudRunner.buildParameters);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1833,22 +1852,22 @@ class CloudRunner {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
CloudRunner.setup(buildParameters);
|
CloudRunner.setup(buildParameters);
|
||||||
try {
|
try {
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!CloudRunner.buildParameters.cliMode)
|
||||||
core.startGroup('Setup remote runner');
|
core.startGroup('Setup remote runner');
|
||||||
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.setupSharedResources(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets);
|
yield CloudRunner.CloudRunnerProviderPlatform.setupSharedResources(CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters, CloudRunner.buildParameters.branch, CloudRunner.defaultSecrets);
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!CloudRunner.buildParameters.cliMode)
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
const output = yield new workflow_composition_root_1.WorkflowCompositionRoot().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
|
const output = yield new workflow_composition_root_1.WorkflowCompositionRoot().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), CloudRunner.defaultSecrets));
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!CloudRunner.buildParameters.cliMode)
|
||||||
core.startGroup('Cleanup');
|
core.startGroup('Cleanup');
|
||||||
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets);
|
yield CloudRunner.CloudRunnerProviderPlatform.cleanupSharedResources(CloudRunner.buildParameters.buildGuid, CloudRunner.buildParameters, CloudRunner.buildParameters.branch, CloudRunner.defaultSecrets);
|
||||||
cloud_runner_logger_1.default.log(`Cleanup complete`);
|
cloud_runner_logger_1.default.log(`Cleanup complete`);
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!CloudRunner.buildParameters.cliMode)
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!CloudRunner.buildParameters.cliMode)
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
yield cloud_runner_error_1.CloudRunnerError.handleException(error);
|
yield cloud_runner_error_1.CloudRunnerError.handleException(error);
|
||||||
throw error;
|
throw error;
|
||||||
|
|
@ -1900,14 +1919,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.CloudRunnerError = void 0;
|
exports.CloudRunnerError = void 0;
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
class CloudRunnerError {
|
class CloudRunnerError {
|
||||||
static handleException(error) {
|
static handleException(error) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
cloud_runner_logger_1.default.error(JSON.stringify(error, undefined, 4));
|
cloud_runner_logger_1.default.error(JSON.stringify(error, undefined, 4));
|
||||||
core.setFailed('Cloud Runner failed');
|
core.setFailed('Cloud Runner failed');
|
||||||
yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, cloud_runner_state_1.CloudRunnerState.buildParams, cloud_runner_state_1.CloudRunnerState.branchName, cloud_runner_state_1.CloudRunnerState.defaultSecrets);
|
yield cloud_runner_1.default.CloudRunnerProviderPlatform.cleanupSharedResources(cloud_runner_1.default.buildParameters.buildGuid, cloud_runner_1.default.buildParameters, cloud_runner_1.default.buildParameters.branch, cloud_runner_1.default.defaultSecrets);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2116,14 +2135,17 @@ exports["default"] = Kubernetes;
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 1739:
|
/***/ 1739:
|
||||||
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
const client_node_1 = __nccwpck_require__(89679);
|
const client_node_1 = __nccwpck_require__(89679);
|
||||||
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
class KubernetesJobSpecFactory {
|
class KubernetesJobSpecFactory {
|
||||||
static getJobSpec(command, image, mountdir, workingDirectory, environment, secrets, buildGuid, buildParameters, secretName, pvcName, jobName, k8s) {
|
static getJobSpec(command, image, mountdir, workingDirectory, environment, secrets, buildGuid, buildParameters, secretName, pvcName, jobName, k8s) {
|
||||||
environment.push(...[
|
environment.push(...[
|
||||||
|
|
@ -2207,7 +2229,7 @@ class KubernetesJobSpecFactory {
|
||||||
name: 'main',
|
name: 'main',
|
||||||
image,
|
image,
|
||||||
command: ['/bin/sh'],
|
command: ['/bin/sh'],
|
||||||
args: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(command, cloud_runner_state_1.CloudRunnerState.buildParams)],
|
args: ['-c', cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.ProcessCommands(command, cloud_runner_1.default.buildParameters)],
|
||||||
workingDir: `${workingDirectory}`,
|
workingDir: `${workingDirectory}`,
|
||||||
resources: {
|
resources: {
|
||||||
requests: {
|
requests: {
|
||||||
|
|
@ -2658,7 +2680,7 @@ const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
const cloud_runner_statics_1 = __nccwpck_require__(90828);
|
const cloud_runner_statics_1 = __nccwpck_require__(90828);
|
||||||
const async_wait_until_1 = __importDefault(__nccwpck_require__(41299));
|
const async_wait_until_1 = __importDefault(__nccwpck_require__(41299));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
class KubernetesTaskRunner {
|
class KubernetesTaskRunner {
|
||||||
static runTask(kubeConfig, kubeClient, jobName, podName, containerName, namespace, logCallback) {
|
static runTask(kubeConfig, kubeClient, jobName, podName, containerName, namespace, logCallback) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
|
@ -2670,7 +2692,7 @@ class KubernetesTaskRunner {
|
||||||
didStreamAnyLogs = true;
|
didStreamAnyLogs = true;
|
||||||
let message = chunk.toString().trimRight(`\n`);
|
let message = chunk.toString().trimRight(`\n`);
|
||||||
message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`;
|
message = `[${cloud_runner_statics_1.CloudRunnerStatics.logPrefix}] ${message}`;
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
output += message;
|
output += message;
|
||||||
}
|
}
|
||||||
logCallback(message);
|
logCallback(message);
|
||||||
|
|
@ -2752,13 +2774,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.Hook = exports.CloudRunnerBuildCommandProcessor = void 0;
|
exports.Hook = exports.CloudRunnerBuildCommandProcessor = void 0;
|
||||||
const yaml_1 = __importDefault(__nccwpck_require__(44603));
|
const yaml_1 = __importDefault(__nccwpck_require__(44603));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
class CloudRunnerBuildCommandProcessor {
|
class CloudRunnerBuildCommandProcessor {
|
||||||
static ProcessCommands(commands, buildParameters) {
|
static ProcessCommands(commands, buildParameters) {
|
||||||
const hooks = CloudRunnerBuildCommandProcessor.getHooks(buildParameters.customJobHooks).filter((x) => x.step.includes(`all`));
|
const hooks = CloudRunnerBuildCommandProcessor.getHooks(buildParameters.customJobHooks).filter((x) => x.step.includes(`all`));
|
||||||
return `echo "---"
|
return `echo "---"
|
||||||
echo "start cloud runner init"
|
echo "start cloud runner init"
|
||||||
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} printenv
|
${cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} printenv
|
||||||
echo "start of cloud runner job"
|
echo "start of cloud runner job"
|
||||||
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
||||||
${commands}
|
${commands}
|
||||||
|
|
@ -2804,6 +2826,72 @@ CloudRunnerConstants.alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
|
||||||
exports["default"] = CloudRunnerConstants;
|
exports["default"] = CloudRunnerConstants;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 13527:
|
||||||
|
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
|
exports.CloudRunnerFolders = void 0;
|
||||||
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
||||||
|
const __1 = __nccwpck_require__(41359);
|
||||||
|
class CloudRunnerFolders {
|
||||||
|
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
|
||||||
|
static get buildPathFull() {
|
||||||
|
return path_1.default.join(`/`, CloudRunnerFolders.buildVolumeFolder, __1.CloudRunner.buildParameters.buildGuid);
|
||||||
|
}
|
||||||
|
static get cacheFolderFull() {
|
||||||
|
return path_1.default.join('/', CloudRunnerFolders.buildVolumeFolder, CloudRunnerFolders.cacheFolder, CloudRunnerFolders.cacheKey);
|
||||||
|
}
|
||||||
|
static get cacheKey() {
|
||||||
|
return __1.CloudRunner.buildParameters.cacheKey || __1.CloudRunner.buildParameters.branch;
|
||||||
|
}
|
||||||
|
static get builderPathFull() {
|
||||||
|
return path_1.default.join(CloudRunnerFolders.buildPathFull, `builder`);
|
||||||
|
}
|
||||||
|
static get repoPathFull() {
|
||||||
|
return path_1.default.join(CloudRunnerFolders.buildPathFull, CloudRunnerFolders.repositoryFolder);
|
||||||
|
}
|
||||||
|
static get projectPathFull() {
|
||||||
|
return path_1.default.join(CloudRunnerFolders.repoPathFull, __1.CloudRunner.buildParameters.projectPath);
|
||||||
|
}
|
||||||
|
static get libraryFolderFull() {
|
||||||
|
return path_1.default.join(CloudRunnerFolders.projectPathFull, `Library`);
|
||||||
|
}
|
||||||
|
static get lfsDirectoryFull() {
|
||||||
|
return path_1.default.join(CloudRunnerFolders.repoPathFull, `.git`, `lfs`);
|
||||||
|
}
|
||||||
|
static get purgeRemoteCaching() {
|
||||||
|
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
|
||||||
|
}
|
||||||
|
static get lfsCacheFolderFull() {
|
||||||
|
return path_1.default.join(CloudRunnerFolders.cacheFolderFull, `lfs`);
|
||||||
|
}
|
||||||
|
static get libraryCacheFolderFull() {
|
||||||
|
return path_1.default.join(CloudRunnerFolders.cacheFolderFull, `Library`);
|
||||||
|
}
|
||||||
|
static get unityBuilderRepoUrl() {
|
||||||
|
return `https://${__1.CloudRunner.buildParameters.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
|
||||||
|
}
|
||||||
|
static get targetBuildRepoUrl() {
|
||||||
|
return `https://${__1.CloudRunner.buildParameters.gitPrivateToken}@github.com/${__1.CloudRunner.buildParameters.githubRepo}.git`;
|
||||||
|
}
|
||||||
|
static get buildVolumeFolder() {
|
||||||
|
return 'data';
|
||||||
|
}
|
||||||
|
static get cacheFolder() {
|
||||||
|
return 'cache';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.CloudRunnerFolders = CloudRunnerFolders;
|
||||||
|
CloudRunnerFolders.repositoryFolder = 'repo';
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 22855:
|
/***/ 22855:
|
||||||
|
|
@ -2947,7 +3035,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.TaskParameterSerializer = void 0;
|
exports.TaskParameterSerializer = void 0;
|
||||||
const __1 = __nccwpck_require__(41359);
|
const __1 = __nccwpck_require__(41359);
|
||||||
const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145));
|
const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
|
||||||
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
||||||
class TaskParameterSerializer {
|
class TaskParameterSerializer {
|
||||||
static readBuildEnvironmentVariables() {
|
static readBuildEnvironmentVariables() {
|
||||||
|
|
@ -2955,15 +3042,15 @@ class TaskParameterSerializer {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
name: 'ContainerMemory',
|
name: 'ContainerMemory',
|
||||||
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerMemory,
|
value: __1.CloudRunner.buildParameters.cloudRunnerMemory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ContainerCpu',
|
name: 'ContainerCpu',
|
||||||
value: cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerCpu,
|
value: __1.CloudRunner.buildParameters.cloudRunnerCpu,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'BUILD_TARGET',
|
name: 'BUILD_TARGET',
|
||||||
value: cloud_runner_state_1.CloudRunnerState.buildParams.platform,
|
value: __1.CloudRunner.buildParameters.platform,
|
||||||
},
|
},
|
||||||
...TaskParameterSerializer.serializeBuildParamsAndInput,
|
...TaskParameterSerializer.serializeBuildParamsAndInput,
|
||||||
];
|
];
|
||||||
|
|
@ -2972,7 +3059,7 @@ class TaskParameterSerializer {
|
||||||
let array = new Array();
|
let array = new Array();
|
||||||
array = TaskParameterSerializer.readBuildParameters(array);
|
array = TaskParameterSerializer.readBuildParameters(array);
|
||||||
array = TaskParameterSerializer.readInput(array);
|
array = TaskParameterSerializer.readInput(array);
|
||||||
const configurableHooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_state_1.CloudRunnerState.buildParams.customJobHooks);
|
const configurableHooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(__1.CloudRunner.buildParameters.customJobHooks);
|
||||||
const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0);
|
const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0);
|
||||||
if (secrets.length > 0) {
|
if (secrets.length > 0) {
|
||||||
// eslint-disable-next-line unicorn/no-array-reduce
|
// eslint-disable-next-line unicorn/no-array-reduce
|
||||||
|
|
@ -2987,14 +3074,14 @@ class TaskParameterSerializer {
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
static readBuildParameters(array) {
|
static readBuildParameters(array) {
|
||||||
const keys = Object.keys(cloud_runner_state_1.CloudRunnerState.buildParams);
|
const keys = Object.keys(__1.CloudRunner.buildParameters);
|
||||||
for (const element of keys) {
|
for (const element of keys) {
|
||||||
array.push({
|
array.push({
|
||||||
name: element,
|
name: element,
|
||||||
value: cloud_runner_state_1.CloudRunnerState.buildParams[element],
|
value: __1.CloudRunner.buildParameters[element],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
array.push({ name: 'buildParameters', value: JSON.stringify(cloud_runner_state_1.CloudRunnerState.buildParams) });
|
array.push({ name: 'buildParameters', value: JSON.stringify(__1.CloudRunner.buildParameters) });
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
static readInput(array) {
|
static readInput(array) {
|
||||||
|
|
@ -3010,8 +3097,8 @@ class TaskParameterSerializer {
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
static setupDefaultSecrets() {
|
static setupDefaultSecrets() {
|
||||||
if (cloud_runner_state_1.CloudRunnerState.defaultSecrets === undefined)
|
if (__1.CloudRunner.defaultSecrets === undefined)
|
||||||
cloud_runner_state_1.CloudRunnerState.defaultSecrets = image_environment_factory_1.default.getEnvironmentVariables(cloud_runner_state_1.CloudRunnerState.buildParams).map((x) => {
|
__1.CloudRunner.defaultSecrets = image_environment_factory_1.default.getEnvironmentVariables(__1.CloudRunner.buildParameters).map((x) => {
|
||||||
return {
|
return {
|
||||||
ParameterKey: x.name,
|
ParameterKey: x.name,
|
||||||
EnvironmentVariable: x.name,
|
EnvironmentVariable: x.name,
|
||||||
|
|
@ -3023,237 +3110,6 @@ class TaskParameterSerializer {
|
||||||
exports.TaskParameterSerializer = TaskParameterSerializer;
|
exports.TaskParameterSerializer = TaskParameterSerializer;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 70912:
|
|
||||||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
||||||
exports.CloudRunnerState = void 0;
|
|
||||||
const path_1 = __importDefault(__nccwpck_require__(71017));
|
|
||||||
class CloudRunnerState {
|
|
||||||
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
|
|
||||||
static get buildPathFull() {
|
|
||||||
return path_1.default.join(`/`, CloudRunnerState.buildVolumeFolder, CloudRunnerState.buildParams.buildGuid);
|
|
||||||
}
|
|
||||||
static get cacheFolderFull() {
|
|
||||||
return path_1.default.join('/', CloudRunnerState.buildVolumeFolder, CloudRunnerState.cacheFolder, CloudRunnerState.cacheKey);
|
|
||||||
}
|
|
||||||
static setup(buildParameters) {
|
|
||||||
CloudRunnerState.buildParams = buildParameters;
|
|
||||||
}
|
|
||||||
static get branchName() {
|
|
||||||
return CloudRunnerState.buildParams.branch;
|
|
||||||
}
|
|
||||||
static get cacheKey() {
|
|
||||||
return CloudRunnerState.buildParams.cacheKey || CloudRunnerState.buildParams.branch;
|
|
||||||
}
|
|
||||||
static get builderPathFull() {
|
|
||||||
return path_1.default.join(CloudRunnerState.buildPathFull, `builder`);
|
|
||||||
}
|
|
||||||
static get repoPathFull() {
|
|
||||||
return path_1.default.join(CloudRunnerState.buildPathFull, CloudRunnerState.repositoryFolder);
|
|
||||||
}
|
|
||||||
static get projectPathFull() {
|
|
||||||
return path_1.default.join(CloudRunnerState.repoPathFull, CloudRunnerState.buildParams.projectPath);
|
|
||||||
}
|
|
||||||
static get libraryFolderFull() {
|
|
||||||
return path_1.default.join(CloudRunnerState.projectPathFull, `Library`);
|
|
||||||
}
|
|
||||||
static get lfsDirectoryFull() {
|
|
||||||
return path_1.default.join(CloudRunnerState.repoPathFull, `.git`, `lfs`);
|
|
||||||
}
|
|
||||||
static get purgeRemoteCaching() {
|
|
||||||
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
|
|
||||||
}
|
|
||||||
static get lfsCacheFolderFull() {
|
|
||||||
return path_1.default.join(CloudRunnerState.cacheFolderFull, `lfs`);
|
|
||||||
}
|
|
||||||
static get libraryCacheFolderFull() {
|
|
||||||
return path_1.default.join(CloudRunnerState.cacheFolderFull, `Library`);
|
|
||||||
}
|
|
||||||
static get unityBuilderRepoUrl() {
|
|
||||||
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
|
|
||||||
}
|
|
||||||
static get targetBuildRepoUrl() {
|
|
||||||
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`;
|
|
||||||
}
|
|
||||||
static get buildVolumeFolder() {
|
|
||||||
return 'data';
|
|
||||||
}
|
|
||||||
static get cacheFolder() {
|
|
||||||
return 'cache';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.CloudRunnerState = CloudRunnerState;
|
|
||||||
CloudRunnerState.repositoryFolder = 'repo';
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 64854:
|
|
||||||
/***/ ((__unused_webpack_module, exports) => {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
||||||
exports.CloudRunnerStepState = void 0;
|
|
||||||
class CloudRunnerStepState {
|
|
||||||
constructor(image, environmentVariables, secrets) {
|
|
||||||
this.image = image;
|
|
||||||
this.environment = environmentVariables;
|
|
||||||
this.secrets = secrets;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.CloudRunnerStepState = CloudRunnerStepState;
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 91491:
|
|
||||||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
||||||
exports.BuildStep = void 0;
|
|
||||||
const path_1 = __importDefault(__nccwpck_require__(71017));
|
|
||||||
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
|
||||||
class BuildStep {
|
|
||||||
run(cloudRunnerStepState) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
return yield BuildStep.BuildStep(cloudRunnerStepState.image, cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static BuildStep(image, environmentVariables, secrets) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
cloud_runner_logger_1.default.logLine(` `);
|
|
||||||
cloud_runner_logger_1.default.logLine('Starting build automation job');
|
|
||||||
const hooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_state_1.CloudRunnerState.buildParams.customJobHooks).filter((x) => x.step.includes(`setup`));
|
|
||||||
return yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runTask(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, image, `apt-get update
|
|
||||||
apt-get install -y -q zip tree nodejs git-lfs jq unzip
|
|
||||||
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
|
||||||
export GITHUB_WORKSPACE="${cloud_runner_state_1.CloudRunnerState.repoPathFull}"
|
|
||||||
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
|
|
||||||
mkdir -p ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
git clone -q -b ${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerBranch} ${cloud_runner_state_1.CloudRunnerState.unityBuilderRepoUrl} "${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
|
|
||||||
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
chmod +x ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
|
||||||
node ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
|
|
||||||
cp -r "${path_1.default
|
|
||||||
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', 'default-build-script')
|
|
||||||
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
|
|
||||||
cp -r "${path_1.default
|
|
||||||
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
|
|
||||||
.replace(/\\/g, `/`)}" "/entrypoint.sh"
|
|
||||||
cp -r "${path_1.default
|
|
||||||
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
|
|
||||||
.replace(/\\/g, `/`)}" "/steps"
|
|
||||||
chmod -R +x "/entrypoint.sh"
|
|
||||||
chmod -R +x "/steps"
|
|
||||||
/entrypoint.sh
|
|
||||||
cd "${cloud_runner_state_1.CloudRunnerState.libraryFolderFull.replace(/\\/g, `/`)}/.."
|
|
||||||
zip -r "lib-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "Library"
|
|
||||||
mv "lib-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}/Library"
|
|
||||||
cd "${cloud_runner_state_1.CloudRunnerState.repoPathFull.replace(/\\/g, `/`)}"
|
|
||||||
zip -r "build-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "build"
|
|
||||||
mv "build-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}"
|
|
||||||
chmod +x ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
|
||||||
node ${path_1.default
|
|
||||||
.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`)
|
|
||||||
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid}.zip" "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}/Library"
|
|
||||||
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${cloud_runner_state_1.CloudRunnerState.cacheFolderFull}"
|
|
||||||
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
|
||||||
`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.projectPathFull}`, environmentVariables, secrets);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.BuildStep = BuildStep;
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 58923:
|
|
||||||
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
||||||
exports.SetupStep = void 0;
|
|
||||||
const path_1 = __importDefault(__nccwpck_require__(71017));
|
|
||||||
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
|
||||||
class SetupStep {
|
|
||||||
run(cloudRunnerStepState) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
try {
|
|
||||||
return yield SetupStep.downloadRepository(cloudRunnerStepState.image, cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static downloadRepository(image, environmentVariables, secrets) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
try {
|
|
||||||
cloud_runner_logger_1.default.log(` `);
|
|
||||||
cloud_runner_logger_1.default.logLine('Starting step 1/2 (setup game files from repository)');
|
|
||||||
const hooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_state_1.CloudRunnerState.buildParams.customJobHooks).filter((x) => x.step.includes(`setup`));
|
|
||||||
return yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runTask(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, image, `apk update -q
|
|
||||||
apk add git-lfs jq tree zip unzip nodejs -q
|
|
||||||
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
|
||||||
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
|
|
||||||
mkdir -p ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
git clone -q -b ${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerBranch} ${cloud_runner_state_1.CloudRunnerState.unityBuilderRepoUrl} "${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
|
|
||||||
${cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree ${cloud_runner_state_1.CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
chmod +x ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
|
||||||
node ${path_1.default.join(cloud_runner_state_1.CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
|
|
||||||
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
|
||||||
`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}/`, environmentVariables, secrets);
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
cloud_runner_logger_1.default.logLine(`Failed download repository step 1/2`);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.SetupStep = SetupStep;
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 94655:
|
/***/ 94655:
|
||||||
|
|
@ -3296,11 +3152,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.BuildAutomationWorkflow = void 0;
|
exports.BuildAutomationWorkflow = void 0;
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_folders_1 = __nccwpck_require__(13527);
|
||||||
const cloud_runner_step_state_1 = __nccwpck_require__(64854);
|
|
||||||
const build_step_1 = __nccwpck_require__(91491);
|
|
||||||
const custom_workflow_1 = __nccwpck_require__(3786);
|
const custom_workflow_1 = __nccwpck_require__(3786);
|
||||||
const core = __importStar(__nccwpck_require__(42186));
|
const core = __importStar(__nccwpck_require__(42186));
|
||||||
|
const cloud_runner_build_command_process_1 = __nccwpck_require__(71899);
|
||||||
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
||||||
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
class BuildAutomationWorkflow {
|
class BuildAutomationWorkflow {
|
||||||
run(cloudRunnerStepState) {
|
run(cloudRunnerStepState) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
|
@ -3316,13 +3173,13 @@ class BuildAutomationWorkflow {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
cloud_runner_logger_1.default.log(`Cloud Runner is running standard build automation`);
|
cloud_runner_logger_1.default.log(`Cloud Runner is running standard build automation`);
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!cloud_runner_1.default.buildParameters.cliMode)
|
||||||
core.startGroup('pre build steps');
|
core.startGroup('pre build steps');
|
||||||
let output = '';
|
let output = '';
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.preBuildSteps !== '') {
|
if (cloud_runner_1.default.buildParameters.preBuildSteps !== '') {
|
||||||
output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.preBuildSteps);
|
output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_1.default.buildParameters.preBuildSteps);
|
||||||
}
|
}
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!cloud_runner_1.default.buildParameters.cliMode)
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
cloud_runner_logger_1.default.logWithTime('Configurable pre build step(s) time');
|
cloud_runner_logger_1.default.logWithTime('Configurable pre build step(s) time');
|
||||||
// core.startGroup('setup');
|
// core.startGroup('setup');
|
||||||
|
|
@ -3335,19 +3192,21 @@ class BuildAutomationWorkflow {
|
||||||
// );
|
// );
|
||||||
// core.endGroup();
|
// core.endGroup();
|
||||||
// CloudRunnerLogger.logWithTime('Download repository step time');
|
// CloudRunnerLogger.logWithTime('Download repository step time');
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!cloud_runner_1.default.buildParameters.cliMode)
|
||||||
core.startGroup('build');
|
core.startGroup('build');
|
||||||
cloud_runner_logger_1.default.log(baseImage.toString());
|
cloud_runner_logger_1.default.log(baseImage.toString());
|
||||||
output += yield new build_step_1.BuildStep().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
|
cloud_runner_logger_1.default.logLine(` `);
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
cloud_runner_logger_1.default.logLine('Starting build automation job');
|
||||||
|
output += yield cloud_runner_1.default.CloudRunnerProviderPlatform.runTask(cloud_runner_1.default.buildParameters.buildGuid, baseImage.toString(), BuildAutomationWorkflow.FullWorkflow, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}`, `/${cloud_runner_folders_1.CloudRunnerFolders.projectPathFull}`, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_1.default.defaultSecrets);
|
||||||
|
if (!cloud_runner_1.default.buildParameters.cliMode)
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
cloud_runner_logger_1.default.logWithTime('Build time');
|
cloud_runner_logger_1.default.logWithTime('Build time');
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!cloud_runner_1.default.buildParameters.cliMode)
|
||||||
core.startGroup('post build steps');
|
core.startGroup('post build steps');
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.postBuildSteps !== '') {
|
if (cloud_runner_1.default.buildParameters.postBuildSteps !== '') {
|
||||||
output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.postBuildSteps);
|
output += yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_1.default.buildParameters.postBuildSteps);
|
||||||
}
|
}
|
||||||
if (!cloud_runner_state_1.CloudRunnerState.buildParams.cliMode)
|
if (!cloud_runner_1.default.buildParameters.cliMode)
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
cloud_runner_logger_1.default.logWithTime('Configurable post build step(s) time');
|
cloud_runner_logger_1.default.logWithTime('Configurable post build step(s) time');
|
||||||
cloud_runner_logger_1.default.log(`Cloud Runner finished running standard build automation`);
|
cloud_runner_logger_1.default.log(`Cloud Runner finished running standard build automation`);
|
||||||
|
|
@ -3358,6 +3217,51 @@ class BuildAutomationWorkflow {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
static get FullWorkflow() {
|
||||||
|
const hooks = cloud_runner_build_command_process_1.CloudRunnerBuildCommandProcessor.getHooks(cloud_runner_1.default.buildParameters.customJobHooks).filter((x) => x.step.includes(`setup`));
|
||||||
|
return `apt-get update
|
||||||
|
apt-get install -y -q zip tree nodejs git-lfs jq unzip
|
||||||
|
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
||||||
|
export GITHUB_WORKSPACE="${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull}"
|
||||||
|
${BuildAutomationWorkflow.SetupCommands}
|
||||||
|
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
||||||
|
${BuildAutomationWorkflow.BuildCommands}`;
|
||||||
|
}
|
||||||
|
static get SetupCommands() {
|
||||||
|
return `export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
|
||||||
|
echo "cloning"
|
||||||
|
mkdir -p ${cloud_runner_folders_1.CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
|
||||||
|
git clone -q -b ${cloud_runner_1.default.buildParameters.cloudRunnerBranch} ${cloud_runner_folders_1.CloudRunnerFolders.unityBuilderRepoUrl} "${cloud_runner_folders_1.CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}"
|
||||||
|
${cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} tree ${cloud_runner_folders_1.CloudRunnerFolders.builderPathFull.replace(/\\/g, `/`)}
|
||||||
|
chmod +x ${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
||||||
|
echo "caching"
|
||||||
|
node ${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli`;
|
||||||
|
}
|
||||||
|
static get BuildCommands() {
|
||||||
|
return `cp -r "${path_1.default
|
||||||
|
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', 'default-build-script')
|
||||||
|
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
|
||||||
|
cp -r "${path_1.default
|
||||||
|
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
|
||||||
|
.replace(/\\/g, `/`)}" "/entrypoint.sh"
|
||||||
|
cp -r "${path_1.default
|
||||||
|
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
|
||||||
|
.replace(/\\/g, `/`)}" "/steps"
|
||||||
|
chmod -R +x "/entrypoint.sh"
|
||||||
|
chmod -R +x "/steps"
|
||||||
|
/entrypoint.sh
|
||||||
|
cd "${cloud_runner_folders_1.CloudRunnerFolders.libraryFolderFull.replace(/\\/g, `/`)}/.."
|
||||||
|
zip -r "lib-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "Library"
|
||||||
|
mv "lib-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
|
||||||
|
cd "${cloud_runner_folders_1.CloudRunnerFolders.repoPathFull.replace(/\\/g, `/`)}"
|
||||||
|
zip -r "build-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "build"
|
||||||
|
mv "build-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}"
|
||||||
|
chmod +x ${path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
||||||
|
node ${path_1.default
|
||||||
|
.join(cloud_runner_folders_1.CloudRunnerFolders.builderPathFull, 'dist', `index.js`)
|
||||||
|
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${cloud_runner_1.default.buildParameters.buildGuid}.zip" "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
|
||||||
|
${cloud_runner_1.default.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${cloud_runner_folders_1.CloudRunnerFolders.cacheFolderFull}"`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
exports.BuildAutomationWorkflow = BuildAutomationWorkflow;
|
exports.BuildAutomationWorkflow = BuildAutomationWorkflow;
|
||||||
|
|
||||||
|
|
@ -3384,7 +3288,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.CustomWorkflow = void 0;
|
exports.CustomWorkflow = void 0;
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_folders_1 = __nccwpck_require__(13527);
|
||||||
const yaml_1 = __importDefault(__nccwpck_require__(44603));
|
const yaml_1 = __importDefault(__nccwpck_require__(44603));
|
||||||
const __1 = __nccwpck_require__(41359);
|
const __1 = __nccwpck_require__(41359);
|
||||||
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
||||||
|
|
@ -3393,7 +3297,7 @@ class CustomWorkflow {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
cloud_runner_logger_1.default.log(`Cloud Runner is running in custom job mode`);
|
cloud_runner_logger_1.default.log(`Cloud Runner is running in custom job mode`);
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (__1.CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
cloud_runner_logger_1.default.log(`Parsing build steps: ${buildSteps}`);
|
cloud_runner_logger_1.default.log(`Parsing build steps: ${buildSteps}`);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
@ -3408,7 +3312,7 @@ class CustomWorkflow {
|
||||||
};
|
};
|
||||||
return secret;
|
return secret;
|
||||||
});
|
});
|
||||||
output += yield cloud_runner_state_1.CloudRunnerState.CloudRunnerProviderPlatform.runTask(cloud_runner_state_1.CloudRunnerState.buildParams.buildGuid, step['image'], step['commands'], `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}`, `/${cloud_runner_state_1.CloudRunnerState.buildVolumeFolder}/`, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), [...cloud_runner_state_1.CloudRunnerState.defaultSecrets, ...stepSecrets]);
|
output += yield __1.CloudRunner.CloudRunnerProviderPlatform.runTask(__1.CloudRunner.buildParameters.buildGuid, step['image'], step['commands'], `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}`, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}/`, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), [...__1.CloudRunner.defaultSecrets, ...stepSecrets]);
|
||||||
}
|
}
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
@ -3442,14 +3346,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.WorkflowCompositionRoot = void 0;
|
exports.WorkflowCompositionRoot = void 0;
|
||||||
const cloud_runner_state_1 = __nccwpck_require__(70912);
|
const cloud_runner_step_state_1 = __nccwpck_require__(50121);
|
||||||
const cloud_runner_step_state_1 = __nccwpck_require__(64854);
|
|
||||||
const custom_workflow_1 = __nccwpck_require__(3786);
|
const custom_workflow_1 = __nccwpck_require__(3786);
|
||||||
const build_automation_workflow_1 = __nccwpck_require__(94655);
|
const build_automation_workflow_1 = __nccwpck_require__(94655);
|
||||||
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
const task_parameter_serializer_1 = __nccwpck_require__(35346);
|
||||||
const setup_step_1 = __nccwpck_require__(58923);
|
const cloud_runner_1 = __importDefault(__nccwpck_require__(79144));
|
||||||
class WorkflowCompositionRoot {
|
class WorkflowCompositionRoot {
|
||||||
run(cloudRunnerStepState) {
|
run(cloudRunnerStepState) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
|
@ -3464,13 +3370,10 @@ class WorkflowCompositionRoot {
|
||||||
static runJob(baseImage) {
|
static runJob(baseImage) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
try {
|
try {
|
||||||
if (cloud_runner_state_1.CloudRunnerState.buildParams.customJob === `setup`) {
|
if (cloud_runner_1.default.buildParameters.customJob !== '') {
|
||||||
return yield new setup_step_1.SetupStep().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
|
return yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_1.default.buildParameters.customJob);
|
||||||
}
|
}
|
||||||
else if (cloud_runner_state_1.CloudRunnerState.buildParams.customJob !== '') {
|
return yield new build_automation_workflow_1.BuildAutomationWorkflow().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_1.default.defaultSecrets));
|
||||||
return yield custom_workflow_1.CustomWorkflow.runCustomJob(cloud_runner_state_1.CloudRunnerState.buildParams.customJob);
|
|
||||||
}
|
|
||||||
return yield new build_automation_workflow_1.BuildAutomationWorkflow().run(new cloud_runner_step_state_1.CloudRunnerStepState(baseImage, task_parameter_serializer_1.TaskParameterSerializer.readBuildEnvironmentVariables(), cloud_runner_state_1.CloudRunnerState.defaultSecrets));
|
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
throw error;
|
throw error;
|
||||||
|
|
@ -3504,13 +3407,15 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
const exec_1 = __nccwpck_require__(71514);
|
const exec_1 = __nccwpck_require__(71514);
|
||||||
const image_tag_1 = __importDefault(__nccwpck_require__(57648));
|
const image_tag_1 = __importDefault(__nccwpck_require__(57648));
|
||||||
const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145));
|
const image_environment_factory_1 = __importDefault(__nccwpck_require__(25145));
|
||||||
|
const fs_1 = __nccwpck_require__(57147);
|
||||||
|
const path_1 = __importDefault(__nccwpck_require__(71017));
|
||||||
class Docker {
|
class Docker {
|
||||||
static build(buildParameters, silent = false) {
|
static build(buildParameters, silent = false) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const { path, dockerfile, baseImage } = buildParameters;
|
const { path: buildPath, dockerfile, baseImage } = buildParameters;
|
||||||
const { version, platform } = baseImage;
|
const { version, platform } = baseImage;
|
||||||
const tag = new image_tag_1.default({ repository: '', name: 'unity-builder', version, platform });
|
const tag = new image_tag_1.default({ repository: '', name: 'unity-builder', version, platform });
|
||||||
const command = `docker build ${path} \
|
const command = `docker build ${buildPath} \
|
||||||
--file ${dockerfile} \
|
--file ${dockerfile} \
|
||||||
--build-arg IMAGE=${baseImage} \
|
--build-arg IMAGE=${baseImage} \
|
||||||
--tag ${tag}`;
|
--tag ${tag}`;
|
||||||
|
|
@ -3533,16 +3438,23 @@ class Docker {
|
||||||
}
|
}
|
||||||
static getBaseOsSpecificArguments(baseOs, workspace, unitySerial, runnerTemporaryPath, sshAgent) {
|
static getBaseOsSpecificArguments(baseOs, workspace, unitySerial, runnerTemporaryPath, sshAgent) {
|
||||||
switch (baseOs) {
|
switch (baseOs) {
|
||||||
case 'linux':
|
case 'linux': {
|
||||||
|
const githubHome = path_1.default.join(runnerTemporaryPath, '_github_home');
|
||||||
|
if (!fs_1.existsSync(githubHome))
|
||||||
|
fs_1.mkdirSync(githubHome);
|
||||||
|
const githubWorkflow = path_1.default.join(runnerTemporaryPath, '_github_workflow');
|
||||||
|
if (!fs_1.existsSync(githubWorkflow))
|
||||||
|
fs_1.mkdirSync(githubWorkflow);
|
||||||
return `--env UNITY_SERIAL \
|
return `--env UNITY_SERIAL \
|
||||||
--env GITHUB_WORKSPACE=/github/workspace \
|
--env GITHUB_WORKSPACE=/github/workspace \
|
||||||
${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \
|
${sshAgent ? '--env SSH_AUTH_SOCK=/ssh-agent' : ''} \
|
||||||
--volume "/var/run/docker.sock":"/var/run/docker.sock" \
|
--volume "/var/run/docker.sock":"/var/run/docker.sock:z" \
|
||||||
--volume "${runnerTemporaryPath}/_github_home":"/root" \
|
--volume "${githubHome}":"/root:z" \
|
||||||
--volume "${runnerTemporaryPath}/_github_workflow":"/github/workflow" \
|
--volume "${githubWorkflow}":"/github/workflow:z" \
|
||||||
--volume "${workspace}":"/github/workspace" \
|
--volume "${workspace}":"/github/workspace:z" \
|
||||||
${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \
|
${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \
|
||||||
${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''}`;
|
${sshAgent ? '--volume /home/runner/.ssh/known_hosts:/root/.ssh/known_hosts:ro' : ''}`;
|
||||||
|
}
|
||||||
case 'win32':
|
case 'win32':
|
||||||
return `--env UNITY_SERIAL="${unitySerial}" \
|
return `--env UNITY_SERIAL="${unitySerial}" \
|
||||||
--env GITHUB_WORKSPACE=c:/github/workspace \
|
--env GITHUB_WORKSPACE=c:/github/workspace \
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -5,7 +5,6 @@ import { ActionYamlReader } from '../input-readers/action-yaml';
|
||||||
import CloudRunnerLogger from '../cloud-runner/services/cloud-runner-logger';
|
import CloudRunnerLogger from '../cloud-runner/services/cloud-runner-logger';
|
||||||
import { CliFunction, GetAllCliModes, GetCliFunctions } from './cli-decorator';
|
import { CliFunction, GetAllCliModes, GetCliFunctions } from './cli-decorator';
|
||||||
import { RemoteClientLogger } from './remote-client/remote-client-services/remote-client-logger';
|
import { RemoteClientLogger } from './remote-client/remote-client-services/remote-client-logger';
|
||||||
import { CloudRunnerState } from '../cloud-runner/state/cloud-runner-state';
|
|
||||||
import { SetupCloudRunnerRepository } from './remote-client/setup-cloud-runner-repository';
|
import { SetupCloudRunnerRepository } from './remote-client/setup-cloud-runner-repository';
|
||||||
import * as SDK from 'aws-sdk';
|
import * as SDK from 'aws-sdk';
|
||||||
|
|
||||||
|
|
@ -74,7 +73,7 @@ export class CLI {
|
||||||
RemoteClientLogger.log(`Build Params:
|
RemoteClientLogger.log(`Build Params:
|
||||||
${JSON.stringify(buildParameter, undefined, 4)}
|
${JSON.stringify(buildParameter, undefined, 4)}
|
||||||
`);
|
`);
|
||||||
CloudRunnerState.setup(buildParameter);
|
CloudRunner.buildParameters = buildParameter;
|
||||||
await SetupCloudRunnerRepository.run();
|
await SetupCloudRunnerRepository.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import { assert } from 'console';
|
import { assert } from 'console';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
import CloudRunner from '../../../cloud-runner/cloud-runner';
|
||||||
import CloudRunnerLogger from '../../../cloud-runner/services/cloud-runner-logger';
|
import CloudRunnerLogger from '../../../cloud-runner/services/cloud-runner-logger';
|
||||||
import { CloudRunnerState } from '../../../cloud-runner/state/cloud-runner-state';
|
import { CloudRunnerFolders } from '../../../cloud-runner/services/cloud-runner-folders';
|
||||||
import { CloudRunnerSystem } from './cloud-runner-system';
|
import { CloudRunnerSystem } from './cloud-runner-system';
|
||||||
import { LFSHashing } from './lfs-hashing';
|
import { LFSHashing } from './lfs-hashing';
|
||||||
import { RemoteClientLogger } from './remote-client-logger';
|
import { RemoteClientLogger } from './remote-client-logger';
|
||||||
|
|
@ -17,7 +18,7 @@ export class Caching {
|
||||||
}
|
}
|
||||||
process.chdir(path.resolve(sourceFolder, '..'));
|
process.chdir(path.resolve(sourceFolder, '..'));
|
||||||
|
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
CloudRunnerLogger.log(
|
CloudRunnerLogger.log(
|
||||||
`Hashed cache folder ${await LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path.basename(
|
`Hashed cache folder ${await LFSHashing.hashAllFiles(sourceFolder)} ${sourceFolder} ${path.basename(
|
||||||
sourceFolder,
|
sourceFolder,
|
||||||
|
|
@ -25,7 +26,7 @@ export class Caching {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
await CloudRunnerSystem.Run(`ls ${path.basename(sourceFolder)}`);
|
await CloudRunnerSystem.Run(`ls ${path.basename(sourceFolder)}`);
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line func-style
|
// eslint-disable-next-line func-style
|
||||||
|
|
@ -38,14 +39,14 @@ export class Caching {
|
||||||
await CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path.basename(sourceFolder)}`);
|
await CloudRunnerSystem.Run(`zip ${cacheKey}.zip ${path.basename(sourceFolder)}`);
|
||||||
assert(fs.existsSync(`${cacheKey}.zip`), 'cache zip exists');
|
assert(fs.existsSync(`${cacheKey}.zip`), 'cache zip exists');
|
||||||
assert(fs.existsSync(path.basename(sourceFolder)), 'source folder exists');
|
assert(fs.existsSync(path.basename(sourceFolder)), 'source folder exists');
|
||||||
if (CloudRunnerState.buildParams.cachePushOverrideCommand) {
|
if (CloudRunner.buildParameters.cachePushOverrideCommand) {
|
||||||
CloudRunnerSystem.Run(formatFunction(CloudRunnerState.buildParams.cachePushOverrideCommand));
|
CloudRunnerSystem.Run(formatFunction(CloudRunner.buildParameters.cachePushOverrideCommand));
|
||||||
}
|
}
|
||||||
CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`);
|
CloudRunnerSystem.Run(`mv ${cacheKey}.zip ${cacheFolder}`);
|
||||||
RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`);
|
RemoteClientLogger.log(`moved ${cacheKey}.zip to ${cacheFolder}`);
|
||||||
assert(fs.existsSync(`${path.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder');
|
assert(fs.existsSync(`${path.join(cacheFolder, cacheKey)}.zip`), 'cache zip exists inside cache folder');
|
||||||
|
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
await CloudRunnerSystem.Run(`ls ${cacheFolder}`);
|
await CloudRunnerSystem.Run(`ls ${cacheFolder}`);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -87,12 +88,12 @@ export class Caching {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
if (CloudRunnerState.buildParams.cachePullOverrideCommand) {
|
if (CloudRunner.buildParameters.cachePullOverrideCommand) {
|
||||||
CloudRunnerSystem.Run(formatFunction(CloudRunnerState.buildParams.cachePullOverrideCommand));
|
CloudRunnerSystem.Run(formatFunction(CloudRunner.buildParameters.cachePullOverrideCommand));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fs.existsSync(`${cacheSelection}.zip`)) {
|
if (fs.existsSync(`${cacheSelection}.zip`)) {
|
||||||
const resultsFolder = `results${CloudRunnerState.buildParams.buildGuid}`;
|
const resultsFolder = `results${CloudRunner.buildParameters.buildGuid}`;
|
||||||
await CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`);
|
await CloudRunnerSystem.Run(`mkdir -p ${resultsFolder}`);
|
||||||
RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`);
|
RemoteClientLogger.log(`cache item exists ${cacheFolder}/${cacheSelection}.zip`);
|
||||||
assert(`${fs.existsSync(destinationFolder)}`);
|
assert(`${fs.existsSync(destinationFolder)}`);
|
||||||
|
|
@ -124,8 +125,8 @@ export class Caching {
|
||||||
|
|
||||||
public static handleCachePurging() {
|
public static handleCachePurging() {
|
||||||
if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) {
|
if (process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined) {
|
||||||
RemoteClientLogger.log(`purging ${CloudRunnerState.purgeRemoteCaching}`);
|
RemoteClientLogger.log(`purging ${CloudRunnerFolders.purgeRemoteCaching}`);
|
||||||
fs.rmdirSync(CloudRunnerState.cacheFolder, { recursive: true });
|
fs.rmdirSync(CloudRunnerFolders.cacheFolder, { recursive: true });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { CloudRunnerState } from '../../../cloud-runner/state/cloud-runner-state';
|
import { CloudRunnerFolders } from '../../../cloud-runner/services/cloud-runner-folders';
|
||||||
import { CloudRunnerSystem } from './cloud-runner-system';
|
import { CloudRunnerSystem } from './cloud-runner-system';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { assert } from 'console';
|
import { assert } from 'console';
|
||||||
|
|
@ -13,10 +13,10 @@ export class LFSHashing {
|
||||||
assert(fs.existsSync(`.lfs-assets-guid`));
|
assert(fs.existsSync(`.lfs-assets-guid`));
|
||||||
const lfsHashes = {
|
const lfsHashes = {
|
||||||
lfsGuid: fs
|
lfsGuid: fs
|
||||||
.readFileSync(`${path.join(CloudRunnerState.repoPathFull, `.lfs-assets-guid`)}`, 'utf8')
|
.readFileSync(`${path.join(CloudRunnerFolders.repoPathFull, `.lfs-assets-guid`)}`, 'utf8')
|
||||||
.replace(/\n/g, ``),
|
.replace(/\n/g, ``),
|
||||||
lfsGuidSum: fs
|
lfsGuidSum: fs
|
||||||
.readFileSync(`${path.join(CloudRunnerState.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8')
|
.readFileSync(`${path.join(CloudRunnerFolders.repoPathFull, `.lfs-assets-guid-sum`)}`, 'utf8')
|
||||||
.replace(' .lfs-assets-guid', '')
|
.replace(' .lfs-assets-guid', '')
|
||||||
.replace(/\n/g, ``),
|
.replace(/\n/g, ``),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { CloudRunnerState } from '../../cloud-runner/state/cloud-runner-state';
|
import CloudRunner from '../../cloud-runner/cloud-runner';
|
||||||
|
import { CloudRunnerFolders } from '../../cloud-runner/services/cloud-runner-folders';
|
||||||
import { Caching } from './remote-client-services/caching';
|
import { Caching } from './remote-client-services/caching';
|
||||||
import { LFSHashing } from './remote-client-services/lfs-hashing';
|
import { LFSHashing } from './remote-client-services/lfs-hashing';
|
||||||
import { CloudRunnerSystem } from './remote-client-services/cloud-runner-system';
|
import { CloudRunnerSystem } from './remote-client-services/cloud-runner-system';
|
||||||
|
|
@ -10,28 +11,28 @@ import { assert } from 'console';
|
||||||
export class SetupCloudRunnerRepository {
|
export class SetupCloudRunnerRepository {
|
||||||
public static async run() {
|
public static async run() {
|
||||||
try {
|
try {
|
||||||
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerState.buildPathFull}`);
|
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerFolders.buildPathFull}`);
|
||||||
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerState.repoPathFull}`);
|
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerFolders.repoPathFull}`);
|
||||||
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerState.cacheFolderFull}`);
|
await CloudRunnerSystem.Run(`mkdir -p ${CloudRunnerFolders.cacheFolderFull}`);
|
||||||
|
|
||||||
process.chdir(CloudRunnerState.repoPathFull);
|
process.chdir(CloudRunnerFolders.repoPathFull);
|
||||||
await SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles();
|
await SetupCloudRunnerRepository.cloneRepoWithoutLFSFiles();
|
||||||
const lfsHashes = await LFSHashing.createLFSHashFiles();
|
const lfsHashes = await LFSHashing.createLFSHashFiles();
|
||||||
if (fs.existsSync(CloudRunnerState.libraryFolderFull)) {
|
if (fs.existsSync(CloudRunnerFolders.libraryFolderFull)) {
|
||||||
RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`);
|
RemoteClientLogger.logWarning(`!Warning!: The Unity library was included in the git repository`);
|
||||||
}
|
}
|
||||||
await Caching.PullFromCache(
|
await Caching.PullFromCache(
|
||||||
CloudRunnerState.lfsCacheFolderFull,
|
CloudRunnerFolders.lfsCacheFolderFull,
|
||||||
CloudRunnerState.lfsDirectoryFull,
|
CloudRunnerFolders.lfsDirectoryFull,
|
||||||
`${lfsHashes.lfsGuidSum}`,
|
`${lfsHashes.lfsGuidSum}`,
|
||||||
);
|
);
|
||||||
await SetupCloudRunnerRepository.pullLatestLFS();
|
await SetupCloudRunnerRepository.pullLatestLFS();
|
||||||
await Caching.PushToCache(
|
await Caching.PushToCache(
|
||||||
CloudRunnerState.lfsCacheFolderFull,
|
CloudRunnerFolders.lfsCacheFolderFull,
|
||||||
CloudRunnerState.lfsDirectoryFull,
|
CloudRunnerFolders.lfsDirectoryFull,
|
||||||
`${lfsHashes.lfsGuidSum}`,
|
`${lfsHashes.lfsGuidSum}`,
|
||||||
);
|
);
|
||||||
await Caching.PullFromCache(CloudRunnerState.libraryCacheFolderFull, CloudRunnerState.libraryFolderFull);
|
await Caching.PullFromCache(CloudRunnerFolders.libraryCacheFolderFull, CloudRunnerFolders.libraryFolderFull);
|
||||||
Caching.handleCachePurging();
|
Caching.handleCachePurging();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw error;
|
throw error;
|
||||||
|
|
@ -40,7 +41,7 @@ export class SetupCloudRunnerRepository {
|
||||||
|
|
||||||
private static async cloneRepoWithoutLFSFiles() {
|
private static async cloneRepoWithoutLFSFiles() {
|
||||||
try {
|
try {
|
||||||
process.chdir(`${CloudRunnerState.repoPathFull}`);
|
process.chdir(`${CloudRunnerFolders.repoPathFull}`);
|
||||||
RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);
|
RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);
|
||||||
await CloudRunnerSystem.Run(`git config --global advice.detachedHead false`);
|
await CloudRunnerSystem.Run(`git config --global advice.detachedHead false`);
|
||||||
RemoteClientLogger.log(`Cloning the repository being built:`);
|
RemoteClientLogger.log(`Cloning the repository being built:`);
|
||||||
|
|
@ -48,14 +49,14 @@ export class SetupCloudRunnerRepository {
|
||||||
await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`);
|
await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process --skip"`);
|
||||||
await CloudRunnerSystem.Run(`git lfs install`);
|
await CloudRunnerSystem.Run(`git lfs install`);
|
||||||
await CloudRunnerSystem.Run(
|
await CloudRunnerSystem.Run(
|
||||||
`git clone ${CloudRunnerState.targetBuildRepoUrl} ${path.resolve(
|
`git clone ${CloudRunnerFolders.targetBuildRepoUrl} ${path.resolve(
|
||||||
`..`,
|
`..`,
|
||||||
path.basename(CloudRunnerState.repoPathFull),
|
path.basename(CloudRunnerFolders.repoPathFull),
|
||||||
)}`,
|
)}`,
|
||||||
);
|
);
|
||||||
assert(fs.existsSync(`.git`));
|
assert(fs.existsSync(`.git`));
|
||||||
RemoteClientLogger.log(`${CloudRunnerState.buildParams.branch}`);
|
RemoteClientLogger.log(`${CloudRunner.buildParameters.branch}`);
|
||||||
await CloudRunnerSystem.Run(`git checkout ${CloudRunnerState.buildParams.branch}`);
|
await CloudRunnerSystem.Run(`git checkout ${CloudRunner.buildParameters.branch}`);
|
||||||
assert(fs.existsSync(path.join(`.git`, `lfs`)), 'LFS folder should not exist before caching');
|
assert(fs.existsSync(path.join(`.git`, `lfs`)), 'LFS folder should not exist before caching');
|
||||||
RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`);
|
RemoteClientLogger.log(`Checked out ${process.env.GITHUB_SHA}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -64,18 +65,18 @@ export class SetupCloudRunnerRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async pullLatestLFS() {
|
private static async pullLatestLFS() {
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerState.lfsDirectoryFull}/..`);
|
await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerFolders.lfsDirectoryFull}/..`);
|
||||||
}
|
}
|
||||||
process.chdir(CloudRunnerState.repoPathFull);
|
process.chdir(CloudRunnerFolders.repoPathFull);
|
||||||
await CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`);
|
await CloudRunnerSystem.Run(`git config --global filter.lfs.smudge "git-lfs smudge -- %f"`);
|
||||||
await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`);
|
await CloudRunnerSystem.Run(`git config --global filter.lfs.process "git-lfs filter-process"`);
|
||||||
await CloudRunnerSystem.Run(`git lfs pull`);
|
await CloudRunnerSystem.Run(`git lfs pull`);
|
||||||
RemoteClientLogger.log(`pulled latest LFS files`);
|
RemoteClientLogger.log(`pulled latest LFS files`);
|
||||||
assert(fs.existsSync(CloudRunnerState.lfsDirectoryFull));
|
assert(fs.existsSync(CloudRunnerFolders.lfsDirectoryFull));
|
||||||
|
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerState.lfsDirectoryFull}/..`);
|
await CloudRunnerSystem.Run(`ls -lh ${CloudRunnerFolders.lfsDirectoryFull}/..`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import * as SDK from 'aws-sdk';
|
import * as SDK from 'aws-sdk';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import CloudRunner from '../cloud-runner';
|
||||||
|
|
||||||
export class AWSError {
|
export class AWSError {
|
||||||
static async handleStackCreationFailure(error: any, CF: SDK.CloudFormation, taskDefStackName: string) {
|
static async handleStackCreationFailure(error: any, CF: SDK.CloudFormation, taskDefStackName: string) {
|
||||||
CloudRunnerLogger.log('aws error: ');
|
CloudRunnerLogger.log('aws error: ');
|
||||||
core.error(JSON.stringify(error, undefined, 4));
|
core.error(JSON.stringify(error, undefined, 4));
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
CloudRunnerLogger.log('Getting events and resources for task stack');
|
CloudRunnerLogger.log('Getting events and resources for task stack');
|
||||||
const events = (await CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents;
|
const events = (await CF.describeStackEvents({ StackName: taskDefStackName }).promise()).StackEvents;
|
||||||
CloudRunnerLogger.log(JSON.stringify(events, undefined, 4));
|
CloudRunnerLogger.log(JSON.stringify(events, undefined, 4));
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import CloudRunnerAWSTaskDef from './cloud-runner-aws-task-def';
|
||||||
import * as zlib from 'zlib';
|
import * as zlib from 'zlib';
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import { Input } from '../..';
|
import { Input } from '../..';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import CloudRunner from '../cloud-runner';
|
||||||
import { CloudRunnerStatics } from '../cloud-runner-statics';
|
import { CloudRunnerStatics } from '../cloud-runner-statics';
|
||||||
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
|
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
|
||||||
|
|
||||||
|
|
@ -39,7 +39,7 @@ class AWSTaskRunner {
|
||||||
{
|
{
|
||||||
name: taskDef.taskDefStackName,
|
name: taskDef.taskDefStackName,
|
||||||
environment,
|
environment,
|
||||||
command: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(commands, CloudRunnerState.buildParams)],
|
command: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(commands, CloudRunner.buildParameters)],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
@ -185,14 +185,14 @@ class AWSTaskRunner {
|
||||||
if (json.messageType === 'DATA_MESSAGE') {
|
if (json.messageType === 'DATA_MESSAGE') {
|
||||||
for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) {
|
for (let logEventsIndex = 0; logEventsIndex < json.logEvents.length; logEventsIndex++) {
|
||||||
let message = json.logEvents[logEventsIndex].message;
|
let message = json.logEvents[logEventsIndex].message;
|
||||||
if (json.logEvents[logEventsIndex].message.includes(`---${CloudRunnerState.buildParams.logId}`)) {
|
if (json.logEvents[logEventsIndex].message.includes(`---${CloudRunner.buildParameters.logId}`)) {
|
||||||
CloudRunnerLogger.log('End of log transmission received');
|
CloudRunnerLogger.log('End of log transmission received');
|
||||||
shouldReadLogs = false;
|
shouldReadLogs = false;
|
||||||
} else if (message.includes('Rebuilding Library because the asset database could not be found!')) {
|
} else if (message.includes('Rebuilding Library because the asset database could not be found!')) {
|
||||||
core.warning('LIBRARY NOT FOUND!');
|
core.warning('LIBRARY NOT FOUND!');
|
||||||
}
|
}
|
||||||
message = `[${CloudRunnerStatics.logPrefix}] ${message}`;
|
message = `[${CloudRunnerStatics.logPrefix}] ${message}`;
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
output += message;
|
output += message;
|
||||||
}
|
}
|
||||||
CloudRunnerLogger.log(message);
|
CloudRunnerLogger.log(message);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
|
import CloudRunnerEnvironmentVariable from './services/cloud-runner-environment-variable';
|
||||||
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
import CloudRunnerSecret from './services/cloud-runner-secret';
|
||||||
|
|
||||||
export class CloudRunnerStepState {
|
export class CloudRunnerStepState {
|
||||||
public image: string;
|
public image: string;
|
||||||
|
|
@ -1,18 +1,22 @@
|
||||||
import AWSBuildPlatform from './aws';
|
import AWSBuildPlatform from './aws';
|
||||||
import { BuildParameters } from '..';
|
import { BuildParameters } from '..';
|
||||||
import { CloudRunnerState } from './state/cloud-runner-state';
|
|
||||||
import Kubernetes from './k8s';
|
import Kubernetes from './k8s';
|
||||||
import CloudRunnerLogger from './services/cloud-runner-logger';
|
import CloudRunnerLogger from './services/cloud-runner-logger';
|
||||||
import { CloudRunnerStepState } from './state/cloud-runner-step-state';
|
import { CloudRunnerStepState } from './cloud-runner-step-state';
|
||||||
import { WorkflowCompositionRoot } from './workflows/workflow-composition-root';
|
import { WorkflowCompositionRoot } from './workflows/workflow-composition-root';
|
||||||
import { CloudRunnerError } from './error/cloud-runner-error';
|
import { CloudRunnerError } from './error/cloud-runner-error';
|
||||||
import { TaskParameterSerializer } from './services/task-parameter-serializer';
|
import { TaskParameterSerializer } from './services/task-parameter-serializer';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
import CloudRunnerSecret from './services/cloud-runner-secret';
|
||||||
|
import { CloudRunnerProviderInterface } from './services/cloud-runner-provider-interface';
|
||||||
|
|
||||||
class CloudRunner {
|
class CloudRunner {
|
||||||
|
public static CloudRunnerProviderPlatform: CloudRunnerProviderInterface;
|
||||||
|
static buildParameters: BuildParameters;
|
||||||
|
public static defaultSecrets: CloudRunnerSecret[];
|
||||||
private static setup(buildParameters: BuildParameters) {
|
private static setup(buildParameters: BuildParameters) {
|
||||||
CloudRunnerLogger.setup();
|
CloudRunnerLogger.setup();
|
||||||
CloudRunnerState.setup(buildParameters);
|
CloudRunner.buildParameters = buildParameters;
|
||||||
CloudRunner.setupBuildPlatform();
|
CloudRunner.setupBuildPlatform();
|
||||||
const parameters = TaskParameterSerializer.readBuildEnvironmentVariables();
|
const parameters = TaskParameterSerializer.readBuildEnvironmentVariables();
|
||||||
if (!buildParameters.cliMode) {
|
if (!buildParameters.cliMode) {
|
||||||
|
|
@ -23,15 +27,15 @@ class CloudRunner {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static setupBuildPlatform() {
|
private static setupBuildPlatform() {
|
||||||
switch (CloudRunnerState.buildParams.cloudRunnerCluster) {
|
switch (CloudRunner.buildParameters.cloudRunnerCluster) {
|
||||||
case 'k8s':
|
case 'k8s':
|
||||||
CloudRunnerLogger.log('Cloud Runner platform selected Kubernetes');
|
CloudRunnerLogger.log('Cloud Runner platform selected Kubernetes');
|
||||||
CloudRunnerState.CloudRunnerProviderPlatform = new Kubernetes(CloudRunnerState.buildParams);
|
CloudRunner.CloudRunnerProviderPlatform = new Kubernetes(CloudRunner.buildParameters);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case 'aws':
|
case 'aws':
|
||||||
CloudRunnerLogger.log('Cloud Runner platform selected AWS');
|
CloudRunnerLogger.log('Cloud Runner platform selected AWS');
|
||||||
CloudRunnerState.CloudRunnerProviderPlatform = new AWSBuildPlatform(CloudRunnerState.buildParams);
|
CloudRunner.CloudRunnerProviderPlatform = new AWSBuildPlatform(CloudRunner.buildParameters);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -39,33 +43,33 @@ class CloudRunner {
|
||||||
static async run(buildParameters: BuildParameters, baseImage: string) {
|
static async run(buildParameters: BuildParameters, baseImage: string) {
|
||||||
CloudRunner.setup(buildParameters);
|
CloudRunner.setup(buildParameters);
|
||||||
try {
|
try {
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('Setup remote runner');
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('Setup remote runner');
|
||||||
await CloudRunnerState.CloudRunnerProviderPlatform.setupSharedResources(
|
await CloudRunner.CloudRunnerProviderPlatform.setupSharedResources(
|
||||||
CloudRunnerState.buildParams.buildGuid,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
CloudRunnerState.buildParams,
|
CloudRunner.buildParameters,
|
||||||
CloudRunnerState.branchName,
|
CloudRunner.buildParameters.branch,
|
||||||
CloudRunnerState.defaultSecrets,
|
CloudRunner.defaultSecrets,
|
||||||
);
|
);
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.endGroup();
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
||||||
const output = await new WorkflowCompositionRoot().run(
|
const output = await new WorkflowCompositionRoot().run(
|
||||||
new CloudRunnerStepState(
|
new CloudRunnerStepState(
|
||||||
baseImage,
|
baseImage,
|
||||||
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
||||||
CloudRunnerState.defaultSecrets,
|
CloudRunner.defaultSecrets,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('Cleanup');
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('Cleanup');
|
||||||
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources(
|
await CloudRunner.CloudRunnerProviderPlatform.cleanupSharedResources(
|
||||||
CloudRunnerState.buildParams.buildGuid,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
CloudRunnerState.buildParams,
|
CloudRunner.buildParameters,
|
||||||
CloudRunnerState.branchName,
|
CloudRunner.buildParameters.branch,
|
||||||
CloudRunnerState.defaultSecrets,
|
CloudRunner.defaultSecrets,
|
||||||
);
|
);
|
||||||
CloudRunnerLogger.log(`Cleanup complete`);
|
CloudRunnerLogger.log(`Cleanup complete`);
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.endGroup();
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
||||||
return output;
|
return output;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.endGroup();
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
||||||
await CloudRunnerError.handleException(error);
|
await CloudRunnerError.handleException(error);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
import CloudRunner from '../cloud-runner';
|
||||||
|
|
||||||
export class CloudRunnerError {
|
export class CloudRunnerError {
|
||||||
public static async handleException(error: unknown) {
|
public static async handleException(error: unknown) {
|
||||||
CloudRunnerLogger.error(JSON.stringify(error, undefined, 4));
|
CloudRunnerLogger.error(JSON.stringify(error, undefined, 4));
|
||||||
core.setFailed('Cloud Runner failed');
|
core.setFailed('Cloud Runner failed');
|
||||||
await CloudRunnerState.CloudRunnerProviderPlatform.cleanupSharedResources(
|
await CloudRunner.CloudRunnerProviderPlatform.cleanupSharedResources(
|
||||||
CloudRunnerState.buildParams.buildGuid,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
CloudRunnerState.buildParams,
|
CloudRunner.buildParameters,
|
||||||
CloudRunnerState.branchName,
|
CloudRunner.buildParameters.branch,
|
||||||
CloudRunnerState.defaultSecrets,
|
CloudRunner.defaultSecrets,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import BuildParameters from '../../build-parameters';
|
||||||
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
|
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
|
||||||
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
|
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
|
||||||
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import CloudRunner from '../cloud-runner';
|
||||||
|
|
||||||
class KubernetesJobSpecFactory {
|
class KubernetesJobSpecFactory {
|
||||||
static getJobSpec(
|
static getJobSpec(
|
||||||
|
|
@ -103,7 +103,7 @@ class KubernetesJobSpecFactory {
|
||||||
name: 'main',
|
name: 'main',
|
||||||
image,
|
image,
|
||||||
command: ['/bin/sh'],
|
command: ['/bin/sh'],
|
||||||
args: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(command, CloudRunnerState.buildParams)],
|
args: ['-c', CloudRunnerBuildCommandProcessor.ProcessCommands(command, CloudRunner.buildParameters)],
|
||||||
|
|
||||||
workingDir: `${workingDirectory}`,
|
workingDir: `${workingDirectory}`,
|
||||||
resources: {
|
resources: {
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import { CloudRunnerStatics } from '../cloud-runner-statics';
|
import { CloudRunnerStatics } from '../cloud-runner-statics';
|
||||||
import waitUntil from 'async-wait-until';
|
import waitUntil from 'async-wait-until';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import CloudRunner from '../cloud-runner';
|
||||||
|
|
||||||
class KubernetesTaskRunner {
|
class KubernetesTaskRunner {
|
||||||
static async runTask(
|
static async runTask(
|
||||||
|
|
@ -24,7 +24,7 @@ class KubernetesTaskRunner {
|
||||||
didStreamAnyLogs = true;
|
didStreamAnyLogs = true;
|
||||||
let message = chunk.toString().trimRight(`\n`);
|
let message = chunk.toString().trimRight(`\n`);
|
||||||
message = `[${CloudRunnerStatics.logPrefix}] ${message}`;
|
message = `[${CloudRunnerStatics.logPrefix}] ${message}`;
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
output += message;
|
output += message;
|
||||||
}
|
}
|
||||||
logCallback(message);
|
logCallback(message);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { BuildParameters } from '../..';
|
import { BuildParameters } from '../..';
|
||||||
import YAML from 'yaml';
|
import YAML from 'yaml';
|
||||||
import CloudRunnerSecret from './cloud-runner-secret';
|
import CloudRunnerSecret from './cloud-runner-secret';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import CloudRunner from '../cloud-runner';
|
||||||
|
|
||||||
export class CloudRunnerBuildCommandProcessor {
|
export class CloudRunnerBuildCommandProcessor {
|
||||||
public static ProcessCommands(commands: string, buildParameters: BuildParameters): string {
|
public static ProcessCommands(commands: string, buildParameters: BuildParameters): string {
|
||||||
|
|
@ -11,7 +11,7 @@ export class CloudRunnerBuildCommandProcessor {
|
||||||
|
|
||||||
return `echo "---"
|
return `echo "---"
|
||||||
echo "start cloud runner init"
|
echo "start cloud runner init"
|
||||||
${CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} printenv
|
${CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} printenv
|
||||||
echo "start of cloud runner job"
|
echo "start of cloud runner job"
|
||||||
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
||||||
${commands}
|
${commands}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
import path from 'path';
|
||||||
|
import { CloudRunner } from '../..';
|
||||||
|
|
||||||
|
export class CloudRunnerFolders {
|
||||||
|
public static readonly repositoryFolder = 'repo';
|
||||||
|
|
||||||
|
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
|
||||||
|
|
||||||
|
public static get buildPathFull(): string {
|
||||||
|
return path.join(`/`, CloudRunnerFolders.buildVolumeFolder, CloudRunner.buildParameters.buildGuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get cacheFolderFull(): string {
|
||||||
|
return path.join(
|
||||||
|
'/',
|
||||||
|
CloudRunnerFolders.buildVolumeFolder,
|
||||||
|
CloudRunnerFolders.cacheFolder,
|
||||||
|
CloudRunnerFolders.cacheKey,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get cacheKey(): string {
|
||||||
|
return CloudRunner.buildParameters.cacheKey || CloudRunner.buildParameters.branch;
|
||||||
|
}
|
||||||
|
public static get builderPathFull(): string {
|
||||||
|
return path.join(CloudRunnerFolders.buildPathFull, `builder`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get repoPathFull(): string {
|
||||||
|
return path.join(CloudRunnerFolders.buildPathFull, CloudRunnerFolders.repositoryFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get projectPathFull(): string {
|
||||||
|
return path.join(CloudRunnerFolders.repoPathFull, CloudRunner.buildParameters.projectPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get libraryFolderFull(): string {
|
||||||
|
return path.join(CloudRunnerFolders.projectPathFull, `Library`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get lfsDirectoryFull(): string {
|
||||||
|
return path.join(CloudRunnerFolders.repoPathFull, `.git`, `lfs`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get purgeRemoteCaching(): boolean {
|
||||||
|
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get lfsCacheFolderFull() {
|
||||||
|
return path.join(CloudRunnerFolders.cacheFolderFull, `lfs`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get libraryCacheFolderFull() {
|
||||||
|
return path.join(CloudRunnerFolders.cacheFolderFull, `Library`);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get unityBuilderRepoUrl(): string {
|
||||||
|
return `https://${CloudRunner.buildParameters.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get targetBuildRepoUrl(): string {
|
||||||
|
return `https://${CloudRunner.buildParameters.gitPrivateToken}@github.com/${CloudRunner.buildParameters.githubRepo}.git`;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get buildVolumeFolder() {
|
||||||
|
return 'data';
|
||||||
|
}
|
||||||
|
|
||||||
|
public static get cacheFolder() {
|
||||||
|
return 'cache';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
import { Input } from '../..';
|
import { CloudRunner, Input } from '../..';
|
||||||
import ImageEnvironmentFactory from '../../image-environment-factory';
|
import ImageEnvironmentFactory from '../../image-environment-factory';
|
||||||
import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
|
import CloudRunnerEnvironmentVariable from './cloud-runner-environment-variable';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
|
||||||
import { CloudRunnerBuildCommandProcessor } from './cloud-runner-build-command-process';
|
import { CloudRunnerBuildCommandProcessor } from './cloud-runner-build-command-process';
|
||||||
|
|
||||||
export class TaskParameterSerializer {
|
export class TaskParameterSerializer {
|
||||||
|
|
@ -10,15 +9,15 @@ export class TaskParameterSerializer {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
name: 'ContainerMemory',
|
name: 'ContainerMemory',
|
||||||
value: CloudRunnerState.buildParams.cloudRunnerMemory,
|
value: CloudRunner.buildParameters.cloudRunnerMemory,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ContainerCpu',
|
name: 'ContainerCpu',
|
||||||
value: CloudRunnerState.buildParams.cloudRunnerCpu,
|
value: CloudRunner.buildParameters.cloudRunnerCpu,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'BUILD_TARGET',
|
name: 'BUILD_TARGET',
|
||||||
value: CloudRunnerState.buildParams.platform,
|
value: CloudRunner.buildParameters.platform,
|
||||||
},
|
},
|
||||||
...TaskParameterSerializer.serializeBuildParamsAndInput,
|
...TaskParameterSerializer.serializeBuildParamsAndInput,
|
||||||
];
|
];
|
||||||
|
|
@ -27,7 +26,7 @@ export class TaskParameterSerializer {
|
||||||
let array = new Array();
|
let array = new Array();
|
||||||
array = TaskParameterSerializer.readBuildParameters(array);
|
array = TaskParameterSerializer.readBuildParameters(array);
|
||||||
array = TaskParameterSerializer.readInput(array);
|
array = TaskParameterSerializer.readInput(array);
|
||||||
const configurableHooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks);
|
const configurableHooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunner.buildParameters.customJobHooks);
|
||||||
const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0);
|
const secrets = configurableHooks.map((x) => x.secrets).filter((x) => x !== undefined && x.length > 0);
|
||||||
if (secrets.length > 0) {
|
if (secrets.length > 0) {
|
||||||
// eslint-disable-next-line unicorn/no-array-reduce
|
// eslint-disable-next-line unicorn/no-array-reduce
|
||||||
|
|
@ -46,14 +45,14 @@ export class TaskParameterSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readBuildParameters(array: any[]) {
|
private static readBuildParameters(array: any[]) {
|
||||||
const keys = Object.keys(CloudRunnerState.buildParams);
|
const keys = Object.keys(CloudRunner.buildParameters);
|
||||||
for (const element of keys) {
|
for (const element of keys) {
|
||||||
array.push({
|
array.push({
|
||||||
name: element,
|
name: element,
|
||||||
value: CloudRunnerState.buildParams[element],
|
value: CloudRunner.buildParameters[element],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
array.push({ name: 'buildParameters', value: JSON.stringify(CloudRunnerState.buildParams) });
|
array.push({ name: 'buildParameters', value: JSON.stringify(CloudRunner.buildParameters) });
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -71,15 +70,15 @@ export class TaskParameterSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static setupDefaultSecrets() {
|
private static setupDefaultSecrets() {
|
||||||
if (CloudRunnerState.defaultSecrets === undefined)
|
if (CloudRunner.defaultSecrets === undefined)
|
||||||
CloudRunnerState.defaultSecrets = ImageEnvironmentFactory.getEnvironmentVariables(
|
CloudRunner.defaultSecrets = ImageEnvironmentFactory.getEnvironmentVariables(CloudRunner.buildParameters).map(
|
||||||
CloudRunnerState.buildParams,
|
(x) => {
|
||||||
).map((x) => {
|
return {
|
||||||
return {
|
ParameterKey: x.name,
|
||||||
ParameterKey: x.name,
|
EnvironmentVariable: x.name,
|
||||||
EnvironmentVariable: x.name,
|
ParameterValue: x.value,
|
||||||
ParameterValue: x.value,
|
};
|
||||||
};
|
},
|
||||||
});
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
||||||
import path from 'path';
|
|
||||||
import { BuildParameters } from '../..';
|
|
||||||
import { CloudRunnerProviderInterface } from '../services/cloud-runner-provider-interface';
|
|
||||||
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
|
||||||
|
|
||||||
export class CloudRunnerState {
|
|
||||||
public static CloudRunnerProviderPlatform: CloudRunnerProviderInterface;
|
|
||||||
public static buildParams: BuildParameters;
|
|
||||||
public static defaultSecrets: CloudRunnerSecret[];
|
|
||||||
public static readonly repositoryFolder = 'repo';
|
|
||||||
|
|
||||||
// only the following paths that do not start a path.join with another "Full" suffixed property need to start with an absolute /
|
|
||||||
|
|
||||||
public static get buildPathFull(): string {
|
|
||||||
return path.join(`/`, CloudRunnerState.buildVolumeFolder, CloudRunnerState.buildParams.buildGuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get cacheFolderFull(): string {
|
|
||||||
return path.join('/', CloudRunnerState.buildVolumeFolder, CloudRunnerState.cacheFolder, CloudRunnerState.cacheKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
static setup(buildParameters: BuildParameters) {
|
|
||||||
CloudRunnerState.buildParams = buildParameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get branchName(): string {
|
|
||||||
return CloudRunnerState.buildParams.branch;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get cacheKey(): string {
|
|
||||||
return CloudRunnerState.buildParams.cacheKey || CloudRunnerState.buildParams.branch;
|
|
||||||
}
|
|
||||||
public static get builderPathFull(): string {
|
|
||||||
return path.join(CloudRunnerState.buildPathFull, `builder`);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get repoPathFull(): string {
|
|
||||||
return path.join(CloudRunnerState.buildPathFull, CloudRunnerState.repositoryFolder);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get projectPathFull(): string {
|
|
||||||
return path.join(CloudRunnerState.repoPathFull, CloudRunnerState.buildParams.projectPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get libraryFolderFull(): string {
|
|
||||||
return path.join(CloudRunnerState.projectPathFull, `Library`);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get lfsDirectoryFull(): string {
|
|
||||||
return path.join(CloudRunnerState.repoPathFull, `.git`, `lfs`);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get purgeRemoteCaching(): boolean {
|
|
||||||
return process.env.PURGE_REMOTE_BUILDER_CACHE !== undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get lfsCacheFolderFull() {
|
|
||||||
return path.join(CloudRunnerState.cacheFolderFull, `lfs`);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get libraryCacheFolderFull() {
|
|
||||||
return path.join(CloudRunnerState.cacheFolderFull, `Library`);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get unityBuilderRepoUrl(): string {
|
|
||||||
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/game-ci/unity-builder.git`;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get targetBuildRepoUrl(): string {
|
|
||||||
return `https://${CloudRunnerState.buildParams.gitPrivateToken}@github.com/${CloudRunnerState.buildParams.githubRepo}.git`;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get buildVolumeFolder() {
|
|
||||||
return 'data';
|
|
||||||
}
|
|
||||||
|
|
||||||
public static get cacheFolder() {
|
|
||||||
return 'cache';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,87 +0,0 @@
|
||||||
import path from 'path';
|
|
||||||
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
|
|
||||||
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
|
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
|
||||||
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
|
||||||
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
|
|
||||||
import { StepInterface } from './step-interface';
|
|
||||||
|
|
||||||
export class BuildStep implements StepInterface {
|
|
||||||
async run(cloudRunnerStepState: CloudRunnerStepState) {
|
|
||||||
return await BuildStep.BuildStep(
|
|
||||||
cloudRunnerStepState.image,
|
|
||||||
cloudRunnerStepState.environment,
|
|
||||||
cloudRunnerStepState.secrets,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static async BuildStep(
|
|
||||||
image: string,
|
|
||||||
environmentVariables: CloudRunnerEnvironmentVariable[],
|
|
||||||
secrets: CloudRunnerSecret[],
|
|
||||||
) {
|
|
||||||
CloudRunnerLogger.logLine(` `);
|
|
||||||
CloudRunnerLogger.logLine('Starting build automation job');
|
|
||||||
const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks).filter((x) =>
|
|
||||||
x.step.includes(`setup`),
|
|
||||||
);
|
|
||||||
return await CloudRunnerState.CloudRunnerProviderPlatform.runTask(
|
|
||||||
CloudRunnerState.buildParams.buildGuid,
|
|
||||||
image,
|
|
||||||
`apt-get update
|
|
||||||
apt-get install -y -q zip tree nodejs git-lfs jq unzip
|
|
||||||
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
|
||||||
export GITHUB_WORKSPACE="${CloudRunnerState.repoPathFull}"
|
|
||||||
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
|
|
||||||
mkdir -p ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
git clone -q -b ${CloudRunnerState.buildParams.cloudRunnerBranch} ${
|
|
||||||
CloudRunnerState.unityBuilderRepoUrl
|
|
||||||
} "${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
|
|
||||||
${
|
|
||||||
CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'
|
|
||||||
} tree ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
chmod +x ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
|
||||||
node ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
|
|
||||||
cp -r "${path
|
|
||||||
.join(CloudRunnerState.builderPathFull, 'dist', 'default-build-script')
|
|
||||||
.replace(/\\/g, `/`)}" "/UnityBuilderAction"
|
|
||||||
cp -r "${path
|
|
||||||
.join(CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'entrypoint.sh')
|
|
||||||
.replace(/\\/g, `/`)}" "/entrypoint.sh"
|
|
||||||
cp -r "${path
|
|
||||||
.join(CloudRunnerState.builderPathFull, 'dist', 'platforms', 'ubuntu', 'steps')
|
|
||||||
.replace(/\\/g, `/`)}" "/steps"
|
|
||||||
chmod -R +x "/entrypoint.sh"
|
|
||||||
chmod -R +x "/steps"
|
|
||||||
/entrypoint.sh
|
|
||||||
cd "${CloudRunnerState.libraryFolderFull.replace(/\\/g, `/`)}/.."
|
|
||||||
zip -r "lib-${CloudRunnerState.buildParams.buildGuid}.zip" "Library"
|
|
||||||
mv "lib-${CloudRunnerState.buildParams.buildGuid}.zip" "${CloudRunnerState.cacheFolderFull.replace(
|
|
||||||
/\\/g,
|
|
||||||
`/`,
|
|
||||||
)}/Library"
|
|
||||||
cd "${CloudRunnerState.repoPathFull.replace(/\\/g, `/`)}"
|
|
||||||
zip -r "build-${CloudRunnerState.buildParams.buildGuid}.zip" "build"
|
|
||||||
mv "build-${CloudRunnerState.buildParams.buildGuid}.zip" "${CloudRunnerState.cacheFolderFull.replace(
|
|
||||||
/\\/g,
|
|
||||||
`/`,
|
|
||||||
)}"
|
|
||||||
chmod +x ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
|
||||||
node ${path
|
|
||||||
.join(CloudRunnerState.builderPathFull, 'dist', `index.js`)
|
|
||||||
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${
|
|
||||||
CloudRunnerState.buildParams.buildGuid
|
|
||||||
}.zip" "${CloudRunnerState.cacheFolderFull.replace(/\\/g, `/`)}/Library"
|
|
||||||
${CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${
|
|
||||||
CloudRunnerState.cacheFolderFull
|
|
||||||
}"
|
|
||||||
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
|
||||||
`,
|
|
||||||
`/${CloudRunnerState.buildVolumeFolder}`,
|
|
||||||
`/${CloudRunnerState.projectPathFull}`,
|
|
||||||
environmentVariables,
|
|
||||||
secrets,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
import path from 'path';
|
|
||||||
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
|
|
||||||
import CloudRunnerEnvironmentVariable from '../services/cloud-runner-environment-variable';
|
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
|
||||||
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
|
||||||
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
|
|
||||||
import { StepInterface } from './step-interface';
|
|
||||||
|
|
||||||
export class SetupStep implements StepInterface {
|
|
||||||
async run(cloudRunnerStepState: CloudRunnerStepState) {
|
|
||||||
try {
|
|
||||||
return await SetupStep.downloadRepository(
|
|
||||||
cloudRunnerStepState.image,
|
|
||||||
cloudRunnerStepState.environment,
|
|
||||||
cloudRunnerStepState.secrets,
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static async downloadRepository(
|
|
||||||
image: string,
|
|
||||||
environmentVariables: CloudRunnerEnvironmentVariable[],
|
|
||||||
secrets: CloudRunnerSecret[],
|
|
||||||
) {
|
|
||||||
try {
|
|
||||||
CloudRunnerLogger.log(` `);
|
|
||||||
CloudRunnerLogger.logLine('Starting step 1/2 (setup game files from repository)');
|
|
||||||
const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunnerState.buildParams.customJobHooks).filter((x) =>
|
|
||||||
x.step.includes(`setup`),
|
|
||||||
);
|
|
||||||
return await CloudRunnerState.CloudRunnerProviderPlatform.runTask(
|
|
||||||
CloudRunnerState.buildParams.buildGuid,
|
|
||||||
image,
|
|
||||||
`apk update -q
|
|
||||||
apk add git-lfs jq tree zip unzip nodejs -q
|
|
||||||
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
|
||||||
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1
|
|
||||||
mkdir -p ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
git clone -q -b ${CloudRunnerState.buildParams.cloudRunnerBranch} ${
|
|
||||||
CloudRunnerState.unityBuilderRepoUrl
|
|
||||||
} "${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}"
|
|
||||||
${
|
|
||||||
CloudRunnerState.buildParams.cloudRunnerIntegrationTests ? '' : '#'
|
|
||||||
} tree ${CloudRunnerState.builderPathFull.replace(/\\/g, `/`)}
|
|
||||||
chmod +x ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
|
||||||
node ${path.join(CloudRunnerState.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)} -m remote-cli
|
|
||||||
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
|
||||||
`,
|
|
||||||
`/${CloudRunnerState.buildVolumeFolder}`,
|
|
||||||
`/${CloudRunnerState.buildVolumeFolder}/`,
|
|
||||||
environmentVariables,
|
|
||||||
secrets,
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
CloudRunnerLogger.logLine(`Failed download repository step 1/2`);
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
|
|
||||||
|
|
||||||
export interface StepInterface {
|
|
||||||
run(
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
|
||||||
cloudRunnerStepState: CloudRunnerStepState,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import { TaskParameterSerializer } from '../services/task-parameter-serializer';
|
import { TaskParameterSerializer } from '../services/task-parameter-serializer';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import { CloudRunnerFolders } from '../services/cloud-runner-folders';
|
||||||
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
|
import { CloudRunnerStepState } from '../cloud-runner-step-state';
|
||||||
import { BuildStep } from '../steps/build-step';
|
|
||||||
import { CustomWorkflow } from './custom-workflow';
|
import { CustomWorkflow } from './custom-workflow';
|
||||||
import { WorkflowInterface } from './workflow-interface';
|
import { WorkflowInterface } from './workflow-interface';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
import { CloudRunnerBuildCommandProcessor } from '../services/cloud-runner-build-command-process';
|
||||||
|
import path from 'path';
|
||||||
|
import CloudRunner from '../cloud-runner';
|
||||||
|
|
||||||
export class BuildAutomationWorkflow implements WorkflowInterface {
|
export class BuildAutomationWorkflow implements WorkflowInterface {
|
||||||
async run(cloudRunnerStepState: CloudRunnerStepState) {
|
async run(cloudRunnerStepState: CloudRunnerStepState) {
|
||||||
|
|
@ -20,12 +22,12 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
|
||||||
try {
|
try {
|
||||||
CloudRunnerLogger.log(`Cloud Runner is running standard build automation`);
|
CloudRunnerLogger.log(`Cloud Runner is running standard build automation`);
|
||||||
|
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('pre build steps');
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('pre build steps');
|
||||||
let output = '';
|
let output = '';
|
||||||
if (CloudRunnerState.buildParams.preBuildSteps !== '') {
|
if (CloudRunner.buildParameters.preBuildSteps !== '') {
|
||||||
output += await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.preBuildSteps);
|
output += await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.preBuildSteps);
|
||||||
}
|
}
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.endGroup();
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
||||||
CloudRunnerLogger.logWithTime('Configurable pre build step(s) time');
|
CloudRunnerLogger.logWithTime('Configurable pre build step(s) time');
|
||||||
|
|
||||||
// core.startGroup('setup');
|
// core.startGroup('setup');
|
||||||
|
|
@ -39,23 +41,28 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
|
||||||
// core.endGroup();
|
// core.endGroup();
|
||||||
// CloudRunnerLogger.logWithTime('Download repository step time');
|
// CloudRunnerLogger.logWithTime('Download repository step time');
|
||||||
|
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('build');
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('build');
|
||||||
CloudRunnerLogger.log(baseImage.toString());
|
CloudRunnerLogger.log(baseImage.toString());
|
||||||
output += await new BuildStep().run(
|
CloudRunnerLogger.logLine(` `);
|
||||||
new CloudRunnerStepState(
|
CloudRunnerLogger.logLine('Starting build automation job');
|
||||||
baseImage,
|
|
||||||
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
output += await CloudRunner.CloudRunnerProviderPlatform.runTask(
|
||||||
CloudRunnerState.defaultSecrets,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
),
|
baseImage.toString(),
|
||||||
|
BuildAutomationWorkflow.FullWorkflow,
|
||||||
|
`/${CloudRunnerFolders.buildVolumeFolder}`,
|
||||||
|
`/${CloudRunnerFolders.projectPathFull}`,
|
||||||
|
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
||||||
|
CloudRunner.defaultSecrets,
|
||||||
);
|
);
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.endGroup();
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
||||||
CloudRunnerLogger.logWithTime('Build time');
|
CloudRunnerLogger.logWithTime('Build time');
|
||||||
|
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.startGroup('post build steps');
|
if (!CloudRunner.buildParameters.cliMode) core.startGroup('post build steps');
|
||||||
if (CloudRunnerState.buildParams.postBuildSteps !== '') {
|
if (CloudRunner.buildParameters.postBuildSteps !== '') {
|
||||||
output += await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.postBuildSteps);
|
output += await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.postBuildSteps);
|
||||||
}
|
}
|
||||||
if (!CloudRunnerState.buildParams.cliMode) core.endGroup();
|
if (!CloudRunner.buildParameters.cliMode) core.endGroup();
|
||||||
CloudRunnerLogger.logWithTime('Configurable post build step(s) time');
|
CloudRunnerLogger.logWithTime('Configurable post build step(s) time');
|
||||||
|
|
||||||
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
|
CloudRunnerLogger.log(`Cloud Runner finished running standard build automation`);
|
||||||
|
|
@ -65,4 +72,68 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static get FullWorkflow() {
|
||||||
|
const hooks = CloudRunnerBuildCommandProcessor.getHooks(CloudRunner.buildParameters.customJobHooks).filter((x) =>
|
||||||
|
x.step.includes(`setup`),
|
||||||
|
);
|
||||||
|
return `apt-get update
|
||||||
|
apt-get install -y -q zip tree nodejs git-lfs jq unzip
|
||||||
|
${hooks.filter((x) => x.hook.includes(`before`)).map((x) => x.commands) || ' '}
|
||||||
|
export GITHUB_WORKSPACE="${CloudRunnerFolders.repoPathFull}"
|
||||||
|
${BuildAutomationWorkflow.SetupCommands}
|
||||||
|
${hooks.filter((x) => x.hook.includes(`after`)).map((x) => x.commands) || ' '}
|
||||||
|
${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"
|
||||||
|
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"
|
||||||
|
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"
|
||||||
|
/entrypoint.sh
|
||||||
|
cd "${CloudRunnerFolders.libraryFolderFull.replace(/\\/g, `/`)}/.."
|
||||||
|
zip -r "lib-${CloudRunner.buildParameters.buildGuid}.zip" "Library"
|
||||||
|
mv "lib-${CloudRunner.buildParameters.buildGuid}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(
|
||||||
|
/\\/g,
|
||||||
|
`/`,
|
||||||
|
)}/Library"
|
||||||
|
cd "${CloudRunnerFolders.repoPathFull.replace(/\\/g, `/`)}"
|
||||||
|
zip -r "build-${CloudRunner.buildParameters.buildGuid}.zip" "build"
|
||||||
|
mv "build-${CloudRunner.buildParameters.buildGuid}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(
|
||||||
|
/\\/g,
|
||||||
|
`/`,
|
||||||
|
)}"
|
||||||
|
chmod +x ${path.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`).replace(/\\/g, `/`)}
|
||||||
|
node ${path
|
||||||
|
.join(CloudRunnerFolders.builderPathFull, 'dist', `index.js`)
|
||||||
|
.replace(/\\/g, `/`)} -m cache-push "Library" "lib-${
|
||||||
|
CloudRunner.buildParameters.buildGuid
|
||||||
|
}.zip" "${CloudRunnerFolders.cacheFolderFull.replace(/\\/g, `/`)}/Library"
|
||||||
|
${CloudRunner.buildParameters.cloudRunnerIntegrationTests ? '' : '#'} tree -lh "${
|
||||||
|
CloudRunnerFolders.cacheFolderFull
|
||||||
|
}"`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
import CloudRunnerLogger from '../services/cloud-runner-logger';
|
||||||
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
import CloudRunnerSecret from '../services/cloud-runner-secret';
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import { CloudRunnerFolders } from '../services/cloud-runner-folders';
|
||||||
import YAML from 'yaml';
|
import YAML from 'yaml';
|
||||||
import { Input } from '../..';
|
import { CloudRunner, Input } from '../..';
|
||||||
import { TaskParameterSerializer } from '../services/task-parameter-serializer';
|
import { TaskParameterSerializer } from '../services/task-parameter-serializer';
|
||||||
|
|
||||||
export class CustomWorkflow {
|
export class CustomWorkflow {
|
||||||
public static async runCustomJob(buildSteps) {
|
public static async runCustomJob(buildSteps) {
|
||||||
try {
|
try {
|
||||||
CloudRunnerLogger.log(`Cloud Runner is running in custom job mode`);
|
CloudRunnerLogger.log(`Cloud Runner is running in custom job mode`);
|
||||||
if (CloudRunnerState.buildParams.cloudRunnerIntegrationTests) {
|
if (CloudRunner.buildParameters.cloudRunnerIntegrationTests) {
|
||||||
CloudRunnerLogger.log(`Parsing build steps: ${buildSteps}`);
|
CloudRunnerLogger.log(`Parsing build steps: ${buildSteps}`);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
|
@ -24,14 +24,14 @@ export class CustomWorkflow {
|
||||||
};
|
};
|
||||||
return secret;
|
return secret;
|
||||||
});
|
});
|
||||||
output += await CloudRunnerState.CloudRunnerProviderPlatform.runTask(
|
output += await CloudRunner.CloudRunnerProviderPlatform.runTask(
|
||||||
CloudRunnerState.buildParams.buildGuid,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
step['image'],
|
step['image'],
|
||||||
step['commands'],
|
step['commands'],
|
||||||
`/${CloudRunnerState.buildVolumeFolder}`,
|
`/${CloudRunnerFolders.buildVolumeFolder}`,
|
||||||
`/${CloudRunnerState.buildVolumeFolder}/`,
|
`/${CloudRunnerFolders.buildVolumeFolder}/`,
|
||||||
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
||||||
[...CloudRunnerState.defaultSecrets, ...stepSecrets],
|
[...CloudRunner.defaultSecrets, ...stepSecrets],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return output;
|
return output;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
import { CloudRunnerState } from '../state/cloud-runner-state';
|
import { CloudRunnerStepState } from '../cloud-runner-step-state';
|
||||||
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
|
|
||||||
import { CustomWorkflow } from './custom-workflow';
|
import { CustomWorkflow } from './custom-workflow';
|
||||||
import { WorkflowInterface } from './workflow-interface';
|
import { WorkflowInterface } from './workflow-interface';
|
||||||
import { BuildAutomationWorkflow } from './build-automation-workflow';
|
import { BuildAutomationWorkflow } from './build-automation-workflow';
|
||||||
import { TaskParameterSerializer } from '../services/task-parameter-serializer';
|
import { TaskParameterSerializer } from '../services/task-parameter-serializer';
|
||||||
import { SetupStep } from '../steps/setup-step';
|
import CloudRunner from '../cloud-runner';
|
||||||
|
|
||||||
export class WorkflowCompositionRoot implements WorkflowInterface {
|
export class WorkflowCompositionRoot implements WorkflowInterface {
|
||||||
async run(cloudRunnerStepState: CloudRunnerStepState) {
|
async run(cloudRunnerStepState: CloudRunnerStepState) {
|
||||||
|
|
@ -17,22 +16,14 @@ export class WorkflowCompositionRoot implements WorkflowInterface {
|
||||||
|
|
||||||
private static async runJob(baseImage: any) {
|
private static async runJob(baseImage: any) {
|
||||||
try {
|
try {
|
||||||
if (CloudRunnerState.buildParams.customJob === `setup`) {
|
if (CloudRunner.buildParameters.customJob !== '') {
|
||||||
return await new SetupStep().run(
|
return await CustomWorkflow.runCustomJob(CloudRunner.buildParameters.customJob);
|
||||||
new CloudRunnerStepState(
|
|
||||||
baseImage,
|
|
||||||
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
|
||||||
CloudRunnerState.defaultSecrets,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
} else if (CloudRunnerState.buildParams.customJob !== '') {
|
|
||||||
return await CustomWorkflow.runCustomJob(CloudRunnerState.buildParams.customJob);
|
|
||||||
}
|
}
|
||||||
return await new BuildAutomationWorkflow().run(
|
return await new BuildAutomationWorkflow().run(
|
||||||
new CloudRunnerStepState(
|
new CloudRunnerStepState(
|
||||||
baseImage,
|
baseImage,
|
||||||
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
TaskParameterSerializer.readBuildEnvironmentVariables(),
|
||||||
CloudRunnerState.defaultSecrets,
|
CloudRunner.defaultSecrets,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { CloudRunnerStepState } from '../state/cloud-runner-step-state';
|
import { CloudRunnerStepState } from '../cloud-runner-step-state';
|
||||||
|
|
||||||
export interface WorkflowInterface {
|
export interface WorkflowInterface {
|
||||||
run(
|
run(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue