Skip to content

pi-dispatch v1.1.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 07:33
· 390 commits to main since this release

run.replicas now works on every forge, and egress from a job container is denied by default.

Replica runs on GitLab, Forgejo and Azure DevOps (#187)

"replicas": 2 on a label, comment or pull_request trigger races two independent sandboxes on one delivery, each on its own pi/issue-<n>-r<i> branch, each opening its own review request. It was GitHub only; it now works everywhere, with each forge's own nouns and CLI in the prompt (a merge request on GitLab, a work item on Azure).

Two limits worth knowing. It is webhook only on the three new forges, because the poller is GitHub only, so nothing fans out on a poll. And on GitLab, Forgejo and Azure the replicas hold the same operator supplied token rather than one scoped token each: only the GitHub App path mints per job. PI_CONCURRENCY still bounds how many run at once. See docs/replicas.md.

Egress is denied by default (#202) — BREAKING

A deployment that upgrades and does nothing has every job refused pre spend, at no budget or token cost, until it runs:

docker compose -f deploy/docker-compose.yml --profile egress up -d

The refusal names the proxy and that command, and PI_EGRESS=0 reverses it in one line. Jobs run on a per job --internal network whose only other member is an allowlist proxy.

Also in this release

  • Bring your own secrets manager (#209, #216): service render|install --env-setup <path> names a script the unit sources at every boot, and doctor now checks it is still there, is not group or world writable, and is ignored by any git work tree it sits in.
  • The GitHub App key can be a value, not only a path (#208): GITHUB_APP_PRIVATE_KEY accepts the PEM inline. Setting both it and the path is a refusal rather than a precedence rule, and the key is never forwarded into a job container.
  • *.pem is gitignored, and doctor warns when a key sits in a repo (#211).
  • A triggers file that does not parse is now a doctor failure (#187), naming the reason and the path. It used to be swallowed, which also disarmed the webhook secret, credential, image and flow checks, so doctor came back greener than a healthy deployment.
  • The receiver no longer restart loops on a config it cannot read (#187): a determinate refusal exits 2 and the unit stops, matching the worker.
  • Documentation corrections on what a job container's credentials actually bound (#197, #198, #199, #200, #206).

Upgrading

npm i -g @edgehero/pi-dispatch @edgehero/pi-dispatch-receiver
pi install @edgehero/pi-dispatch-admin

Upgrade the admin extension together with the worker and receiver, not after. The console bundles the trigger validator at build time, so a 1.0.0 console refuses every trigger edit while a non GitHub replicas entry sits in the file, including the edit that would remove it.

If you deploy the receiver as a service, re-run pi-dispatch service install --force to pick up the restart guards.