wiki:GitRepositoryDetails

Technical Information about the Git Repository

Hosting

The canonical repository is on drugstore.mit.edu (a/k/a git.mit.edu), accessibly via git+ssh://. Each package has its own repository in the path /git/athena.

Members of athena-commiters [sic] have smrsh shells which allow access to both git and svn.

Other Accounts

  • athenasnap: Used by debathena-root for things requiring shell access, such as fixing hooks, etc.
  • debuildsvn: Deprecated in favor of builder account.
  • builder: Used by the build server to svn up/git pull checkouts. Do not use this for committing or you will get punched in the face.

Hooks

Currently, each repository has its hooks directory renamed to hooks.orig and a hooks symlink pointing at /git/athena/repository-configuration/githooks. /git/athena/repository-configuration is a clone of a repository of the same name on github. That repo should always reflect what's on drugstore. (This is a fork of the krbdev-services repository from the krb5 team, as we stole most of their hooks, and workflow.)

Hooks directory

The contents of the directory, and what they are for:

  • authors: Maps usernames to real people. Used by update hook.
  • hookutils.py: Used by various hooks
  • krb5-rt-id: Currently unused.
  • post-receive: The master post-receive hook. It runs the notify, push, and rt hooks in turn.
  • post-receive-notify: Sends mail upon a new commit. (And possibly zephyrs?)
  • post-receive-push: Pushes to a mirror (in this case, github)
  • post-receive-rt: Does operations in RT as appropriate (currently unused)
  • ssh-as-krbsnap: Unused.
  • update: The master update hook. Prevents fast-forwards, enforces style guidelines, etc.

Hook configuration

Much of the hooks are configured by git configuration in the repository. Values we care about:

  • receive.denynonfastforwards=true
  • hooks.push-to=github
  • hooks.mailinglist=source-commits@mit.edu
  • hooks.verbose=true
  • hooks.reponame= (repository name)
  • hooks.commit-url-prefix=https://github.com/mit-athena/(repository name)/commit/
    • TODO: Why doesn't this use hooks.reponame?

/git/athena/private

This includes things used by hooks, etc:

  • github_id_rsa, github_id_rsa.pub: Keypairs for mit-athena project on Github.
  • github-password: username/password for the github account
  • known_hosts: An SSH known hosts file for Github, but they move IPs too much (not currently in use)
  • ssh-to-github: The ssh command to push to Github. If you run this interactively, ssh will yell at you about permissions on the keypair. We should also rename this command.

Future Directions

  • TravisCI
    • achernya says: When the git repositories are finally mirrored on GitHub?, you can enable  Travis CI to build proposed changes (and master!) and verify that the build passes. This basically involves clicking the button in Travis CI to enable it for the repo, and adding a .travis.yml to tell it how to do the build. The  Hesiod repository has an example. We could extend this to do full Debian package builds.
  • Gerrit
  • Branches for other packaging methods (e.g. rpm) or OSes (e.g. macos)