affaan-m/ECC · error · Error
GitHub configuration is missing
Error message
GitHub configuration is missing
What it means
For ANNOUNCEMENT_KIND of 'release' or 'manual', the script must call the GitHub API (create/find the discussion or fetch its body), which requires GITHUB_TOKEN. It throws this error when the kind requires API access but no token is configured. Note the message omits 'repository' — it is the token check, distinct from error 774.
Solutions
- Add GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} to the workflow env
- Grant the job `discussions: write` permission if using the default token
- Set ANNOUNCEMENT_KIND to 'environment' if GitHub API access is genuinely not needed
Example fix
// before
env: { ANNOUNCEMENT_KIND: release }
// after
env: { ANNOUNCEMENT_KIND: release, GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} } Defensive patterns
Strategy: validation
Validate before calling
if (['release','manual'].includes(process.env.ANNOUNCEMENT_KIND) && !process.env.GITHUB_TOKEN) throw new Error('ANNOUNCEMENT_KIND=release|manual requires GITHUB_TOKEN'); Type guard
const kindNeedsToken = (kind) => kind === 'release' || kind === 'manual';
Try / catch
try { await main(); } catch (e) { if (e.message === 'GitHub configuration is missing') { console.error('Add GITHUB_TOKEN (with discussions:write) to the workflow env'); process.exit(1); } throw e; } Prevention
- Grant the job `permissions: discussions: write` when using the default GITHUB_TOKEN
- Only use ANNOUNCEMENT_KIND=environment if you truly need no GitHub API access
- Pair every release/manual announcement trigger with a token secret in the same job
When it happens
Trigger: main() runs with ANNOUNCEMENT_KIND set to 'release' or 'manual' while GITHUB_TOKEN is unset or empty. 'environment'-kind announcements that build purely from env vars do not hit this check.
Common situations: Workflow lacks `permissions: discussions: write` / token secret; a manual announcement triggered with only Discord secrets; GITHUB_TOKEN renamed in env.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- GitHub receipt configuration is missing
- GitHub repository configuration is missing
- announcement has a pending receipt; inspect Discord before…
- Announcements discussion category is required
- Choose at least one guided harness: Claude, Codex, or Kimi.
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/6d83fe223ab1c92f.
Report an issue: GitHub.
Appendix: source
Thrown at scripts/discord/release-announce.mjs:204
const receipt = findDiscordReceipt(recent, key);
if (receipt) {
await discord('PUT', `/channels/${env.DISCORD_ANNOUNCE_CHANNEL_ID}/pins/${receipt.id}`);
console.log('announcement already delivered; pin verified');
return;
}
const message = await discord('POST', `/channels/${env.DISCORD_ANNOUNCE_CHANNEL_ID}/messages`, buildDiscordPayload({
title: discussion.title,
body: discussion.body,
url: discussion.url,
key,
}));
await discord('PUT', `/channels/${env.DISCORD_ANNOUNCE_CHANNEL_ID}/pins/${message.id}`);
console.log('announcement delivered and pinned');
}
async function main() {
if (!env.GITHUB_REPOSITORY) throw new Error('GitHub repository configuration is missing');
if ((env.ANNOUNCEMENT_KIND === 'release' || env.ANNOUNCEMENT_KIND === 'manual') && !env.GITHUB_TOKEN) throw new Error('GitHub configuration is missing');
const discussion = env.ANNOUNCEMENT_KIND === 'release'
? await createOrFindReleaseDiscussion()
: env.ANNOUNCEMENT_KIND === 'manual'
? await discussionFromGitHub()
: discussionFromEnvironment();
await deliver(discussion);
}
main().catch(error => {
console.error(`release-announce failed: ${error.message}`);
process.exitCode = 1;
});
View on GitHub (pinned to 8321021c54)