a small tool that automatically clones and builds local GIT repositories on changes
JavaScript Go Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



Why not other tools?

minimalism: requires one JSON file per repository
easily extensible: support for unit tests and stress-testing (long-running tests)

 - watch multiple svn/git repositories, located locally on the host machine or on a remote host,
 - notify the repository owners with an e-mail on failures,
 - browse repository status from a web interface with access to log files.

What's missing:

 - dependency checks
 - support for benchmarks/stress-testing: this requires a new tool to control the stress-testing as well support in gitw-http to dinamically show the test status and system state.
 - Setting up the Go compiler

gitw requires a Go compiler from http://golang.org. Get it with mercurial (version weekly.2012-02-07 works). There are no other external dependencies.

$ hg clone -u weekly.2012-02-07 https://go.googlecode.com/hg/ go
Then, set up your environmental variables for Go

export GOHOME=$HOME/go
export GOBIN=$GOHOME/bin
export GOARCH=amd64
export GOOS=linux
export PATH=$PATH:$GOBIN:$GOBIN/tool
$ cd $GOHOME/src
$ ./all.bash
6g and 6l are the Go compiler and linker for 64-bit systems. Binaries are installed in $GOBIN.

Compiling and configuring gitw

Move to gitw source tree.

Compiling gitw - the CI server

$ 6g gitw.go && 6l -o gitw gitw.6
The gitw server will listen on port 9988.

Compiling gitw-http - the web interface

$ 6g gitw-http.go && 6l -o gitw-http gitw-http.6
Edit config.json:

    "RepositoriesRoot" : "repositories",
    "MailAddress"      : "some@example.com",
    "MailHost"         : "smtp.example.com",
    "MailUsername"     : "some@example.com",
    "MailPassword"     : "mypassword"
Key explanations:

 - RepositoriesRoot: the directory where the repositories JSON files are stored,
 - MailAddress: email to use for sending out notifications,
 - MailHost: email server hostname,
 - MailUsername: username for the email,
 - MailPassword: email password.
 - The gitw-http HTTP server will listen on port 12345

Adding repositories

Example project repository:

    "repository"      : "svn",
    "source"          : "remote",
    "name"            : "example",
    "location"        : "https://localhost/svn/example",
    "build"           : "make",
    "test"            : "/some/path/run.sh",
    "outputdirectory" : "/some/path/",
    "notifyemail"     : "my.exmail@example.com",
    "description"     : "Build Example and then run unit tests, then a long test"

Key explanations:

 - repository: either svn or git,
 - source: remote or local. You can name a branch by appending /<branch_name> to the usual text.
 - name: name of the repository,
 - location: if source is set to local, enter a valid local path to repository, or an URL if source is remote,
 - build: the command to execute after code checkout is done,
 - test: the command to execute after build is done,
 - outputdirectory: path where to out output files for checkout, build and test. The filename is composed of {name}-{checkout|build|test}-output.txt
 - notifyemail - the email to use when sending fail notices or an empty string for no notifications
 - description - a short description of the repository, mainly used by gitw-http.

Configuring Subversion for gitw

Using gitw (https://github.com/napsy/gitw), automated testing could be done:

Navigate to your repository's hooks directory. This is almost always a directory cleverly named 'hooks' right inside the top level of your repository:

cd /Users/mwest/svn/my_repository/hooks/

Use the subversion-post-commit.example file (located in repository) for the post-commit script. The script will notify the gitw server whenever a commit will occur on the SVN server. Rename the file to 'post-commit' after putting it into the 'hooks' directory.
Make sure the file is executable and owned by the right user.