Diffinery

codician/diffinerypublic

Open-source, agent-first GitHub and GitHub Actions alternative that runs on your own Cloudflare account: git hosting, pull requests, code review and drop-in GitHub Actions YAML on Workers, Durable Objects, R2 and Containers.

GitHub as Codician: community setup, and awesome-list suggestions #315

Mergedtest-botagenton behalf of cnbrkdmrcimerged into main from github-community
test-botagenton behalf of cnbrkdmrciopened Author

Requested by Can · project thread

What this changes

Adds a GitHub community setup workflow (workflow_dispatch only, Diffinery only, github-mirror environment) that runs scripts/github-community.mjs with MIRROR_TOKEN, so everything it posts on github.com/codician-team/diffinery shows the Codician account that owns the token, never a person:

  • labels roadmap, help wanted, good first issue
  • Discussions turned on, and the "Welcome to Diffinery" post in Announcements (text in scripts/github-community/welcome-discussion.md)
  • the roadmap issue "Roadmap: what Diffinery doesn't do yet", labelled and pinned (scripts/github-community/roadmap-issue.md)

Each step looks first and only creates what is missing, so a second run changes nothing. A step the token isn't allowed to do (for example turning Discussions on needs Administration write) is reported with the permission it needs in the job summary, and the other steps still run. GitHub has no API to pin a discussion or edit discussion categories, so those are left as they are. A dry_run input reports without changing anything.

Second job: suggest Diffinery to awesome lists

Also adds Suggest Diffinery to awesome lists (.github/workflows/awesome-lists.yml, same rules: workflow_dispatch only, Diffinery only, github-mirror environment). It runs scripts/awesome-lists.mjs with a new secret, OUTREACH_TOKEN: a classic personal access token of the Codician GitHub account with only the public_repo scope. A classic token is needed because GitHub's fine-grained tokens can't contribute to public repositories the account isn't a member of, so MIRROR_TOKEN can't do it.

For each list in scripts/awesome-lists/lists.mjs it forks the list, adds one line where that list's contributing rules say, and opens a pull request as Codician. The lines and bodies were written against each list's rules as of 2026-10-25:

ListSection
punkpeye/awesome-mcp-serversVersion Control (alphabetical; agent PRs marked 🤖🤖🤖 as the list asks)
appcypher/awesome-mcp-serversVersion Control (bottom)
dictcp/awesome-gitSelf-Hosted Repository (bottom)
ligurio/awesome-cithe CI table (alphabetical)
zhuima/awesome-cloudflare开发者工具 (bottom, in Chinese like the rest)
ccplugins/awesome-claude-code-pluginsExternal Marketplaces (bottom)
irazasyed/awesome-cloudflareApps → Open Source, skipped until 2026-11-24 (its 30-day rule)

A list that already mentions Diffinery, or where Codician's pull request is open or was closed, is left alone, so running it again is safe. Inputs: lists (ids, or due for all) and dry_run. Writes go through git objects because punkpeye's README is over 1 MB.

This changes a workflow file, so it needs a person's Merge (squash). After the merge, the launch thread dispatches the community job, and the awesome-lists job once OUTREACH_TOKEN is in the github-mirror environment.

How it was tested

  • Ran the script against a mocked GitHub API: first run creates the two missing labels, turns Discussions on, posts the welcome discussion in Announcements, opens and pins the issue; a second run reports everything as already there.
  • Without MIRROR_TOKEN it prints a notice and exits 0. node --check passes.
  • awesome lists: ran the script against a mocked GitHub API fed with each list's real README from today. A dry run reports the line and position for each; the first run opens six pull requests and skips irazasyed/awesome-cloudflare; a second run reports all six as already open; with the date set to 2026-11-24 it opens the seventh. Each written README differs from the original by exactly the one added line. An unknown list id exits 1; no token prints a notice and exits 0.

Checklist

  • pnpm -r typecheck and pnpm -r test pass (no app code changed)
  • User- or admin-visible changes update the docs in apps/diffinery/docs (none: repository tooling only)
  • New D1 migrations use the next free number in apps/diffinery/migrations (none)

🤖 Generated with Claude Code

https://claude.ai/code/session_0156222tQpRPtP1Em3kEeZnK

Intentwhat this change is meant to do

Post the launch's GitHub Discussions welcome and pinned roadmap issue as the Codician account through the mirror token, instead of leaving them as manual steps for Can.

diffinery-auto-merge[bot]botcommented

Auto-merge didn't turn on by itself (branch rule main auto-merges test-bot's pull requests): the pull request changes workflow file .github/workflows/github-community.yml; CI can't gate a change to itself, so a person must merge it. A person can merge it.

cnbrkdmrciapproved these changes on bb864a3
cnbrkdmrci merged commit fa645f8 into main
Pull request successfully merged and closed
cnbrkdmrci merged fa645f8 into main
Sign in to join the conversation.