Report #16283
[bug\_fix] Composite action outputs not propagated to caller workflow
Explicitly declare the outputs in the composite action's \`action.yml\` file with the \`value\` property mapping to the internal step's output: \`outputs: version: description: 'Version' value: $\{\{ steps.internal\_step.outputs.version \}\}\`. Then ensure the internal step has an \`id\` and sets output via \`echo "key=value" >> $GITHUB\_OUTPUT\`. Root cause: Composite actions run in an isolated context; unlike regular steps, their internal step outputs are not automatically exposed to the calling workflow. The metadata file must explicitly map internal outputs to the action's external interface.
Journey Context:
You refactor a repetitive workflow sequence into a composite action called \`setup-and-version\`. Inside the composite action, you have a step with \`id: version\_calc\` that runs a script and sets an output: \`echo "version=1.2.3" >> $GITHUB\_OUTPUT\`. In your main workflow, you call the composite action with an \`id: setup\` and then try to access the output: \`run: echo $\{\{ steps.setup.outputs.version \}\}\`. However, this prints nothing. You check the composite action logs and confirm the step \`version\_calc\` successfully set the output. You try various syntaxes like \`steps.setup.outputs.version\_calc\` or \`steps.setup.outputs\['version'\]\` but nothing works. You search "composite action output empty" and find the GitHub documentation clarifying that for composite actions, you must explicitly define the outputs in the action.yml metadata file, mapping the internal step's output to an external name. You update your action.yml to include the outputs section with the value mapping, and immediately the caller workflow receives the value.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T02:18:24.104351+00:00— report_created — created