eoma

Docs › Connections

GitHub

Connect the repository your website is built from. EOMA opens a pull request you review and merge — it never writes to your main branch.

In 10 seconds

Before you start

Steps

1 — Press Connect and choose the repositories

Settings → Integrations → the Publishing — CMS & Sites group → the GitHub row.

┌─ Settings ─────────────────┬──────────────────────────────────┐
│  WORKSPACE                 │  Publishing — CMS & Sites        │
│    Plan & Usage            │    WordPress      [ Connect ]    │
│  ● Integrations   ← here   │    GitHub         [ Connect ] ←  │
└────────────────────────────┴──────────────────────────────────┘

Connect sends you to GitHub's own install screen. GitHub asks which account or organisation to install into, and then whether to grant all repositories or only select repositories. Choose only select repositories and pick the one your site is built from. This is the single most important decision on this page: it is the boundary of everything that follows.

2 — Choose the repository and the branch

Back in EOMA the row shows Select repo. Pressing it opens Select Repository — the list of repositories you granted access to, and a Branch dropdown underneath.

The branch you pick is the base: the branch EOMA compares against and points its pull requests at. For most sites that is main, which is already selected for you. Press Save.

3 — Approve a piece of work and choose GitHub

Connecting gives EOMA somewhere to go. It does not send anything by itself. The first pull request appears when you approve a finished draft on Actions and pick GitHub as the destination.

What you'll see

The GitHub row and its "Connect" button

In Publishing — CMS & Sites, second row. Non-owners see Owner only where the button is.

GitHub's own install screen

Not part of EOMA. This is where repository access is granted, and it is the only place it can be changed later.

"Select Repository" — the repo list and "Branch"

One line per repository you granted, showing its full name and its default branch. Below the selection, a Branch dropdown. At the bottom left, a link reading "Don't see your repo? Manage repository access on GitHub →".

The row once a repository is chosen

The button is replaced by owner/repo · branch, with Change repo and Disconnect beside it. Change repo re-opens the same picker — you can move to a different repository without disconnecting and starting over.

The pull request, on GitHub

Not in EOMA. A branch called eoma/draft/<id>, the changed files, and a pull request pointed at your base branch. EOMA also posts the link back onto the action, so you can open it from either side.

Reading the numbers

What EOMA writes, exactly. This is the blast radius, and it is small on purpose:

EOMA does EOMA does not
Commit to a branch named eoma/draft/<action id>, one branch per piece of work Commit to main, or to whatever base branch you selected
Write the one file that piece of work produces Touch any other file, or delete anything
Open a pull request from that branch into your base Merge it, approve it, or close it
Read the repository to find the right path and the current file Read repositories you did not grant access to
Reset its own draft branch back to your base when it redoes a piece of work Force-push, rewrite history, or change any branch that is not eoma/draft/…

If EOMA cannot do something within those lines, it stops and tells you. It has no second route.

"Don't see your repo?" The picker lists only what the app was granted. A repository missing from the list is not broken — it was outside the selection you made on GitHub. The link takes you to the page where you widen it. You do not need to disconnect first.

The branch list can be shorter than your real branch list. EOMA reads up to 100 branches. Your default branch is always at the top and always selectable, so a repository with hundreds of branches still works; a rarely-used branch may just not appear. If you need one that is missing, tell support.

Where the file lands. EOMA picks a path from the kind of work: a blog post goes to content/blog/<name>.md, a page to content/pages/<name>.md, your llms.txt to the root of the repository. Structured-data snippets go to content/schema/. If your repository is laid out differently, say so before the first publish and the paths can be set per brand — a pull request in the wrong folder is easy to close, but easier not to open.

"Opens a pull request in your repo — merging stays with you". The line you will see when you approve. The confirmation that follows spells out the same three facts: EOMA opens the pull request and writes nothing directly, you see the change line by line, nothing goes live until you merge.

Disconnecting removes the installation. Pressing Disconnect removes EOMA's app from your GitHub account as well as the connection inside EOMA. Branches and pull requests already opened stay where they are — they are yours. You can delete or merge them at your own pace.

When it goes wrong

You see Why What to do
"Owner only" instead of a Connect button You are not the owner of this brand in EOMA. Ask the brand owner to connect it.
"No repositories found." after connecting The app was installed, but no repository was selected — or it went onto a different account than the one that owns your site. Use Manage repository access on GitHub and add the repository. It appears in the picker straight away.
An action says the publishing target is not configured GitHub is connected, but no repository was ever chosen. Settings → Integrations → GitHub → Select repo.
A pull request opens against the wrong branch The base branch chosen at connect time is not the one your site builds from. Change repo, pick the right branch, and save. The next pull request uses it.
The pull request is correct, but nothing changes on your site It has not been merged. EOMA never merges. Merge it on GitHub. Your normal deploy runs as it always does.
You merged, and the action still shows as in progress EOMA is not told when a pull request is merged — nothing watches for it yet. Say so in support and the action gets closed. It is a bookkeeping gap on our side; your change is live regardless.
The repository is on an organisation and the install needs approval GitHub asks an organisation owner to approve new apps. An owner approves it once from GitHub's settings, then continue at step 2.
Reading this as a machine? The same page in Markdown: /docs/integrations/github.md

On this page