A web interface for git remotes configuration would be very handy.

  • Should make it really easy to set up pushing to github.
  • Should be possible to push a site to any other git repo too.
  • A special case is pushing changes to a site over to a branch of that site.

design

ikisite already handles backup/restore of .ssh/id_*, so ssh-keygen can be used a generate a passwordless ssh key for a site when remotes are first set up. Provide a way to download the ssh public key, to provide to github, etc.

For each remote, the user only needs to configure:

  • The git URI, in any of the forms git recognises, except file:/// and a bare path to a local repo.
  • Whether to make the remote a mirror. (git push --mirror; force-update the remote refs) Or find a sane default.
  • Possibly, the remote branch to push origin/master to. (Or a prefix, so it pushes to foo/master, foo/setup, etc.) Being able to push origin/master to github/branchable might be nice, but this feature could be omitted for simplicity initially.

The pushing should be run by a post-update hook. Currently, the post-update hook is the ikiwiki wrapper. So, the pushing could be implemented by an ikiwiki plugin. It could use the refresh hook, which will always be called when a change is made or received.

The plugin should daemonize, drop locks, wait a short while to avoid contending with the main site build, and then push to configured remotes.

gotchas

ssh host key checking needs to be dealt with somehow. By disabling StrictHostKeyChecking in ~/.ssh/config? Should be ok for public/branchable repositories. The risk is that for a non-public repository, an unsafe push could be done, exposing its contents.

ssh (or http) could stall asking for a password. The daemonization should avoid this by ensuring that any controlling terminal is detached from.

May need to force push if pushing to an empty remote. (--mirror avoids that problem)

basic gitpush plugin now done --Joey