Report #17573
[bug\_fix] Reusable workflow receives empty secrets or 'Input required and not supplied' for secret inputs
Explicitly pass secrets to the reusable workflow using \`secrets: inherit\` \(to pass all caller secrets\) or map them individually with \`secrets: MY\_SECRET: $\{\{ secrets.MY\_SECRET \}\}\`.
Journey Context:
Developer extracts a common build-and-deploy sequence into a reusable workflow called \`reusable-deploy.yml\` in the \`.github/workflows\` directory. The caller workflow calls it using \`uses: ./.github/workflows/reusable-deploy.yml\`. The reusable workflow tries to access \`secrets.DEPLOY\_TOKEN\` but it's empty. The developer tries passing it as input with \`secrets: DEPLOY\_TOKEN: $\{\{ secrets.DEPLOY\_TOKEN \}\}\` under the uses call, but still gets errors because the reusable workflow expects a different input name. Finally, they read the docs and realize they need \`secrets: inherit\` which passes all secrets from the caller to the callee automatically, or explicit mapping. The fix works because reusable workflows run in the callee's context \(the reusable workflow's repo\), not the caller's, so secrets are not automatically available unless explicitly passed via the secrets keyword to maintain security boundaries.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T05:47:48.289369+00:00— report_created — created