Getting started with Morph Actions
Morph Actions runs eligible GitHub Actions jobs on Morph-managed ephemeral
runners. GitHub remains the source of truth for workflows, triggers, and pull
request review. Morph provides repository onboarding, a reviewable runner-label
migration, dispatch for workflow_dispatch, and run evidence.
Choose a setup path:
- UI: follow this page in Morph Actions.
- Agent or CLI: use Headless onboarding and pause for the human GitHub approval step.
Read Security and exact verification before installing the App. The supported launch boundary is a private repository with trusted workflow authors. Public repositories and untrusted fork pull requests are blocked unless Morph introduces a separately reviewed opt-in.
Prerequisites
You need:
- a Morph organization and an administrator for its GitHub setup;
- a GitHub owner or repository administrator who can grant the Morph GitHub App access to the exact private repository;
- permission to review and merge a workflow pull request; and
- a private repository with trusted workflow authors.
Do not add Morph API keys or runner registration tokens to the repository.
UI quickstart
- Open Morph Actions and verify the active Morph organization.
- Start GitHub setup. The browser follows a short-lived Morph handoff bound to that organization and repository.
- In GitHub, install or update the Morph App and select the exact repository. Return to Morph. If linking was interrupted, preserve the installation and follow Troubleshooting.
- Select the repository and ask Morph to analyze its workflows.
- Review the proposed migration pull request. Morph performs supported
runs-onlabel rewrites; it does not prove that the workflow is safe. Check triggers, token permissions, secret use, third-party actions, containers/privileges, and every changed label set. Unsupported jobs remain unchanged for manual review. - Merge the reviewed pull request into the exact ref you will dispatch.
- Dispatch a bounded
workflow_dispatchsmoke. - Wait for Verified on the selected repository. A run merely appearing in the list is not completion.
Minimal first-run workflow
Use a dependency-free smoke so the first result tests assignment rather than checkout or package infrastructure:
name: Morph Actions smoke
on:
workflow_dispatch:
permissions:
contents: read
jobs:
smoke:
runs-on: [self-hosted, linux, x64, morph, small]
timeout-minutes: 10
steps:
- name: Confirm the runner environment
shell: bash
run: |
set -euo pipefail
test "$RUNNER_OS" = "Linux"
test -n "$RUNNER_NAME"
printf 'repository=%s run_id=%s job=%s\n' \
"$GITHUB_REPOSITORY" "$GITHUB_RUN_ID" "$GITHUB_JOB"
Commit and merge this workflow through your normal review path. Dispatch only
the merged ref. small is the intended first-run shape; choose a different
shape later from measured workload needs. Current plan and usage information
in the Morph console is the billing source of truth; this guide makes no
comparative pricing claim.
What Morph migration proves—and does not prove
The analyzer recognizes supported Linux/x64 runs-on forms and proposes the
Morph label set. Dynamic, reusable, incompatible, or otherwise unsupported
jobs stay unchanged. The result can warn about detectable triggers,
permissions, secrets, mutable action references, and unsupported labels, but
those warnings are not an exhaustive security review.
Before merging, inspect:
pull_requestand especiallypull_request_targettrust boundaries;GITHUB_TOKENpermissions and all secrets used by each changed job;- third-party actions and whether immutable commit pinning is appropriate;
- service containers, Docker,
sudo, network destinations, and privileged commands; and - every old and new
runs-onvalue, including jobs Morph left unchanged.
Exact first-run success
Onboarding is verified only when all of these refer to the selected repository and job:
- the Morph run status is
succeeded; - assignment state is
verified; - the expected GitHub job id is non-null;
- the actual GitHub job id is non-null and exactly equal to the expected id;
- GitHub reports that same job completed successfully.
The UI distinguishes pending, mismatch, orphaned, failed, and verified states. An unrelated run—even a successful verified run elsewhere in the Morph organization—cannot complete setup for the selected repository.