The merge request Merge action now runs through htmx for every mode (fast-forward, squash, merge) instead of a full-page POST and 303 reload.
The form posts asynchronously, drops double submits and shows a pending indicator; without JS it still posts normally.
htmx merges get OOB fragments (state badge + action area). Refusals, failures, expired sessions and rejected origins render a status in the merge box.
Other open tabs of the same MR receive the merged state through the live stream.
The checks-label observer watches the stable MR bar so it survives swaps.
Deferred: the fragment path still builds the full page view (diff, comments) before rendering only state/actions; a dedicated state view builder is a follow-up.
Checks: go test ./..., go vet, node jstest suite (198 pass). Not manually tested in a browser.
- Owner web access: `ermite web login` prints a one-time link (about 60 s, 12 h session).
86
86
- If a page or a read looks wrong, set `ERMITE_GIT_READER=cli` and restart: every read then uses the `git` binary.
87
87
88
-
## Releases from CI
89
-
90
-
In a CI job, `GITHUB_API_URL` and `GITHUB_SERVER_URL` point at an address the job can reach (not necessarily the public URL). `softprops/action-gh-release` uses them as is. GoReleaser and other tools with hard-coded GitHub URLs must take them from these variables, never the public URL alone (the job times out):
91
-
92
-
```yaml
93
-
github_urls:
94
-
api: '{{ or (index .Env "GITHUB_API_URL") "https://git.example.org/-/github/api" }}/'
95
-
upload: '{{ or (index .Env "GITHUB_API_URL") "https://git.example.org/-/github/api" }}/uploads/'
96
-
download: '{{ or (index .Env "GITHUB_SERVER_URL") "https://git.example.org" }}/'
97
-
```
98
-
99
-
The workflow needs `permissions: contents: write` and `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}`. Enable an existing one with `ermite workflow enable <repo> .github/workflows/release.yml`. Full example: `docs/releases.md` in the ermite repository.
100
-
101
88
## Output conventions
102
89
103
90
`--json` prints stable field names, listed in each command's `--help`. Errors are one line on standard error (`ermite: ...`) with exit status 1. `ermite completion bash|zsh|fish` completes repository names.
- Owner web access: `ermite web login` prints a one-time link (about 60 s, 12 h session).
85
- Owner web access: `ermite web login` prints a one-time link (about 60 s, 12 h session).
86
- If a page or a read looks wrong, set `ERMITE_GIT_READER=cli` and restart: every read then uses the `git` binary.
86
- If a page or a read looks wrong, set `ERMITE_GIT_READER=cli` and restart: every read then uses the `git` binary.
87
87
88
-
## Releases from CI
89
-
90
-
In a CI job, `GITHUB_API_URL` and `GITHUB_SERVER_URL` point at an address the job can reach (not necessarily the public URL). `softprops/action-gh-release` uses them as is. GoReleaser and other tools with hard-coded GitHub URLs must take them from these variables, never the public URL alone (the job times out):
91
-
92
-
```yaml
93
-
github_urls:
94
-
api: '{{ or (index .Env "GITHUB_API_URL") "https://git.example.org/-/github/api" }}/'
95
-
upload: '{{ or (index .Env "GITHUB_API_URL") "https://git.example.org/-/github/api" }}/uploads/'
96
-
download: '{{ or (index .Env "GITHUB_SERVER_URL") "https://git.example.org" }}/'
97
-
```
98
-
99
-
The workflow needs `permissions: contents: write` and `GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}`. Enable an existing one with `ermite workflow enable <repo> .github/workflows/release.yml`. Full example: `docs/releases.md` in the ermite repository.
100
-
101
## Output conventions
88
## Output conventions
102
89
103
`--json` prints stable field names, listed in each command's `--help`. Errors are one line on standard error (`ermite: ...`) with exit status 1. `ermite completion bash|zsh|fish` completes repository names.
90
`--json` prints stable field names, listed in each command's `--help`. Errors are one line on standard error (`ermite: ...`) with exit status 1. `ermite completion bash|zsh|fish` completes repository names.