Windows runners for GitHub Actions

Run GitHub Actions jobs on Windows Server 2025 machines in your own AWS account: the label, the sizes, prices beside GitHub's, and what differs from Linux.

A job that says runs-on: superci-windows gets a Windows Server 2025 machine in your own AWS account, for that job alone.

jobs:
  test:
    runs-on: superci-windows
    steps:
      - uses: actions/checkout@v5
      - run: dotnet test

Sizes

superci-windows is 4 CPUs and 8 GB. Add parts to the label for more:

LabelMachine
superci-windows4 CPUs, 8 GB
superci-windows-8cpu8 CPUs, 32 GB
superci-windows-16cpu16 CPUs, 64 GB
superci-windows-32cpu-ondemand32 CPUs, 128 GB, never a spot machine

Every Windows machine has a 100 GB disk, or more if the label asks: superci-windows-200disk.

What it costs

Windows machines are spot machines by default, at AWS’s spot price for Windows, which includes the Windows licence. A minute on a machine with the memory of GitHub’s runner (4 GB for each CPU), with the disk and public address counted in:

CPUsGitHub-hostedAWS spotAWS on-demand
2$0.010$0.0020$0.0038
4$0.022$0.0037$0.0074
8$0.042$0.0072$0.015
16$0.082$0.014$0.029
32$0.162$0.028$0.057

AWS’s prices are for us-east-1 on 12 October 2026; spot prices move through the day. At 4 CPUs the row is superci-windows-4cpu, with 16 GB like GitHub’s; superci-windows alone has 8 GB. The calculator works out a month.

What differs from Linux

  • Only AWS. Cloudflare and Modal run Linux, so they are passed by for a Windows job.
  • x64, and no GPUs. superci-windows-arm64 and superci-windows-gpu are refused with a message.
  • It starts more slowly. A Windows machine took about a minute and three quarters to start when we measured, against about 15 seconds for Linux. For a job of a few seconds, GitHub’s own Windows runner is the quicker choice.
  • What a job finds: Windows Server 2025 with the tools of GitHub’s own windows-2025 runner, from the public images RunsOn publishes. RunsOn calls them mostly compatible with GitHub’s.
  • GitLab CI jobs do not run on Windows: SuperCI runs them in Docker, on Linux.

When AWS takes the machine back

It is the same as on Linux: the job fails at once, and SuperCI runs it again, off spot, once its run has finished. Spot machines has the whole of it. A job that must not run twice asks for superci-windows-ondemand.

One workflow, both systems

jobs:
  test:
    strategy:
      matrix:
        runner: [superci, superci-windows]
    runs-on: ${{ matrix.runner }}
    steps:
      - uses: actions/checkout@v5
      - run: npm test