diff --git a/README.md b/README.md index e3b4e890..ceca1557 100644 --- a/README.md +++ b/README.md @@ -206,7 +206,9 @@ Now you're ready to go! | `aws-resource-tags` | Optional. Used only with the `start` mode. | Specifies tags to add to the EC2 instance and any attached storage. <br><br> This field is a stringified JSON array of tag objects, each containing a `Key` and `Value` field (see example below). <br><br> Setting this requires additional AWS permissions for the role launching the instance (see above). | | `runner-home-dir` | Optional. Used only with the `start` mode. | Specifies a directory where pre-installed actions-runner software and scripts are located.<br><br> | | `pre-runner-script` | Optional. Used only with the `start` mode. | Specifies bash commands to run before the runner starts. It's useful for installing dependencies with apt-get, yum, dnf, etc. For example:<pre> - name: Start EC2 runner<br> with:<br> mode: start<br> ...<br> pre-runner-script: \|<br> sudo yum update -y && \ <br> sudo yum install docker git libicu -y<br> sudo systemctl enable docker</pre> -<br><br> | +`key-name` | Optional. Used only with the `start` mode. | Specifies SSH key-pair name to assign to an instance. This is useful for SSHing into an instance for debugging.<br><br> | +| `block-device-mapping` | Optional. Used only with the `start` mode. | JSON string specifying the [BlockDeviceMapping](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html). For example:<pre> block-device-mapper: \|<br> [<br> {"DeviceName" : "/dev/sda1", "Ebs" : { "VolumeType": "gp2", "VolumeSize": 34 }},<br> {"DeviceName" : "/dev/sdb", "VirtualName": "ephemeral0" }<br> ] +</pre>| ### Environment variables @@ -263,6 +265,12 @@ jobs: {"Key": "Name", "Value": "ec2-github-runner"}, {"Key": "GitHubRepository", "Value": "${{ github.repository }}"} ] + key-name: my-ssh-key # optional + block-device-mapper: | # optional + [ + {"DeviceName" : "/dev/sda1", "Ebs" : { "VolumeType": "gp2", "VolumeSize": 34 }}, + {"DeviceName" : "/dev/sdb", "VirtualName": "ephemeral0" } + ] do-the-job: name: Do the job on the runner needs: start-runner # required to start the main job when the runner is ready diff --git a/action.yml b/action.yml index 09fa9591..218783e4 100644 --- a/action.yml +++ b/action.yml @@ -69,6 +69,15 @@ inputs: description: >- Specifies bash commands to run before the runner starts. It's useful for installing dependencies with apt-get, yum, dnf, etc. required: false + block-device-mapping: + description: >- + JSON string of EC2 BlockDeviceMapping (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-blockdev-mapping.html). + required: false + default: '[]' + key-name: + description: >- + Assign SSH key-pair name to an instance. This can be useful for SSHing into an instance for debugging. + required: false outputs: label: diff --git a/dist/index.js b/dist/index.js index 409180d4..43706a3d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -62847,6 +62847,8 @@ async function startEc2Instance(label, githubRegistrationToken) { SecurityGroupIds: [config.input.securityGroupId], IamInstanceProfile: { Name: config.input.iamRoleName }, TagSpecifications: config.tagSpecifications, + BlockDeviceMappings: config.input.blockDeviceMappings, + KeyName: config.input.keyName, }; try { @@ -62923,6 +62925,8 @@ class Config { iamRoleName: core.getInput('iam-role-name'), runnerHomeDir: core.getInput('runner-home-dir'), preRunnerScript: core.getInput('pre-runner-script'), + blockDeviceMappings: JSON.parse(core.getInput('block-device-mapping')), + keyName: core.getInput('key-name'), }; const tags = JSON.parse(core.getInput('aws-resource-tags')); diff --git a/src/aws.js b/src/aws.js index bcf53646..89f97eca 100644 --- a/src/aws.js +++ b/src/aws.js @@ -47,6 +47,8 @@ async function startEc2Instance(label, githubRegistrationToken) { SecurityGroupIds: [config.input.securityGroupId], IamInstanceProfile: { Name: config.input.iamRoleName }, TagSpecifications: config.tagSpecifications, + BlockDeviceMappings: config.input.blockDeviceMappings, + KeyName: config.input.keyName, }; try { diff --git a/src/config.js b/src/config.js index 1100f51e..cb636a62 100644 --- a/src/config.js +++ b/src/config.js @@ -15,6 +15,8 @@ class Config { iamRoleName: core.getInput('iam-role-name'), runnerHomeDir: core.getInput('runner-home-dir'), preRunnerScript: core.getInput('pre-runner-script'), + blockDeviceMappings: JSON.parse(core.getInput('block-device-mapping')), + keyName: core.getInput('key-name'), }; const tags = JSON.parse(core.getInput('aws-resource-tags'));