GitHub Actions: "Unrecognized named-value" in action.yml ("Failed to load")
The file in the message is the action's own metadata, not your workflow. The runner parses every ${{ }} it finds in action.yml, and each key there may use only a few contexts. One expression in the wrong place, often in a description, and the action cannot be loaded at all.
What it looks like
Download action repository 'octo-org/example-action@v1' (SHA:…) octo-org/example-action/v1/action.yml (Line: 77, Col: 18): Unrecognized named-value: 'github'. Located at position 1 within expression: github.workspace Failed to load octo-org/example-action/v1/action.yml
- An action from another repository is loaded in "Set up job", so the job fails before its first step, even when that step's
if:would have skipped it (envoy-ai ci-workflows #13). - A local action (
uses: ./…) is loaded when its step runs, so "Set up job" passes and that step fails (repo-platform #439). - Line and column point into
action.yml. "Position" counts inside the braces: intoJSON(steps)it is 8, because the function is fine and onlystepsis not.
1. An expression in a description
In the runner's schema for action files (action_yaml.json), name, description and the description of each input and output are plain strings with no contexts. The runner still parses ${{ }} in them, so any context there fails: github, runner, job, steps, inputs, secrets, vars. It is usually a usage example or a note about the default.
- setup-trivy v0.3.0 (June 2026) had
${{ runner.temp }}in an input description and failed to load in every workflow; v0.3.1 removed it. - membrowse-action v1.2.16 (October 20) had
${{ github.workspace }}in thesource_rootdescription. v1.2.17 replaced it with$GITHUB_WORKSPACE55 minutes later (#191), and projects such as meshtastic firmware pinned around it. - Khan/actions v4.0.0 spelled out a default that used
varsin a description (#466). - setup-tbzl v1.0.0 had
${{ steps.x.outputs.bazelrc }}in an example, one line above avalue:where the same syntax is correct (#15).
If you maintain the action, name the value without the braces (github.workspace, $GITHUB_WORKSPACE, "the job's status") or move the example to the README. If you only use it, pin the version before the change or the fixed one. A moving tag such as v1 recovers when the maintainer moves it.
2. vars or secrets inside a composite action
The contexts reference says: "The secrets context is not available for composite actions due to security reasons." vars is in none of the context lists in action_yaml.json either. ${{ vars.GHA_RUNNER }} in a shared action stopped its callers in "Set up job" (worker-actions #278), and ${{ vars.AGENT_DEBUG == 'true' }} kept a local action from loading (agentic-deployment-template #44). Take them as inputs, and let the workflow pass them:
# action.yml
inputs:
debug:
description: Print the full output
default: "false"
token:
description: Token for the deploy API
required: true
runs:
using: composite
steps:
- run: ./deploy.sh
shell: bash
env:
DEBUG: ${{ inputs.debug }}
TOKEN: ${{ inputs.token }}
# the workflow
- uses: octo-org/example-action@v1
with:
debug: ${{ vars.AGENT_DEBUG }}
token: ${{ secrets.DEPLOY_TOKEN }}
3. What each key can read
From action_yaml.json:
inputs.<id>.default:github,strategy,matrix,job,runnerandhashFiles(). Notinputs,stepsorenv, so one input's default cannot come from another input.- A composite step's
run,shell,name,working-directory,env,withandif:github,inputs,strategy,matrix,steps,job,runner,envandhashFiles(), and inifalsosuccess(),failure(),always()andcancelled(). - A composite step's
usesandid: nothing, souses: ${{ inputs.action }}cannot work. outputs.<id>.value:github,strategy,matrix,steps,inputs,job,runnerandenv.- A Docker action's
runs.argsandruns.env:inputsonly.${{ env.ACTIONS_ID_TOKEN_REQUEST_URL }}there broke every use of lgty-action (#20). name,description,using,main,image: nothing.
Catching it before a release
- Run the action from its own repository's CI with
uses: ./. That loads the file the same way, but only for steps that actually run: withif: falsenothing is loaded (repo-platform #439). - Add a test that reads every
action.ymland fails on${{in any description, as dd-ci-standards #64 did. A YAML parser handles folded descriptions that a line-by-line search can miss.
Telling it apart
- "Invalid workflow file" with "Unrecognized named-value", and a run with no jobs: the expression is in your workflow ("Invalid workflow file").
- "Unable to resolve action": the action itself was not found ("Unable to resolve action").
- "Failed to load" after "Required property is missing: shell": a composite step with
runneedsshell.
See failed jobs from IntelliJ IDEA
Pipeline Inbox for GitHub Actions Workflows, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, lists the runs of all your repositories in an IDE tool window, with their jobs and steps, and your current branch's runs are in the status bar. Reading is free; re-running failed jobs, cancelling, running workflows and reviewing deployments are Pro (US$1.50 a month, with a 30-day trial).
GitHub and GitHub Actions are trademarks of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with, sponsored or endorsed by GitHub, Inc. or JetBrains.
More: "Invalid workflow file" · "Unable to resolve action" · The "Unexpected input(s)" warning · GitHub Actions plugins for IntelliJ IDEA compared · 日本語