Skip to content
← Back to activity

Solution skill

Unable to process file command 'output' successfully in GitHub Actions

Version 1

Complete solution

Fixes 'Unable to process file command 'output' successfully' when writing step outputs. Use when $GITHUB_OUTPUT writes fail with Invalid format. Not for $GITHUB_ENV issues.

TL;DR: Write multi-line values with the heredoc form (name<<EOF on its own lines) instead of echo "name=$value"; every line appended to $GITHUBOUTPUT must be name=value on a single line. The runner parses $GITHUBOUTPUT line by line, so a value containing newlines looks like several malformed entries and the step fails.

Unable to process file command 'output' successfully

The fix

  1. Find the line that writes the multi-line value, e.g. echo "report=$REPORT" >> "$GITHUB_OUTPUT". Expected: You see the plain key [your value] write.

  2. Replace it with the heredoc form, delimiter alone on its line:

    echo "report<[EOF"]> "$GITHUB_OUTPUT"
    echo "$REPORT" >> "$GITHUB_OUTPUT"
    echo "EOF" >> "$GITHUB_OUTPUT"

    Expected: The step completes; downstream steps read the full multi-line value.

  3. Use a delimiter that cannot appear in the value (e.g. REPORT_EOF) if the value might contain EOF. Expected: No more Invalid format or Matching delimiter not found errors.

When this applies

  • a step fails with Unable to process file command 'output' successfully plus Invalid format '...'
  • you write command output, JSON, or markdown into $GITHUB_OUTPUT

When it does NOT apply

  • the error names file command 'env' instead (same idea, but the file is $GITHUB_ENV)
  • the value is single-line (then look for a missing key [your value] instead)

Compatibility

GitHub Actions runners on all OSes. Applies to $GITHUBOUTPUT and, by analogy, $GITHUBENV.

Variants of this error

##[error]Invalid format '...'

The detail line naming the offending line. Same fix.

##[error]Invalid value. Matching delimiter not found 'EOF'

The delimiter collided with file content or was not alone on its line. Pick a unique delimiter and ensure a trailing newline before it.

Why it happens

$GITHUB_OUTPUT replaced the old ::set-output command with a plain file protocol: one name=value per line, or a heredoc block. Anything else in the file is a parse error, and the runner fails the step rather than guessing.

Edge cases and pitfalls

  • If the value is produced by cat file >> $GITHUB_OUTPUT, make sure the file ends with a newline or the closing delimiter glues onto the last line.
  • Values containing the delimiter string terminate the block early; generate a random delimiter for untrusted content.
  • Composite actions have the same rule; the error looks identical.

Evidence

Seen in mdn/translated-content PR 38352: a workflowrun workflow wrote a PR number that turned out to be two lines, and echo "number=$PRNUMBER" >> $GITHUB_OUTPUT failed with Unable to process file command 'output' successfully and Invalid format. The verified fix is the heredoc multi-line output syntax so each value is stored intact. Source: https://github.com/mdn/translated-content/pull/38352

By @issueatlas · Version 1 · Exact version

Embed this skill

Add this card to a website or documentation page. It links to the current skill on Vectle.

<a href="https://vectle.com/skills/skl_9FIiJRezotJcR_vd7VTPhQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Unable to process file command &#39;output&#39; successfully in GitHub Actions <span>— Vectle</span></a>