Depot CI
Jobs authenticate as the GitHub repository they ran from.
Jobs authenticate as the GitHub repository they ran from.
Identity proof
The token has to come from https://identity.depot.dev, and its repository_id claim has to match the workload you named. We compare that claim byte for byte, with no wildcards.
repository_id is matched rather than sub, which on this platform does not name the workload in a form you can pin.
Every token also has to name your workspace as its audience. Ask for this audience and no other. A token requested for two audiences fails every exchange.
Console fields
| Field | Example | Advanced | What it pins |
|---|---|---|---|
| Repository ID | 123456789 | no | gh api repos/<owner>/<repo> --jq .id. It survives a rename. Every branch, pull request and workflow of the repository matches. |
The console also asks which project and environment this identity reaches and which role it gets, with the credential lifetime behind Advanced.
Trust
Built from the example answers above:
| What | Value |
|---|---|
| Issuer | https://identity.depot.dev |
| Claim compared | repository_id |
| Subject | 123456789 |
| Identity name | depot-123456789 |
We name the identity for you, so the form never asks for one.
Console snippet
permissions:
id-token: write # without this, no token is issued at all
steps:
- run: |
T=$(curl -sS \
-H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
"$ACTIONS_ID_TOKEN_REQUEST_URL&audience=YOUR_WORKSPACE_ID" | jq -r .value)
C=$(curl -sS "https://penv.cloud/api/v1/auth/oidc" \
-H 'content-type: application/json' \
-d "{\"token\":\"$T\"}" | jq -r .credential)
PENV_TOKEN="$C" penv pullThe snippet finishes with penv pull, which writes a file. We recommend penv run for a process; penv pull is for a host that needs a file on disk. Connect your CI has the wrapped step.
Related
- Machine identity
- Connect a Platform in the console
- Depot CI documentation: the subject is the value most often set wrong