syntaqxRepository pages update live while you sit on them. A signed-in tab on a repository page asks the site to watch it (POST /-/notify, watch_repo), which checks the person can read it and tells notify; notify keeps one topic per repository (a new Topic Durable Object, migration v3) of whose feeds are watching, for fifteen minutes at a time, renewed while the page stays open. The events service passes every event a page shows (pushes and deletions, pull requests, issues, comments, reviews, checks, statuses, runs, releases, deployments, security alerts) to notify as a small repo_changed note naming only its kind, ref, number, commit, run and commit count (g1t_contracts::live), one call per batch, and the actions service tells it of runs' jobs starting and finishing (run.updated, over a new optional NOTIFY binding). Notify hands each change to the watching feeds, which send it to their tabs as a `repo` event. On the page, useRepoLive (lib/use-repo-live.ts) revalidates the loader a second after the last matching change (five at most), never while someone is typing or a dialog is open, and at most once a minute in a hidden tab; signed out or with the socket down it refreshes on coming back into view (at most every 30 s) and once a minute while in view. Used on the overview, Files and folders, Commits (new commits wait under an "N new commits · Show" bar), Tags, the pull request and issue lists, a pull request and an issue (a reader at the bottom follows new timeline items), the Actions runs list (its 3 s poll becomes 30 s with the socket up) and a run (10 s for steps with the socket up), and the Security pages. The notifications guide has a new "Pages that update live" section.83e9b55History
README.md
g1t/detect
Says what a g1t.page build of the checkout would find, without building or deploying anything: the same rules g1t/deploy builds with.
steps:
- uses: actions/checkout@v5
- id: detect
uses: g1t/detect@v1
- if: steps.detect.outputs.kind == 'none'
run: echo "::error::Nothing here would be served."
- if: steps.detect.outputs.install != ''
run: ${{ steps.detect.outputs.install }}yaml
Inputs
| Input | Default | |
|---|---|---|
root-dir | The checkout | Where the project is in the checkout. |
build-command | None | A build command of your own, as g1t/deploy takes it. |
output-dir | None | An output folder of your own, as g1t/deploy takes it. |
Outputs
| Output | |
|---|---|
kind | workers (a wrangler.jsonc, wrangler.json or wrangler.toml), static (a site a build writes), html (the files as they are) or none. |
install | How dependencies are installed, from the lockfile: npm ci, pnpm install --frozen-lockfile, and so on. Empty without a package.json. |
build | What builds it: your command, npm run build for a package with a build script, or wrangler deploy --dry-run for Workers. Empty when nothing does. |
output-dir | The folder served, relative to the project (. for the project itself): a Workers project's assets directory, or the first of dist, build, out, public, _site, .output/public that exists. Empty when a build has yet to write it. |
It runs g1t-runner detect, found or downloaded as g1t/deploy finds it.