diff --git a/dist/index.js b/dist/index.js index abff8f4..862f7a9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1031,8 +1031,10 @@ function start() { } } const instances = yield ec2Client.getInstancesForTags(); - if (ghClient.hasRunner[config.githubJobId]) { - core.info(`Workers already running. Continuing as we can target it with jobs.`); + const hasInstance = instances.filter((i) => { var _a; return ((_a = i.State) === null || _a === void 0 ? void 0 : _a.Name) === "running"; }).length > 0; + if (hasInstance) { + core.info(`Runner already running. Continuing as we can target it with jobs.`); + yield ghClient.pollForRunnerCreation([config.githubJobId]); return; } var instanceId = ""; @@ -1042,14 +1044,17 @@ function start() { const instanceConfig = yield ec2Client.getInstanceConfiguration(ec2Strategy); try { // Start instance - const response = (yield ec2Client.runInstances(instanceConfig)); + const response = yield ec2Client.runInstances(instanceConfig); if ((response === null || response === void 0 ? void 0 : response.length) && response.length > 0 && response[0].InstanceId) { instanceId = response[0].InstanceId; break; } } catch (error) { - if ((error === null || error === void 0 ? void 0 : error.code) && error.code === "InsufficientInstanceCapacity" && ec2SpotStrategies.length > 0 && ec2Strategy.toLocaleUpperCase() != "none") + if ((error === null || error === void 0 ? void 0 : error.code) && + error.code === "InsufficientInstanceCapacity" && + ec2SpotStrategies.length > 0 && + ec2Strategy.toLocaleUpperCase() != "none") core.info("Failed to create instance due to 'InsufficientInstanceCapacity', trying fallback strategy next"); else throw error; @@ -1077,7 +1082,7 @@ function stop() { const ec2Client = new ec2_1.Ec2Instance(config); const ghClient = new github_1.GithubClient(config); const instances = yield ec2Client.getInstancesForTags(); - yield ec2Client.terminateInstances(instances.map(i => i.InstanceId)); + yield ec2Client.terminateInstances(instances.map((i) => i.InstanceId)); core.info("Clearing previously installed runners"); const result = yield ghClient.removeRunnersWithLabels([config.githubJobId]); if (result) { diff --git a/src/main.ts b/src/main.ts index c77cecb..612b9f8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -23,54 +23,69 @@ async function start() { var ec2SpotStrategies: string[]; switch (config.ec2SpotInstanceStrategy) { case "maxperformance": { - ec2SpotStrategies = ["MaxPerformance", "SpotOnly"] - core.info("Ec2 spot instance strategy is set to 'MaxPerformance' with 'SpotOnly' and 'None' as fallback"); + ec2SpotStrategies = ["MaxPerformance", "SpotOnly"]; + core.info( + "Ec2 spot instance strategy is set to 'MaxPerformance' with 'SpotOnly' and 'None' as fallback" + ); break; } case "besteffort": { - ec2SpotStrategies = ["BestEffort", "none"] - core.info("Ec2 spot instance strategy is set to 'BestEffort' with 'None' as fallback"); + ec2SpotStrategies = ["BestEffort", "none"]; + core.info( + "Ec2 spot instance strategy is set to 'BestEffort' with 'None' as fallback" + ); break; } default: { - ec2SpotStrategies = [config.ec2SpotInstanceStrategy] - core.info(`Ec2 spot instance strategy is set to ${config.ec2SpotInstanceStrategy}`); + ec2SpotStrategies = [config.ec2SpotInstanceStrategy]; + core.info( + `Ec2 spot instance strategy is set to ${config.ec2SpotInstanceStrategy}` + ); } } const instances = await ec2Client.getInstancesForTags(); - if (ghClient.hasRunner[config.githubJobId]) { + const hasInstance = + instances.filter((i) => i.State?.Name === "running").length > 0; + if (hasInstance) { core.info( - `Workers already running. Continuing as we can target it with jobs.` + `Runner already running. Continuing as we can target it with jobs.` ); + await ghClient.pollForRunnerCreation([config.githubJobId]); return; } var instanceId = ""; for (const ec2Strategy of ec2SpotStrategies) { core.info(`Starting instance with ${ec2Strategy} strategy`); // Get instance config - const instanceConfig = await ec2Client.getInstanceConfiguration(ec2Strategy); + const instanceConfig = await ec2Client.getInstanceConfiguration( + ec2Strategy + ); try { // Start instance - const response = (await ec2Client.runInstances(instanceConfig)) + const response = await ec2Client.runInstances(instanceConfig); if (response?.length && response.length > 0 && response[0].InstanceId) { - instanceId = response[0].InstanceId + instanceId = response[0].InstanceId; break; } } catch (error) { - if (error?.code && error.code === "InsufficientInstanceCapacity" && ec2SpotStrategies.length > 0 && ec2Strategy.toLocaleUpperCase() != "none") - core.info("Failed to create instance due to 'InsufficientInstanceCapacity', trying fallback strategy next"); - else - throw error; + if ( + error?.code && + error.code === "InsufficientInstanceCapacity" && + ec2SpotStrategies.length > 0 && + ec2Strategy.toLocaleUpperCase() != "none" + ) + core.info( + "Failed to create instance due to 'InsufficientInstanceCapacity', trying fallback strategy next" + ); + else throw error; } } - if (instanceId) await ec2Client.waitForInstanceRunningStatus(instanceId); else { core.error("Failed to get ID of running instance"); throw Error("Failed to get ID of running instance"); } - if (instanceId) await ghClient.pollForRunnerCreation([config.githubJobId]); else { core.error("Instance failed to register with Github Actions"); @@ -85,16 +100,18 @@ async function stop() { const ec2Client = new Ec2Instance(config); const ghClient = new GithubClient(config); const instances = await ec2Client.getInstancesForTags(); - await ec2Client.terminateInstances(instances.map(i => i.InstanceId!)); + await ec2Client.terminateInstances(instances.map((i) => i.InstanceId!)); core.info("Clearing previously installed runners"); const result = await ghClient.removeRunnersWithLabels([config.githubJobId]); if (result) { core.info("Finished runner cleanup"); } else { - throw Error("Failed to cleanup runners. Continuing, but failure expected!"); + throw Error( + "Failed to cleanup runners. Continuing, but failure expected!" + ); } - } catch(error){ - core.info(error) + } catch (error) { + core.info(error); } } @@ -102,7 +119,7 @@ async function stop() { try { start(); } catch (error) { - stop() + stop(); assertIsError(error); core.error(error); core.setFailed(error.message);