Depot CI

Depot CI compatibility with GitHub Actions

Depot CI executes GitHub Actions YAML workflows. The following tables list GitHub Actions syntax, triggers, and configuration and whether they're supported in Depot CI.

Workflow-level configuration

FieldPurposeSupported
nameWorkflow display name
run-nameDynamic run title
onWorkflow triggers
on.workflow_callReusable workflow definition
on.workflow_call.inputsReusable workflow inputs
permissionsToken scopes
envWorkflow environment variables
defaultsDefault settings (shell, working-directory)
concurrencyConcurrency control
jobsJobs definition

Triggers (on.*)

FieldEvent typeSupported
on.<event_name>Event triggers
on.<event_name>.typesEvent trigger types
on.merge_groupMerge queue triggers
on.push.branchesPush branch filters
on.push.tagsPush tag filters
on.pull_requestPull request triggers
on.pull_request.branchesPR branch filters
on.pull_request_targetPull request triggers from the base branch context
on.*.pathsPath filters
on.scheduleCron schedule triggers
on.workflow_call.inputs.*Reusable workflow inputs (type, default, required)
on.workflow_call.outputsReusable workflow outputs
on.workflow_call.secretsReusable workflow secrets definition
on.workflow_runWorkflow run triggers
on.workflow_dispatchManual dispatch triggers
on.workflow_dispatch.inputsManual dispatch inputs

Job-level configuration (jobs.<job_id>.*)

FieldPurposeSupportedNotes
jobs.<job_id>Job definition
jobs.<job_id>.nameJob display name
jobs.<job_id>.needsJob dependencies / DAG
jobs.<job_id>.ifConditional job execution
jobs.<job_id>.runs-onRunner selectionWe respect Depot runner labels and treat non-Depot labels as depot-ubuntu-latest.
jobs.<job_id>.permissionsJob-scoped permissions
jobs.<job_id>.environmentDeployment environments
jobs.<job_id>.concurrencyJob-level concurrency
jobs.<job_id>.outputsJob outputs / cross-job data
jobs.<job_id>.envJob environment variables
jobs.<job_id>.defaultsJob default settings
jobs.<job_id>.timeout-minutesJob timeout
jobs.<job_id>.strategyMatrix strategy
jobs.<job_id>.[strategy.fail]Matrix fail-fast
jobs.<job_id>.strategy.max-parallelMatrix parallel limit
jobs.<job_id>.continue-on-errorAllow job failure
jobs.<job_id>.containerJob container
jobs.<job_id>.servicesService containers
jobs.<job_id>.usesReusable workflow call
jobs.<job_id>.withReusable workflow inputs
jobs.<job_id>.secretsReusable workflow secrets
jobs.<job_id>.secrets.inheritInherit all secrets
jobs.<job_id>.stepsStep definitions
jobs.<job_id>.snapshotCustom runner images (larger runners)See Build and use custom images with Depot CI

Step-level configuration

FieldPurposeSupported
steps[*].idStep identifier
steps[*].nameStep display name
steps[*].ifConditional step execution
steps[*].usesAction reference
steps[*].runShell command execution
steps[*].shellShell type (bash, pwsh, python)
steps[*].withAction inputs
steps[*].envStep environment variables
steps[*].working-directoryStep working directory
steps[*].continue-on-errorAllow step failure
steps[*].timeout-minutesStep timeout

Expressions

Contexts

ContextPurposeSupported
githubEvent payload, repo, actor
envEnvironment variables
varsRepository/org variables
secretsSecret values
needsDependent job outputs
strategyMatrix strategy info
matrixCurrent matrix values
stepsPrior step outputs
jobCurrent job info
runnerRunner info
inputsWorkflow inputs

Functions

FunctionPurposeSupported
always()Run regardless of status
success()Run if no failures
failure()Run if any failure
cancelled()Run if cancelled
case()Conditional value select
hashFiles()File hashing for caching
contains()String/array contains
startsWith()String prefix check
endsWith()String suffix check
format()String formatting
join()Array to string
toJSON()Object to JSON
fromJSON()JSON to object

Action types

TypeDescriptionSupported
JavaScriptNode 12/16/20/24 actions
CompositeComposite actions
DockerContainer actions

GitHub checks

Depot CI automatically reports GitHub checks for each job in a workflow run. For more information, see GitHub checks.

Limitations

GitHub-only event triggers

The following events are GitHub-specific concepts that aren't applicable to Depot CI workflows, such as Issues, Discussions, and Pages.

FieldEvent typeSupported
on.branch_protection_ruleGitHub specific event trigger
on.check_runGitHub specific event trigger
on.check_suiteGitHub specific event trigger
on.createGitHub specific event trigger
on.deleteGitHub specific event trigger
on.deploymentGitHub specific event trigger
on.deployment_statusGitHub specific event trigger
on.discussionGitHub specific event trigger
on.discussion_commentGitHub specific event trigger
on.forkGitHub specific event trigger
on.gollumGitHub specific event trigger
on.image_versionGitHub specific event trigger
on.issue_commentGitHub specific event trigger
on.issuesGitHub specific event trigger
on.labelGitHub specific event trigger
on.milestoneGitHub specific event trigger
on.page_buildGitHub specific event trigger
on.publicGitHub specific event trigger
on.pull_request_commentGitHub specific event trigger
on.pull_request_reviewGitHub specific event trigger
on.pull_request_review_commentGitHub specific event trigger
on.registry_packageGitHub specific event trigger
on.releaseGitHub specific event trigger
on.repository_dispatchGitHub specific event trigger
on.statusGitHub specific event trigger
on.watchGitHub specific event trigger

Reusable workflows from other repositories

The uses key for referencing workflows from other repositories is not supported. You can still use uses to reference actions from the GitHub Actions Marketplace (for example, uses: actions/checkout@v4).

Pull request workflows triggered from forks

GitHub allows pull_request and pull_request_target workflows to run when triggered from forked repositories. Support for this is planned.

Snapshotting and custom runner images

Custom runner images via the snapshot field aren't supported. You can still build and use custom images on Depot CI.

Runner labels

Only Depot runs-on labels are supported. Nonstandard labels become depot-ubuntu-latest and expressions are preserved as-is. For Depot CI sandbox sizes and labels, see Depot CI sandboxes.

Permissions

The following permissions are supported: actions, checks, contents, id-token, metadata, pull_requests, statuses, workflows.

GitHub Packages authentication

Pushing and pulling from GitHub Packages registries using secrets.GITHUB_TOKEN doesn't work in Depot CI. GitHub's package registry servers only accept personal access tokens for authentication, not GitHub App tokens. This is a known GitHub limitation (see discussions: Read GitHub Packages permission for GitHub App and Using GitHub Packages with GitHub Apps).

For container images, you can use another registry instead, such as Depot Registry. When using depot/build-push-action, replace the GHCR login and push steps with the save input:

- uses: depot/build-push-action@v1
  with:
    context: .
    project: <your-depot-project-id>
    save: true
    save-tags: |
      latest
      ${{ github.sha }}

See the Depot Registry quickstart for pulling images and other usage.

This limitation applies to all GitHub Packages registries, not just the container registry. If you need to keep using a GitHub Packages registry, you can authenticate with a GitHub personal access token with write:packages scope, stored as a Depot CI secret.

Note that a PAT is a long-lived credential scoped to a user account, so consider the security implications of storing and rotating it.