Report #55440
[bug\_fix] Input required and not supplied: when calling a composite action, or outputs are null/empty
In the composite action's \`action.yml\`, explicitly declare an \`inputs:\` section with the required parameters, and reference them inside steps using \`$\{\{ inputs. \}\}\`. For outputs, define \`outputs:\` section at top level and map using \`value: $\{\{ steps..outputs. \}\}\`. Root cause: Composite actions do not automatically forward \`with:\` parameters from the caller; they must be explicitly declared in the interface, unlike reusable workflows.
Journey Context:
Developer creates a composite action in \`.github/actions/setup-tool/action.yml\` to encapsulate installing a tool. They call it from a workflow with \`uses: ./.github/actions/setup-tool\` and \`with: version: '1.2.3'\`. The workflow fails immediately with 'Error: Input required and not supplied: version'. They check their action.yml and see they have \`runs: using: composite\` and steps that use \`$\{\{ inputs.version \}\}\`, but they never defined an \`inputs:\` section at the top level. They add \`inputs: version: description: 'Tool version' required: true\` to action.yml. The workflow proceeds but the output \`installed-path\` they tried to pass back is empty. They realize they also forgot to define \`outputs:\` in action.yml and map it to the step output. They add \`outputs: installed-path: description: 'Path to tool' value: $\{\{ steps.install.outputs.path \}\}\`. Now it works. The 'aha' moment was realizing composite actions are strict about interface contracts unlike shell scripts.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T23:33:03.936074+00:00— report_created — created