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.

Docs: the repository lives at diffinery.com/codician/diffinery (#180)

* Docs: Sync to Diffinery runs only by hand since the cut-off
* Docs: the repository's home is diffinery.com/codician/diffinery
test-bot authored 1 parent ec73e44commit a233550e6b28a344657491376729d6aaa2561e84Browse files
3 files changed+9−9
modifiedREADME.md+6−6View file
@@ -59,17 +59,17 @@
5959 ## Deploying
6060
6161 Diffinery deploys itself: this repository lives at
62-`diffinery.com/codician-team/diffinery`, and every push to `main` there runs
62+`diffinery.com/codician/diffinery`, and every push to `main` there runs
6363 CI (`.github/workflows/ci.yml`: typecheck, unit tests and the Worker bundle) on
6464 Diffinery's hosted runners. When it passes, `.github/workflows/deploy.yml`
6565 deploys that commit, followed by the live test (`.github/workflows/live-test.yml`);
6666 the end-to-end suite (`.github/workflows/e2e.yml`) runs alongside. Deploys
6767 reuse the runner image from Cloudflare's registry and rebuild it only when
68-`containers/runner` changed, or weekly for base image updates (`scripts/runner-image.sh`). GitHub stays the upstream for
69-now: `.github/workflows/sync-to-diffinery.yml` copies every branch and tag, and
70-the secrets and variables below, to Diffinery on each push, then waits for the
71-Actions runs there and fails if any of them fail. Running Deploy by hand on
72-GitHub still deploys, as a fallback.
68+`containers/runner` changed, or weekly for base image updates (`scripts/runner-image.sh`). Diffinery is this repository's only home: GitHub's
69+copy (github.com/codician-team/diffinery) stopped at the cut-off on 14 October 2026 and
70+is kept as a record. Changes land through pull requests on Diffinery; agents land
71+theirs with auto-merge once the required checks pass. A checkout cloned from GitHub
72+switches over with `scripts/use-diffinery.sh` (it needs `DIFFINERY_TOKEN`).
7373
7474 The workflow needs two repository secrets:
7575
modifiedapps/diffinery/docs/self-hosting/configuration.md+2−2View file
@@ -311,7 +311,7 @@
311311
312312 Deploy reads `DIFFINERY_DOMAIN`, `DIFFINERY_ZONE` and `MAIL_DOMAIN` from the repository's variables and passes them to bootstrap, so you point it at your own hostname without editing the workflow (see [Deploy your own Diffinery](/docs/self-hosting/deploy#step-1-point-the-code-at-your-domain)). Deploy runs on pushes to `main` on any Diffinery instance, and when started by hand on GitHub.
313313
314-The Deploy job and the Sync job run in an environment named `production`. The Live test and Sync workflows target `https://diffinery.com` and its `codician-team/diffinery` repository; adapt or delete them for your own instance.
314+The Deploy job and the Sync job run in an environment named `production`. The Live test and Sync workflows target `https://diffinery.com` and its `codician/diffinery` repository; adapt or delete them for your own instance.
315315
316316 The **Import campaign** workflow is a manual test of the importer. Started on GitHub (**Run workflow**), it starts the same workflow on Diffinery and prints its report. On Diffinery it imports a list of public GitHub repositories (the `repos` input) as private repositories named `<owner>/campaign-<github owner>-<github repo>`, replacing copies from earlier campaigns. It can then run their push workflows (`run_workflows`, off by default, because that is third-party code) and writes a report of what came across and what ran.
317317
@@ -322,7 +322,7 @@
322322
323323 It needs `DIFFINERY_LIVE_TOKEN` and, optionally, `IMPORT_GITHUB_TOKEN`.
324324
325-Sync to Diffinery copies the four variables above to the repository on Diffinery (only those that are set), together with the secrets `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ACCOUNT_ID` and `DIFFINERY_LIVE_TOKEN`, so the copy deploys to the same place. Each push copies only the branch or tag it pushed, and runs are queued per ref, so a push to another branch never replaces a waiting sync of `main`. A run started by hand copies every branch and tag; it queues together with `main`, and moves each ref only if it still points where it did when the run read it, so it never puts back an older commit that another run copied in the meantime. Branch deletions aren't copied. Only a sync of `main` checks that `main` on Diffinery matches and waits for its Actions runs.
325+Sync to Diffinery runs only when started by hand on GitHub (`workflow_dispatch`). Since the cut-off, the repository's home is on Diffinery, and pushes to GitHub are no longer copied. A run copies the four variables above to the repository on Diffinery (only those that are set), together with the secrets `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ACCOUNT_ID` and `DIFFINERY_LIVE_TOKEN`, so the copy deploys to the same place. It then copies every branch and tag, moving each ref only if it still points where it did when the run read it, so it never puts back an older commit that changed on Diffinery in the meantime. Branch deletions aren't copied. A run on `main` checks that `main` on Diffinery matches and waits for its Actions runs. Tick **Only copy the secrets and variables** to skip the branches, tags and the wait, for a repository on Diffinery that already has the code.
326326
327327 `scripts/diffinery-wait-runs.sh`, which the sync workflow uses to wait for Actions runs on a commit, reads `DIFFINERY` (the instance origin) and `TOKEN` (a Diffinery token) from the environment:
328328
modifiedapps/diffinery/docs/self-hosting/deploy.md+1−1View file
@@ -66,7 +66,7 @@
6666
6767 `DIFFINERY_DOMAIN` is a bare hostname, without `https://` or a path. Diffinery is always served over HTTPS at the root of that hostname.
6868
69-**Other workflows.** `.github/workflows/live-test.yml` and `.github/workflows/sync-to-diffinery.yml` test and mirror the public `diffinery.com` instance. Delete them, or change their `DIFFINERY` host and organization names before you enable them. The sync workflow runs only on GitHub: it copies each pushed branch or tag to the instance, copies the deploy secrets and the `DIFFINERY_DOMAIN`, `DIFFINERY_ZONE`, `MAIL_DOMAIN` and `ACCESS_TEAM_DOMAIN` variables, and for `main` waits for the Actions runs there, so the copy on Diffinery deploys itself (see [Configuration](/docs/self-hosting/configuration#repository-secrets-and-variables-for-the-workflows)). `ci.yml` (typecheck, tests and the end-to-end test) works as is. `dind-probe.yml` is a maintenance probe started by hand; you can delete it. `d1-replication.yml` is optional; see [Architecture](/docs/self-hosting/architecture#d1-and-read-replication).
69+**Other workflows.** `.github/workflows/live-test.yml` and `.github/workflows/sync-to-diffinery.yml` test and mirror the public `diffinery.com` instance. Delete them, or change their `DIFFINERY` host and organization names before you enable them. The sync workflow runs only on GitHub, and only when started by hand: it copies every branch and tag to the instance, copies the deploy secrets and the `DIFFINERY_DOMAIN`, `DIFFINERY_ZONE`, `MAIL_DOMAIN` and `ACCESS_TEAM_DOMAIN` variables, and for `main` waits for the Actions runs there, so the copy on Diffinery deploys itself (see [Configuration](/docs/self-hosting/configuration#repository-secrets-and-variables-for-the-workflows)). `ci.yml` (typecheck, tests and the end-to-end test) works as is. `dind-probe.yml` is a maintenance probe started by hand; you can delete it. `d1-replication.yml` is optional; see [Architecture](/docs/self-hosting/architecture#d1-and-read-replication).
7070
7171 > **Note:** The scripts use fixed resource names: a D1 database `diffinery`, an R2 bucket `diffinery-data`, queues `diffinery-events`, `diffinery-events-dlq`, `diffinery-mail`, `diffinery-mail-dlq` and `diffinery-mail-events`, and a Worker `diffinery`. One Cloudflare account holds one instance unless you rename them in `scripts/bootstrap.sh` and `wrangler.jsonc`.
7272