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