Use retained workspace :O
parent
5a3613114b
commit
c7881bc2cd
|
|
@ -667,6 +667,11 @@ class SharedWorkspaceLocking {
|
||||||
return (yield SharedWorkspaceLocking.GetAllWorkspaces()).includes(workspace);
|
return (yield SharedWorkspaceLocking.GetAllWorkspaces()).includes(workspace);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
static CleanupWorkspace(workspace) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 rm ${SharedWorkspaceLocking.workspaceRoot}/${workspace} --recursive`, false, true);
|
||||||
|
});
|
||||||
|
}
|
||||||
static GetFreeWorkspaces() {
|
static GetFreeWorkspaces() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const result = [];
|
const result = [];
|
||||||
|
|
@ -681,7 +686,7 @@ class SharedWorkspaceLocking {
|
||||||
}
|
}
|
||||||
static GetAllWorkspaces() {
|
static GetAllWorkspaces() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
return (yield SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/`)).map((x) => x.replace(`/`, ``));
|
return (yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}`)).map((x) => x.replace(`/`, ``));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
static GetAllLocks(workspace) {
|
static GetAllLocks(workspace) {
|
||||||
|
|
@ -689,7 +694,7 @@ class SharedWorkspaceLocking {
|
||||||
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||||
throw new Error("Workspace doesn't exist, can't call get all locks");
|
throw new Error("Workspace doesn't exist, can't call get all locks");
|
||||||
}
|
}
|
||||||
return (yield SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`)).map((x) => x.replace(`/`, ``));
|
return (yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/`)).map((x) => x.replace(`/`, ``));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
static ReadLines(command) {
|
static ReadLines(command) {
|
||||||
|
|
@ -709,7 +714,7 @@ class SharedWorkspaceLocking {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const file = `${Date.now()}_${runId}_lock`;
|
const file = `${Date.now()}_${runId}_lock`;
|
||||||
fs.writeFileSync(file, '');
|
fs.writeFileSync(file, '');
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 cp ./${file} s3://game-ci-test-storage/locks/${workspace}/${file}`, false, true);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 cp ./${file} ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`, false, true);
|
||||||
fs.rmSync(file);
|
fs.rmSync(file);
|
||||||
return SharedWorkspaceLocking.HasWorkspaceLock(workspace, runId);
|
return SharedWorkspaceLocking.HasWorkspaceLock(workspace, runId);
|
||||||
});
|
});
|
||||||
|
|
@ -722,8 +727,8 @@ class SharedWorkspaceLocking {
|
||||||
const file = (yield SharedWorkspaceLocking.GetAllLocks(workspace)).filter((x) => x.includes(`_${runId}_lock`));
|
const file = (yield SharedWorkspaceLocking.GetAllLocks(workspace)).filter((x) => x.includes(`_${runId}_lock`));
|
||||||
cloud_runner_logger_1.default.log(`${JSON.stringify(yield SharedWorkspaceLocking.GetAllLocks(workspace))}`);
|
cloud_runner_logger_1.default.log(`${JSON.stringify(yield SharedWorkspaceLocking.GetAllLocks(workspace))}`);
|
||||||
cloud_runner_logger_1.default.log(`Deleting file ${file}`);
|
cloud_runner_logger_1.default.log(`Deleting file ${file}`);
|
||||||
cloud_runner_logger_1.default.log(`aws s3 rm s3://game-ci-test-storage/locks/${workspace}/${file}`);
|
cloud_runner_logger_1.default.log(`aws s3 rm ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`);
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 rm s3://game-ci-test-storage/locks/${workspace}/${file}`, false, true);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 rm ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`, false, true);
|
||||||
return !SharedWorkspaceLocking.HasWorkspaceLock(workspace, runId);
|
return !SharedWorkspaceLocking.HasWorkspaceLock(workspace, runId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -740,7 +745,7 @@ class SharedWorkspaceLocking {
|
||||||
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const files = yield SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`);
|
const files = yield SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/`);
|
||||||
// 1 Because we expect 1 workspace file to exist in every workspace folder
|
// 1 Because we expect 1 workspace file to exist in every workspace folder
|
||||||
return files.length > 1;
|
return files.length > 1;
|
||||||
});
|
});
|
||||||
|
|
@ -749,7 +754,7 @@ class SharedWorkspaceLocking {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const file = `${Date.now()}_workspace`;
|
const file = `${Date.now()}_workspace`;
|
||||||
fs.writeFileSync(file, '');
|
fs.writeFileSync(file, '');
|
||||||
yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 cp ./${file} s3://game-ci-test-storage/locks/${workspace}/${file}`, false, true);
|
yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 cp ./${file} ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`, false, true);
|
||||||
fs.rmSync(file);
|
fs.rmSync(file);
|
||||||
return workspace;
|
return workspace;
|
||||||
});
|
});
|
||||||
|
|
@ -758,6 +763,7 @@ class SharedWorkspaceLocking {
|
||||||
static ReleaseLock(workspace) { }
|
static ReleaseLock(workspace) { }
|
||||||
}
|
}
|
||||||
exports.SharedWorkspaceLocking = SharedWorkspaceLocking;
|
exports.SharedWorkspaceLocking = SharedWorkspaceLocking;
|
||||||
|
SharedWorkspaceLocking.workspaceRoot = `s3://game-ci-test-storage/locks`;
|
||||||
exports["default"] = SharedWorkspaceLocking;
|
exports["default"] = SharedWorkspaceLocking;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -5052,6 +5058,7 @@ class BuildAutomationWorkflow {
|
||||||
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_options_1.default.retainWorkspaces) {
|
if (cloud_runner_options_1.default.retainWorkspaces) {
|
||||||
const workspace = (yield shared_workspace_locking_1.default.GetLockedWorkspace(`test-workspace-${cloud_runner_1.default.buildParameters.buildGuid}`, cloud_runner_1.default.buildParameters.buildGuid)) || cloud_runner_1.default.buildParameters.buildGuid;
|
const workspace = (yield shared_workspace_locking_1.default.GetLockedWorkspace(`test-workspace-${cloud_runner_1.default.buildParameters.buildGuid}`, cloud_runner_1.default.buildParameters.buildGuid)) || cloud_runner_1.default.buildParameters.buildGuid;
|
||||||
|
process.env.LOCKED_WORKSPACE = workspace;
|
||||||
cloud_runner_logger_1.default.logLine(`Using workspace ${workspace}`);
|
cloud_runner_logger_1.default.logLine(`Using workspace ${workspace}`);
|
||||||
cloudRunnerStepState.environment = [
|
cloudRunnerStepState.environment = [
|
||||||
...cloudRunnerStepState.environment,
|
...cloudRunnerStepState.environment,
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -3,6 +3,7 @@ import * as fs from 'fs';
|
||||||
import CloudRunnerLogger from '../cloud-runner/services/cloud-runner-logger';
|
import CloudRunnerLogger from '../cloud-runner/services/cloud-runner-logger';
|
||||||
import CloudRunnerOptions from '../cloud-runner/cloud-runner-options';
|
import CloudRunnerOptions from '../cloud-runner/cloud-runner-options';
|
||||||
export class SharedWorkspaceLocking {
|
export class SharedWorkspaceLocking {
|
||||||
|
private static readonly workspaceRoot = `s3://game-ci-test-storage/locks`;
|
||||||
public static async GetLockedWorkspace(workspaceIfCreated: string, runId: string) {
|
public static async GetLockedWorkspace(workspaceIfCreated: string, runId: string) {
|
||||||
if (!CloudRunnerOptions.retainWorkspaces) {
|
if (!CloudRunnerOptions.retainWorkspaces) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -22,6 +23,14 @@ export class SharedWorkspaceLocking {
|
||||||
return (await SharedWorkspaceLocking.GetAllWorkspaces()).includes(workspace);
|
return (await SharedWorkspaceLocking.GetAllWorkspaces()).includes(workspace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async CleanupWorkspace(workspace: string) {
|
||||||
|
await CloudRunnerSystem.Run(
|
||||||
|
`aws s3 rm ${SharedWorkspaceLocking.workspaceRoot}/${workspace} --recursive`,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public static async GetFreeWorkspaces(): Promise<string[]> {
|
public static async GetFreeWorkspaces(): Promise<string[]> {
|
||||||
const result: string[] = [];
|
const result: string[] = [];
|
||||||
const workspaces = await SharedWorkspaceLocking.GetAllWorkspaces();
|
const workspaces = await SharedWorkspaceLocking.GetAllWorkspaces();
|
||||||
|
|
@ -34,7 +43,7 @@ export class SharedWorkspaceLocking {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
public static async GetAllWorkspaces(): Promise<string[]> {
|
public static async GetAllWorkspaces(): Promise<string[]> {
|
||||||
return (await SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/`)).map((x) =>
|
return (await SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}`)).map((x) =>
|
||||||
x.replace(`/`, ``),
|
x.replace(`/`, ``),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -43,9 +52,9 @@ export class SharedWorkspaceLocking {
|
||||||
throw new Error("Workspace doesn't exist, can't call get all locks");
|
throw new Error("Workspace doesn't exist, can't call get all locks");
|
||||||
}
|
}
|
||||||
|
|
||||||
return (await SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`)).map(
|
return (
|
||||||
(x) => x.replace(`/`, ``),
|
await SharedWorkspaceLocking.ReadLines(`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/`)
|
||||||
);
|
).map((x) => x.replace(`/`, ``));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async ReadLines(command: string): Promise<string[]> {
|
private static async ReadLines(command: string): Promise<string[]> {
|
||||||
|
|
@ -66,7 +75,7 @@ export class SharedWorkspaceLocking {
|
||||||
const file = `${Date.now()}_${runId}_lock`;
|
const file = `${Date.now()}_${runId}_lock`;
|
||||||
fs.writeFileSync(file, '');
|
fs.writeFileSync(file, '');
|
||||||
await CloudRunnerSystem.Run(
|
await CloudRunnerSystem.Run(
|
||||||
`aws s3 cp ./${file} s3://game-ci-test-storage/locks/${workspace}/${file}`,
|
`aws s3 cp ./${file} ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`,
|
||||||
false,
|
false,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
|
@ -82,8 +91,8 @@ export class SharedWorkspaceLocking {
|
||||||
const file = (await SharedWorkspaceLocking.GetAllLocks(workspace)).filter((x) => x.includes(`_${runId}_lock`));
|
const file = (await SharedWorkspaceLocking.GetAllLocks(workspace)).filter((x) => x.includes(`_${runId}_lock`));
|
||||||
CloudRunnerLogger.log(`${JSON.stringify(await SharedWorkspaceLocking.GetAllLocks(workspace))}`);
|
CloudRunnerLogger.log(`${JSON.stringify(await SharedWorkspaceLocking.GetAllLocks(workspace))}`);
|
||||||
CloudRunnerLogger.log(`Deleting file ${file}`);
|
CloudRunnerLogger.log(`Deleting file ${file}`);
|
||||||
CloudRunnerLogger.log(`aws s3 rm s3://game-ci-test-storage/locks/${workspace}/${file}`);
|
CloudRunnerLogger.log(`aws s3 rm ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`);
|
||||||
await CloudRunnerSystem.Run(`aws s3 rm s3://game-ci-test-storage/locks/${workspace}/${file}`, false, true);
|
await CloudRunnerSystem.Run(`aws s3 rm ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`, false, true);
|
||||||
|
|
||||||
return !SharedWorkspaceLocking.HasWorkspaceLock(workspace, runId);
|
return !SharedWorkspaceLocking.HasWorkspaceLock(workspace, runId);
|
||||||
}
|
}
|
||||||
|
|
@ -99,7 +108,9 @@ export class SharedWorkspaceLocking {
|
||||||
if (!(await SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
if (!(await SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const files = await SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`);
|
const files = await SharedWorkspaceLocking.ReadLines(
|
||||||
|
`aws s3 ls ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/`,
|
||||||
|
);
|
||||||
|
|
||||||
// 1 Because we expect 1 workspace file to exist in every workspace folder
|
// 1 Because we expect 1 workspace file to exist in every workspace folder
|
||||||
return files.length > 1;
|
return files.length > 1;
|
||||||
|
|
@ -109,7 +120,7 @@ export class SharedWorkspaceLocking {
|
||||||
const file = `${Date.now()}_workspace`;
|
const file = `${Date.now()}_workspace`;
|
||||||
fs.writeFileSync(file, '');
|
fs.writeFileSync(file, '');
|
||||||
await CloudRunnerSystem.Run(
|
await CloudRunnerSystem.Run(
|
||||||
`aws s3 cp ./${file} s3://game-ci-test-storage/locks/${workspace}/${file}`,
|
`aws s3 cp ./${file} ${SharedWorkspaceLocking.workspaceRoot}/${workspace}/${file}`,
|
||||||
false,
|
false,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
|
||||||
CloudRunner.buildParameters.buildGuid,
|
CloudRunner.buildParameters.buildGuid,
|
||||||
)) || CloudRunner.buildParameters.buildGuid;
|
)) || CloudRunner.buildParameters.buildGuid;
|
||||||
|
|
||||||
|
process.env.LOCKED_WORKSPACE = workspace;
|
||||||
|
|
||||||
CloudRunnerLogger.logLine(`Using workspace ${workspace}`);
|
CloudRunnerLogger.logLine(`Using workspace ${workspace}`);
|
||||||
cloudRunnerStepState.environment = [
|
cloudRunnerStepState.environment = [
|
||||||
...cloudRunnerStepState.environment,
|
...cloudRunnerStepState.environment,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue