GitHub Actions live
Gitstalk runs the .github/workflows/*.yml files you already have,
unchanged, on Cloudflare Containers. A repository moved from GitHub keeps its CI and its
deploys.
Quickstart
You do not configure anything. Add a workflow the way you would on GitHub, and Gitstalk starts it when your work reaches the stalk.
-
Add a workflow
Put a normal workflow file in the repository.
.github/workflows/ci.yml name: ci on: push: branches: [main] workflow_dispatch: jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 24, cache: npm } - run: npm ci - run: npm test -
Push it as a bean
Beans are branches named
bean/<name>. The workflow file is part of the change like any other file.Terminal git push -o wait origin HEAD:refs/heads/bean/add-ci -
The bean lands, then the stalk moves
The pre-land check passes and the bean lands on the sprout. When validation promotes the sprout, the stalk moves. On Gitstalk the stalk is your
main. -
The run starts
A stalk move is a
pushtomain, soci.ymlstarts. Open the repository's Automations tab and its Actions view to watch it, or press Run workflow to start it by hand.
- testdone, 21 s
- buildrunning
- deploywaiting
[Run npm run build] > api@1.4.0 build [Run npm run build] compiled 212 modules [Run npm run build] uploading with token ***
needs. The log streams while the job runs, folds by
step and shows secrets as ***.
What works today
Runs now live
Runs on a stalk move, Run workflow and schedules. Each job gets its own
fresh Cloudflare Container, destroyed when the job ends. Logs stream to the run
page. Secrets are masked. Jobs with id-token: write get OIDC tokens on
the hosted service.
Not yet planned
pull_request and merge_group events, other caches and
artifacts that outlive a job, and the GitHub REST API through
GITHUB_TOKEN. Runners other than one Ubuntu container size (see
Runners). Concurrency groups are not enforced.
A small Node job (checkout, setup-node, npm test) took about 20 s end to
end on the hosted service with the
dependency cache.
When workflows run
| GitHub event | On Gitstalk | Status |
|---|---|---|
push to main |
The stalk moved. main, stalk and your default branch
name it, so branches: [main] keeps working.
|
live |
workflow_dispatch |
The Run workflow button or an MCP call, with typed inputs. | live |
schedule |
Cron in UTC, at least 5 minutes apart, read from the stalk. | live |
pull_request |
Parsed, reported as "not started yet". Planned: it will run on the bean squashed onto the sprout. | planned |
merge_group |
Parsed, not started. Planned: the sprout's validation. | planned |
push to tags, repository_dispatch,
workflow_run, workflow_call
|
Parsed and reported as "not started yet". | planned |
Compatibility report
Gitstalk reads each workflow file with GitHub's own parser and expression library. The workflow's page lists what will not run exactly as written, and the Actions view counts the workflows that have notes. Each note says it runs differently (with the difference) or never runs here (with the reason). Everything else runs.
What runs
| Feature | Result |
|---|---|
Jobs, needs, if, outputs, run steps,
timeout-minutes, permissions, secrets,
vars
|
Runs |
JavaScript and composite actions, unmodified actions/checkout
|
Runs |
| Matrices | Runs, up to 16 legs per job |
actions/setup-node with cache:, and
actions/cache of node_modules
|
Runs differently: they become the dependency cache |
| Other caches and artifacts | Runs differently: they last one job, not across jobs |
timeout-minutes over the limit |
Runs differently: capped at 60 minutes |
environment: and its approvals |
Runs differently: ignored, and the report says so |
concurrency: |
Runs differently: groups are not enforced; the repository runs at most 4 jobs at once |
Docker actions, container:, services: |
Runs differently: Docker runs inside the job container; see Docker inside a job. beta Not yet verified on the hosted service. |
Reusable workflows (uses: on a job) |
planned Not run yet |
runs-on |
ubuntu-latest, ubuntu-24.04 and
ubuntu-22.04 run, all on one Ubuntu 24.04 image. Anything else
never runs. See Runners.
|
| Events for things Gitstalk does not have (issues, releases) | Never runs |
Job token and OIDC
Each job gets a short-lived token bound to its repository. It is revoked when the job ends and expires on its own shortly after the job's timeout. It can always read the repository.
-
permissions: contents: writelets the token pushbean/*branches only. Pushes to the sprout, the stalk andmainare refused for every credential, so code a job writes still goes through the pre-land check. -
permissions: id-token: writegives the job a GitHub-shaped OIDC identity token from a Gitstalk issuer. Once you register the issuer, actions such asaws-actions/configure-aws-credentialsand Google's and Azure's equivalents work. Only stalk, dispatch and schedule runs get one; automation runs never do. A self-hosted deployment gives jobs a token only once its owner has set the OIDC keys.
From an agent
An agent connected over MCP runs the same loop you do. The tools are in the beta tool surface, so check the names against your connected server.
-
Push a bean
It adds or changes
.github/workflows/deploy.yml. When the bean reaches the stalk, the workflow runs. -
Wait for the run
actions_wait_for_runwith the bean holds until the runs the landing started finish. The default wait is 600 seconds and the most is 1,800. It answers each run's conclusion and, for a failure, the failing step and the last lines of its log. -
Read the log
actions_job_logreads more: the newest lines, or only lines matching some text, with secrets already masked. -
Fix and repeat
The agent fixes the cause in a new bean, pushes, and waits again.
| Tool | Needs |
|---|---|
actions_workflow_list, actions_run_list,
actions_run_get, actions_job_log,
actions_wait_for_run, actions_config_list,
automation_get
|
Any agent session, with any role that reads the repository |
actions_dispatch, actions_rerun (the whole run, same
commit and inputs), actions_cancel, automation_run
|
The write scope and the maintain role |
Setting secrets from an agent is covered in Secrets and variables.
Related pages
Runners: where jobs run
The container each job gets: its image, size, network and limits.
Secrets and variables
Credentials, plain configuration and who gets which.
Dependency cache
Start installs from a full node_modules.
Environment variables
Where to set one, and what a run sees.
Limits and plans
Minutes, timeouts and every other number.