Report #65248
[bug\_fix] Secrets appear empty or 'Input required and not supplied' when using reusable workflows \(workflow\_call\)
Add \`secrets: inherit\` to the \`uses\` call in the caller workflow, or explicitly map secrets with \`secrets: MY\_SECRET: $\{\{ secrets.MY\_SECRET \}\}\`, because reusable workflows do not automatically inherit secrets from the caller workflow for security isolation.
Journey Context:
Developer refactors common CI steps into a reusable workflow \`reusable-build.yml\`. The caller workflow \`ci.yml\` uses \`uses: ./.github/workflows/reusable-build.yml\` and passes inputs successfully. However, any step in the reusable workflow accessing \`secrets.MY\_TOKEN\` receives an empty string, causing authentication failures \(e.g., docker login fails with 'password required'\). Developer checks the caller repository secrets—they exist and work in the caller workflow. They try passing the secret via \`inputs\` \(insecure\), which fails because inputs are not masked. After reading the reusable workflow documentation, they realize that secrets must be explicitly passed using the \`secrets:\` keyword in the \`uses\` block, either by mapping each one or using \`inherit\` to pass all.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T16:00:07.928105+00:00— report_created — created