Skip to content

Commit

Permalink
rollback change but keep runner check
Browse files Browse the repository at this point in the history
  • Loading branch information
ludamad committed Apr 16, 2024
1 parent b1beb2f commit 88099b7
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 27 deletions.
15 changes: 10 additions & 5 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "";
Expand All @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
61 changes: 39 additions & 22 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -85,24 +100,26 @@ 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);
}
}

(async function () {
try {
start();
} catch (error) {
stop()
stop();
assertIsError(error);
core.error(error);
core.setFailed(error.message);
Expand Down

0 comments on commit 88099b7

Please sign in to comment.