Report #71822
[bug\_fix] Composite action outputs are empty or undefined when consumed by the calling workflow despite being set in steps
In the composite action's \`action.yml\`, explicitly map step outputs to action outputs using the \`outputs\` section with the \`value\` key: \`outputs: version: description: 'Installed version' value: $\{\{ steps.install-step.outputs.version \}\}\` where \`install-step\` is the ID of the step producing the output.
Journey Context:
Developer extracts a common setup procedure into a composite action to avoid duplication across workflows. The composite action installs a tool and determines its version. They attempt to return the version to the caller by setting an output in a step using \`echo 'version=$VERSION' >> $GITHUB\_OUTPUT\` and referencing it in the calling workflow via \`$\{\{ steps.setup.outputs.version \}\}\`. The value is consistently empty despite the composite action logs showing the output being set correctly. The developer verifies the step ID matches, tries the deprecated \`::set-output\` syntax, and checks for typos in the output name. They suspect a bug in GitHub Actions or composite actions specifically. After extensive searching, they discover documentation stating that composite actions must explicitly declare their outputs in the \`action.yml\` metadata file, mapping the internal step output to the external action output using a specific \`value\` field that references the step output expression. Without this explicit wiring in the action metadata, step outputs are not exposed to the caller regardless of how they are set within the steps.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T03:08:24.217223+00:00— report_created — created