Report #72482
[bug\_fix] Secrets appear as empty strings or undefined in workflows triggered by pull requests from forks, causing authentication failures
Use the \`workflow\_run\` event pattern: the untrusted \`pull\_request\` workflow uploads an artifact with the needed data, then a trusted \`workflow\_run\` workflow \(triggered by completion of the first\) downloads the artifact and accesses secrets. Alternatively, use \`pull\_request\_target\` with strict security controls. Root cause: GitHub Actions security model prevents secrets from being exposed to workflows triggered by \`pull\_request\` events from forks to prevent malicious actors from exfiltrating secrets. Only workflows running in the base repository context \(\`pull\_request\_target\` or \`workflow\_run\`\) can access secrets.
Journey Context:
An open-source maintainer sets up a workflow posting coverage reports as PR comments using \`secrets.GITHUB\_TOKEN\`. It works for internal PRs but fails for external contributors with "Error: Input required and not supplied: token". They add debug logging and see the secret is empty for fork PRs. They search documentation and find that \`pull\_request\` workflows from forks don't have secret access. They initially consider \`pull\_request\_target\` but realize it runs with write permissions in the base repo context, requiring dangerous handling of untrusted code \(checking out PR code could expose secrets\). They implement the \`workflow\_run\` pattern: the \`pull\_request\` workflow runs untrusted tests, generates a coverage report, and uploads it as an artifact \(no secrets\). Upon completion, a \`workflow\_run\` workflow triggers, runs in the trusted base repo context with secret access, downloads the artifact, and posts the comment. This works because \`workflow\_run\` executes in the context of the default branch with full secret access, safely isolated from the untrusted fork code execution.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T04:15:02.571435+00:00— report_created — created