Skip to content

Commit a9fb8c8

Browse files
authored
Optimize startup time (#223)
* added startup optimization config * added startup optimization config * added startup optimization config
1 parent 5974e88 commit a9fb8c8

File tree

4 files changed

+43
-23
lines changed

4 files changed

+43
-23
lines changed

action.yml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,19 @@ inputs:
7474
Specifies the market (purchasing) option for the instance:
7575
- 'spot' - Use a spot instance
7676
required: false
77-
77+
startup-quiet-period-seconds:
78+
description: >-
79+
Specifies the quiet period in seconds after the instance starts.
80+
The runner will not be registered during this period.
81+
required: false
82+
startup-retry-interval-seconds:
83+
description: >-
84+
Specifies the retry interval in seconds to register the runner after the quiet period.
85+
required: false
86+
startup-timeout-seconds:
87+
description: >-
88+
Specifies the timeout in seconds to register the runner after the quiet period.
89+
required: false
7890
outputs:
7991
label:
8092
description: >-

dist/index.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -145145,18 +145145,21 @@ const github = __nccwpck_require__(5438);
145145145145
class Config {
145146145146
constructor() {
145147145147
this.input = {
145148-
mode: core.getInput('mode'),
145149-
githubToken: core.getInput('github-token'),
145150145148
ec2ImageId: core.getInput('ec2-image-id'),
145151-
ec2InstanceType: core.getInput('ec2-instance-type'),
145152-
subnetId: core.getInput('subnet-id'),
145153-
securityGroupId: core.getInput('security-group-id'),
145154-
label: core.getInput('label'),
145155145149
ec2InstanceId: core.getInput('ec2-instance-id'),
145150+
ec2InstanceType: core.getInput('ec2-instance-type'),
145151+
githubToken: core.getInput('github-token'),
145156145152
iamRoleName: core.getInput('iam-role-name'),
145157-
runnerHomeDir: core.getInput('runner-home-dir'),
145158-
preRunnerScript: core.getInput('pre-runner-script'),
145153+
label: core.getInput('label'),
145159145154
marketType: core.getInput('market-type'),
145155+
mode: core.getInput('mode'),
145156+
preRunnerScript: core.getInput('pre-runner-script'),
145157+
runnerHomeDir: core.getInput('runner-home-dir'),
145158+
securityGroupId: core.getInput('security-group-id'),
145159+
startupQuietPeriodSeconds: core.getInput('startup-quiet-period-seconds'),
145160+
startupRetryIntervalSeconds: core.getInput('startup-retry-interval-seconds'),
145161+
startupTimeoutMinutes: core.getInput('startup-timeout-minutes'),
145162+
subnetId: core.getInput('subnet-id'),
145160145163
};
145161145164

145162145165
const tags = JSON.parse(core.getInput('aws-resource-tags'));
@@ -145277,9 +145280,10 @@ async function removeRunner() {
145277145280
}
145278145281

145279145282
async function waitForRunnerRegistered(label) {
145280-
const timeoutMinutes = 5;
145281-
const retryIntervalSeconds = 10;
145282-
const quietPeriodSeconds = 30;
145283+
const timeoutMinutes = config.input.startupTimeoutMinutes ? config.input.startupTimeoutMinutes : 5;
145284+
const retryIntervalSeconds = config.input.startupRetryIntervalSeconds ? config.input.startupRetryIntervalSeconds : 10;
145285+
const quietPeriodSeconds = config.input.startupQuietPeriodSeconds ? config.input.startupQuietPeriodSeconds : 30;
145286+
145283145287
let waitSeconds = 0;
145284145288

145285145289
core.info(`Waiting ${quietPeriodSeconds}s for the AWS EC2 instance to be registered in GitHub as a new self-hosted runner`);

src/config.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@ const github = require('@actions/github');
44
class Config {
55
constructor() {
66
this.input = {
7-
mode: core.getInput('mode'),
8-
githubToken: core.getInput('github-token'),
97
ec2ImageId: core.getInput('ec2-image-id'),
10-
ec2InstanceType: core.getInput('ec2-instance-type'),
11-
subnetId: core.getInput('subnet-id'),
12-
securityGroupId: core.getInput('security-group-id'),
13-
label: core.getInput('label'),
148
ec2InstanceId: core.getInput('ec2-instance-id'),
9+
ec2InstanceType: core.getInput('ec2-instance-type'),
10+
githubToken: core.getInput('github-token'),
1511
iamRoleName: core.getInput('iam-role-name'),
16-
runnerHomeDir: core.getInput('runner-home-dir'),
17-
preRunnerScript: core.getInput('pre-runner-script'),
12+
label: core.getInput('label'),
1813
marketType: core.getInput('market-type'),
14+
mode: core.getInput('mode'),
15+
preRunnerScript: core.getInput('pre-runner-script'),
16+
runnerHomeDir: core.getInput('runner-home-dir'),
17+
securityGroupId: core.getInput('security-group-id'),
18+
startupQuietPeriodSeconds: core.getInput('startup-quiet-period-seconds'),
19+
startupRetryIntervalSeconds: core.getInput('startup-retry-interval-seconds'),
20+
startupTimeoutMinutes: core.getInput('startup-timeout-minutes'),
21+
subnetId: core.getInput('subnet-id'),
1922
};
2023

2124
const tags = JSON.parse(core.getInput('aws-resource-tags'));

src/gh.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ async function removeRunner() {
5252
}
5353

5454
async function waitForRunnerRegistered(label) {
55-
const timeoutMinutes = 5;
56-
const retryIntervalSeconds = 10;
57-
const quietPeriodSeconds = 30;
55+
const timeoutMinutes = config.input.startupTimeoutMinutes ? config.input.startupTimeoutMinutes : 5;
56+
const retryIntervalSeconds = config.input.startupRetryIntervalSeconds ? config.input.startupRetryIntervalSeconds : 10;
57+
const quietPeriodSeconds = config.input.startupQuietPeriodSeconds ? config.input.startupQuietPeriodSeconds : 30;
58+
5859
let waitSeconds = 0;
5960

6061
core.info(`Waiting ${quietPeriodSeconds}s for the AWS EC2 instance to be registered in GitHub as a new self-hosted runner`);

0 commit comments

Comments
 (0)