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

  1. Add GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} to the workflow env
  2. Grant the job `discussions: write` permission if using the default token
  3. 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

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


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)