Better locking
parent
1beee459f2
commit
d4c5218b39
|
|
@ -635,6 +635,11 @@ class SharedWorkspaceLocking {
|
|||
return yield SharedWorkspaceLocking.CreateLockableWorkspace(workspaceIfCreated);
|
||||
});
|
||||
}
|
||||
static DoesWorkspaceExist(workspace) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
return (yield SharedWorkspaceLocking.GetAllWorkspaces()).includes(workspace);
|
||||
});
|
||||
}
|
||||
static GetFreeWorkspaces() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = [];
|
||||
|
|
@ -654,6 +659,9 @@ class SharedWorkspaceLocking {
|
|||
}
|
||||
static GetAllLocks(workspace) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||
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(`/`, ``));
|
||||
});
|
||||
}
|
||||
|
|
@ -691,6 +699,9 @@ class SharedWorkspaceLocking {
|
|||
}
|
||||
static HasWorkspaceLock(workspace) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||
return false;
|
||||
}
|
||||
cloud_runner_logger_1.default.log((yield cloud_runner_system_1.CloudRunnerSystem.Run(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`, false, true))
|
||||
.split('\n')
|
||||
.map((x) => {
|
||||
|
|
@ -702,6 +713,9 @@ class SharedWorkspaceLocking {
|
|||
}
|
||||
static IsWorkspaceLocked(workspace) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (!(yield SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||
return false;
|
||||
}
|
||||
const files = yield SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`);
|
||||
// 1 Because we expect 1 workspace file to exist in every workspace folder
|
||||
return files.length > 1;
|
||||
|
|
@ -5015,7 +5029,7 @@ class BuildAutomationWorkflow {
|
|||
cloud_runner_logger_1.default.log(baseImage.toString());
|
||||
cloud_runner_logger_1.default.logLine(` `);
|
||||
cloud_runner_logger_1.default.logLine('Starting build automation job');
|
||||
output += yield cloud_runner_1.default.Provider.runTask(cloud_runner_1.default.buildParameters.buildGuid, baseImage.toString(), BuildAutomationWorkflow.BuildWorkflow, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}`, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}/`, cloudRunnerStepState.environment, cloudRunnerStepState.secrets);
|
||||
output += yield cloud_runner_1.default.Provider.runTask(cloud_runner_1.default.buildParameters.buildGuid, baseImage.toString(), BuildAutomationWorkflow.BuildWorkflow, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}`, `/${cloud_runner_folders_1.CloudRunnerFolders.buildVolumeFolder}/`, [...cloudRunnerStepState.environment, { name: `LOCKED_WORKSPACE`, value: workspace }], cloudRunnerStepState.secrets);
|
||||
if (!cloud_runner_1.default.buildParameters.isCliMode)
|
||||
core.endGroup();
|
||||
cloud_runner_logger_1.default.logWithTime('Build time');
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -18,6 +18,10 @@ export class SharedWorkspaceLocking {
|
|||
return await SharedWorkspaceLocking.CreateLockableWorkspace(workspaceIfCreated);
|
||||
}
|
||||
|
||||
public static async DoesWorkspaceExist(workspace: string) {
|
||||
return (await SharedWorkspaceLocking.GetAllWorkspaces()).includes(workspace);
|
||||
}
|
||||
|
||||
public static async GetFreeWorkspaces(): Promise<string[]> {
|
||||
const result: string[] = [];
|
||||
const workspaces = await SharedWorkspaceLocking.GetAllWorkspaces();
|
||||
|
|
@ -35,6 +39,10 @@ export class SharedWorkspaceLocking {
|
|||
);
|
||||
}
|
||||
public static async GetAllLocks(workspace: string): Promise<string[]> {
|
||||
if (!(await SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||
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(
|
||||
(x) => x.replace(`/`, ``),
|
||||
);
|
||||
|
|
@ -77,6 +85,9 @@ export class SharedWorkspaceLocking {
|
|||
return !SharedWorkspaceLocking.HasWorkspaceLock(workspace);
|
||||
}
|
||||
public static async HasWorkspaceLock(workspace: string): Promise<boolean> {
|
||||
if (!(await SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||
return false;
|
||||
}
|
||||
CloudRunnerLogger.log(
|
||||
(await CloudRunnerSystem.Run(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`, false, true))
|
||||
.split('\n')
|
||||
|
|
@ -90,6 +101,9 @@ export class SharedWorkspaceLocking {
|
|||
}
|
||||
|
||||
public static async IsWorkspaceLocked(workspace: string): Promise<boolean> {
|
||||
if (!(await SharedWorkspaceLocking.DoesWorkspaceExist(workspace))) {
|
||||
return false;
|
||||
}
|
||||
const files = await SharedWorkspaceLocking.ReadLines(`aws s3 ls s3://game-ci-test-storage/locks/${workspace}/`);
|
||||
|
||||
// 1 Because we expect 1 workspace file to exist in every workspace folder
|
||||
|
|
|
|||
|
|
@ -47,5 +47,5 @@ describe('Cloud Runner Locking', () => {
|
|||
await SharedWorkspaceLocking.GetLockedWorkspace('test-workspace-2', uuidv4()),
|
||||
)}`,
|
||||
);
|
||||
}, 150000);
|
||||
}, 3000000);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ export class BuildAutomationWorkflow implements WorkflowInterface {
|
|||
BuildAutomationWorkflow.BuildWorkflow,
|
||||
`/${CloudRunnerFolders.buildVolumeFolder}`,
|
||||
`/${CloudRunnerFolders.buildVolumeFolder}/`,
|
||||
cloudRunnerStepState.environment,
|
||||
[...cloudRunnerStepState.environment, { name: `LOCKED_WORKSPACE`, value: workspace }],
|
||||
cloudRunnerStepState.secrets,
|
||||
);
|
||||
if (!CloudRunner.buildParameters.isCliMode) core.endGroup();
|
||||
|
|
|
|||
Loading…
Reference in New Issue