Skip to main content

GitHub workflows

run.cloud CI reads your repository at the commit SHA and claims jobs that opt in with:
Also accepted: run.cloud, run-cloud, or a list that includes one of those labels (for example [self-hosted, runcloud]). Every other job is ignored by run.cloud and can keep running on GitHub Actions as usual.

First workflow

Steps run under /bin/sh with a portable setup, so common images such as node:22 (Debian dash) work without requiring bash.

Why on: workflow_dispatch?

GitHub Actions does not know about a runcloud runner. If you set on: pull_request without care, Actions may show a job waiting for a self-hosted runner that will never start. run.cloud does not use GitHub Actions to schedule work. The GitHub App receives pull_request / push webhooks and runs opted-in jobs itself. Using workflow_dispatch (or another trigger that does not auto-queue on PR) keeps the Actions UI clean while run.cloud still executes checks on every relevant push and PR. Path filters for run.cloud are set with RUNCLOUD_PATHS (or native paths, see configuration), not only with GitHub’s on.paths.

Multi-step Node job

Working directory

Use working-directory on a step (or native workdir) for monorepo packages:

Multiple jobs

Each job becomes its own Check Run: run.cloud / unit, run.cloud / lint.
Job names must be unique across all workflow files and any native .runcloud/ci.yml.

Multi-line scripts

Path filters and skipped checks

When RUNCLOUD_PATHS (or job paths) is set and none of the changed files match, run.cloud still posts a Check Run with conclusion success and title Skipped. That keeps required checks from blocking unrelated PRs.
If you omit path filters, the job runs on every pull request and push that the App receives for that repository.

Images

Set the sandbox image with container: (string or { image: ... }) or native image::
The first time you use a given image, the job may take longer to become ready. Later runs with the same image are usually faster. See Custom images.

Branch protection

In GitHub → Settings → Branches → Branch protection rules, add required status checks such as:
  • run.cloud / unit
  • run.cloud / lint
Exact names match the job id (or job name: if set) after the run.cloud / prefix.

Re-running a check

Use Re-run on the Check Run in the GitHub UI. run.cloud receives the check_run re-request and enqueues that job again for the same SHA.

Common mistakes