Report #9868
[bug\_fix] Secrets not accessible in reusable workflow \(workflow\_call\)
In the caller workflow, explicitly pass secrets using \`secrets: inherit\` to pass all secrets from the caller to the called workflow, or map them individually with \`secrets: MY\_SECRET: $\{\{ secrets.MY\_SECRET \}\}\`. Additionally, ensure the reusable workflow defines the secret in its \`on.workflow\_call.secrets\` mapping.
Journey Context:
A platform team creates a reusable deployment workflow at \`.github/workflows/deploy.yml\` with \`on: workflow\_call:\`. It references \`secrets.DEPLOY\_TOKEN\` to authenticate with a cloud provider. A product team attempts to use it in their workflow with \`uses: ./.github/workflows/deploy.yml\`. The reusable workflow fails with "Unrecognized named-value: 'secrets'." or the secret is empty. The product team tries to pass it via \`with: deploy-token: $\{\{ secrets.DEPLOY\_TOKEN \}\}\`, but the reusable workflow expects it in the \`secrets\` context, not \`inputs\`. They search the documentation and discover that reusable workflows have isolated contexts for security. The fix requires two changes: first, the reusable workflow must declare the secret in its interface: \`on: workflow\_call: secrets: DEPLOY\_TOKEN: required: true\`. Second, the caller must explicitly pass the secret using \`secrets: inherit\` \(to pass all\) or \`secrets: DEPLOY\_TOKEN: $\{\{ secrets.DEPLOY\_TOKEN \}\}\` \(to pass specific ones\). After adding \`secrets: inherit\`, the reusable workflow receives the token and authenticates successfully.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T09:16:36.761475+00:00— report_created — created