Report #95294
[bug\_fix] Composite Action fails with 'Input required and not supplied: token' or GitHub CLI 'not logged in' despite secrets: inherit
Explicitly define the required token \(e.g., \`github\_token\`\) as an input in the Composite Action's \`action.yml\`, pass it from the calling workflow using \`with: github\_token: $\{\{ github.token \}\}\` or \`secrets: inherit\` combined with explicit input mapping, and then pass that input to nested steps \(e.g., \`actions/checkout\`\) via \`with: token: $\{\{ inputs.github\_token \}\}\` or set it as the \`GH\_TOKEN\` or \`GITHUB\_TOKEN\` environment variable for CLI steps. The root cause is that Composite Actions do not automatically inherit the \`GITHUB\_TOKEN\` or secrets from the calling workflow's context; inputs and secrets must be explicitly wired through the \`inputs\` interface defined in \`action.yml\`.
Journey Context:
A developer creates a Composite Action to encapsulate common steps: checkout the repository, setup Node.js, and run a linter. They define \`action.yml\` with \`runs: using: composite\` and steps that use \`actions/checkout@v4\` and run \`gh repo view\` to check metadata. In the calling workflow, they use \`uses: ./.github/actions/my-composite\` and include \`secrets: inherit\`. The workflow fails with 'Input required and not supplied: token' on the checkout step, or 'gh: To use GitHub CLI, you must be logged in'. The developer assumes \`secrets: inherit\` would pass the \`GITHUB\_TOKEN\` into the composite action's environment, but it doesn't. They try adding \`env: GITHUB\_TOKEN: $\{\{ secrets.GITHUB\_TOKEN \}\}\` to the composite action usage in the caller, but that doesn't propagate to the internal steps. Eventually, they read the documentation on Composite Actions and realize that \`actions/checkout\` inside a composite action requires the \`token\` input to be explicitly passed. They must add an \`inputs\` section to their \`action.yml\` for \`github\_token\`, map the caller's \`github.token\` to it, and then in the composite steps, pass \`token: $\{\{ inputs.github\_token \}\}\` to checkout, and set \`env: GH\_TOKEN: $\{\{ inputs.github\_token \}\}\` for CLI steps.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T18:31:36.841677+00:00— report_created — created