Kyora Docs

Use kyora for GitHub Actions

Run your GitHub Actions jobs on fresh kyora VMs by changing runs-on.

Every job gets a fresh VM with a just-in-time runner. It runs that one job and is destroyed after.

Connect a GitHub org

  1. Sign in to the kyora dashboard with GitHub, and add a card under Billing.
  2. Open CI and choose Connect a GitHub org. This installs the kyora GitHub App. Pick All repositories, or only the repositories CI should use. You need to be an owner of the GitHub org.
  3. GitHub sends you back to kyora, which checks the installation and that you own the org. Confirm, and the org shows up under the kyora account you were using (your own, or a kyora org you administer). That account is billed.

To add or remove repositories later, change the App's repository access on GitHub (org Settings → GitHub Apps → kyora → Configure). GitHub sends you back to kyora to sync them.

Change runs-on

jobs:
  test:
    runs-on: kyora
runs-onRunner
kyora4 vCPUs, 16 GB memory, 50 GB disk
kyora-8x168 vCPUs, 16 GB memory, 60 GB disk
kyora-8x16-100g8 vCPUs, 16 GB memory, 100 GB disk
kyora-4x8-eu4 vCPUs, 8 GB memory, 50 GB disk, in eu only
kyora-2x4-apac-us2 vCPUs, 4 GB memory, 50 GB disk, in apac, then us

Use kyora or one size label on its own, not both: a runs-on: kyora job can take the runner of a job that asks for kyora next to a size label, so that job waits for another.

The pattern is kyora-<vCPUs>x<memory GB>[-<disk GB>g][-<region>...]. vCPUs are 1 or an even number, up to 16. Memory goes up to 48 GB and disk up to 200 GB. Without a disk, a runner gets 50 GB up to 4 vCPUs, 60 GB up to 8 and 150 GB above. Without a region, a job runs wherever there is room. With regions (eu, us, apac), it runs only there, in that order, and waits for room rather than going elsewhere.

A label kyora can't serve (kyora-32x64, or an odd vCPU count) is refused, and the CI page says why.

The runners have no Docker. Jobs with services: or container:, and Docker-based actions, stay on ubuntu-latest.

Pull requests from forks

kyora never runs pull requests from forks. Send them to GitHub-hosted runners, so they don't wait for a runner that never comes:

jobs:
  test:
    runs-on: ${{ github.event.pull_request && github.event.pull_request.head.repo.full_name != github.repository && 'ubuntu-latest' || 'kyora' }}

Also set Settings → Actions → General → Approval for running fork pull request workflows from contributors to Require approval for all external contributors.

Caps

On the org's CI page you can cap how many runs, vCPUs and GB of memory your org uses at once. A job over a cap waits for a runner to finish. A runner larger than a cap still runs, alone. Without caps, an org runs up to 20 jobs at once.

Pricing

Runners are billed at kyora's VM rates for the time each VM runs, to the kyora account that connected the org. Each runner's disk is billed at 50 GB or more. A card is required: until one is on file, jobs wait and the CI page says so.

GitHub Free

GitHub Free orgs can't create runner groups, so kyora uses the org's Default runner group, and only when the App is installed on All repositories. Otherwise, install it on all repositories, or use the Team plan. For a public repository, an org owner turns on Settings → Actions → Runner groups → Default → Allow public repositories. kyora doesn't change it for you, and the CI page reminds you while it is off.

On this page