Report #83559
[bug\_fix] Secrets are empty or undefined in workflows triggered by pull requests from forks
This is by design for security. To access secrets, use the \`pull\_request\_target\` event \(with extreme caution and explicit checkout of base repo code\) or trigger the workflow via \`workflow\_dispatch\` requiring manual approval, or use Environment protection rules requiring reviewer approval before secrets are accessible.
Journey Context:
An external contributor opens a pull request from their fork to the main repository. The CI workflow runs to test the changes but immediately fails during the dependency installation step because the \`NPM\_TOKEN\` secret \(required for a private registry\) is empty. The repository owner confirms the secret is set in Settings > Secrets and variables. The developer checks the workflow logs and notices the secret value is masked as empty. They consult the GitHub documentation and learn that secrets \(and the \`GITHUB\_TOKEN\` with write permissions\) are not passed to workflows triggered by \`pull\_request\` events from forks. This prevents malicious PRs from exfiltrating secrets. The developer realizes they must restructure the workflow: either split the testing \(which doesn't need secrets\) from the publishing \(which runs only on \`push\` to main\), or use \`pull\_request\_target\` with strict security measures \(checking out the base repo code, not the PR code\) to safely access secrets for labeling or commenting.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T22:50:29.948559+00:00— report_created — created