Skip to content

Root volume configuration: volume-size / volume-type / iops / throughput inputs #44

Description

@kurok

Problem

The action offers no control over the root volume: instances inherit whatever the AMI's block device mapping says (Amazon Linux 2023 default: 8 GiB gp3). Docker-based CI eats that instantly — a couple of large images plus build cache and the job dies with no space left on device, one of the most common self-hosted-runner failures. The plumbing already half-exists: src/aws.js builds BlockDeviceMappings for the encrypt-ebs feature; sizing is a natural extension of the same code path.

Proposal

volume-size: 100        # GiB, optional — omitted = AMI default
volume-type: gp3        # optional: gp3 (recommended) | gp2 | io1 | io2
volume-iops: 4000       # optional, io/gp3 types
volume-throughput: 250  # optional, gp3 only (MiB/s)
  • Extends the existing root-device mapping builder (the encrypt-ebs one) so encryption + sizing compose in a single mapping — one code path, not two competing BlockDeviceMappings writers.
  • Validation at config parse: size ≥ AMI snapshot size (checked via the DescribeImages data already fetched for encryption), type/iops/throughput combinations valid per EBS rules (iops only for io*/gp3; throughput only gp3) — fail in seconds, not at RunInstances.
  • DeleteOnTermination: true always (ephemeral runners must not leak volumes — asserted, not assumed).

Acceptance criteria

  • Each input maps to the correct root-device Ebs fields; omitted inputs leave AMI defaults untouched (unit tests on the mapping builder, including the no-inputs regression: zero diff vs today).
  • Composes with encrypt-ebs: one mapping containing both encryption and size/type fields (test).
  • Validation matrix: size below snapshot → clear error with both numbers; invalid type/iops/throughput combos rejected naming the rule (table-driven).
  • DeleteOnTermination true in every generated mapping (explicit assertion).
  • README: inputs table + a "Disk space for Docker workloads" note with a recommended gp3 example; action.yml descriptions.
  • npm ci && npm run package dist committed; lint + unit tests green.

Out of scope

  • Additional (non-root) volumes and instance-store handling.
  • Filesystem-level setup (partitioning/mounting beyond the AMI default).

Part of the roadmap (see tracking issue). Small, self-contained, high frequency-of-pain — a good early ship.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmediumMedium priorityroadmapRoadmap item

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions