Giter VIP home page Giter VIP logo

git-runner's Introduction

Git Runner

Code Climate Gem Version Dependency Status

Git Runner is a ruby framework to create and run tasks after commits are pushed to a git repository.

It works by having the git server-side post-update hook (hooks/post-update) invoke git-runner. Git Runner inspects all of the pushed branches (refs/heads/*) and looks for any Git Runner tasks (called instructions) to run. Such an instruction is Deploy, which allows for the application to be deployed after a push.

Git Runner instructions are distrubuted as separate gems, see Available Instructions below for what instructions are currently available for use.

Have a look at this short demonstration video for what it looks like for a user pushing to a Git Runner enabled repository (using git-runner-deploy).

Why?

Origins

Git Runner originated from a need to simplify the deployment process (capistrano) within my organisation for people who don't have their environments setup with ruby and the required gems. I wanted to make the process work for even those who are using GUI git clients.

Wouldn't a simple script do the job?

While you certainly could create a ruby script at hooks/post-update and have that run after a push with good results, Git Runner provides a robust framework for authoring re-usable tasks that you can share between all of your code repositories and run only when you need to run them.

You could do it all in a script of your own if you like, but Git Runner is there to help you out and make the process less error-prone and more maintainable.

How

After pushing to a git repository various server-side hooks are ran, including a hook named post-update. post-update needs to run git-runner with it's arguments.

Git Runner looks for pushes to any branches (refs/heads/*). For each branch it greps the repository for one or more Git Runner instructions within a instruction file.

The instruction file and instruction markers are configurable (see Configuration below), by default the configuration file is config/deploy.rb and Git Runner instructions begin with # GitRunner:, e.g.

# GitRunner: Deploy
... rest of the file ...

Instructions can be on any line within the instruction file and multiple instructions are present (instructions are ran in order).

Any instructions that are found within the instruction file are then processed and ran if able, with any messages being displayed to the user currently pushing the repository.

Any errors encountered will also be displayed with all relevent details being written to a log on the server.

Features

  • Robust framework for running tasks (instructions) after updates are made to a repository.
  • Have all of your tasks available to all of your repositories, only use the ones you need on a per repository basis.
  • Activiation through instructions contained within the repository.
  • Branch detection, behave differently for different branches if you like.
  • Simple authoring of additional instructions.
  • Error handling, notification and logging.

Available Instructions

Name Gem Description
Deploy git-runner-deploy Application deployment using capistrano

Requirements

  • git
  • Ruby 1.9
    • Developed and "tested" using 1.9.3 (formal testing incoming soon).
    • It might work with 1.8.7 if Object#tap is patched in.

Installation

This section needs a lot more fleshing out as installation overly trivial. The main thing to worry about is making sure that hooks/post-update in each of your repositories is able to run git-runner (and pass it's arguments on).

Install the git-runner

Install the gem and any other additional instruction gems that you need, for example if we want Git Runner with capistrano deploy support:

gem install git-runner
gem install git-runner-deploy

Hook up git-runner to fire on hooks/post-update

There are a few ways to accomplish this, such as directly symlinking hooks/post-update to the executable path for git-runner. Currently I prefer the following approach of creating a script that loads rubygems and git-runner + calls git runner. The following is the contents of my hooks/post-update file:

#!/usr/bin/env ruby

require 'rubygems'
require 'git-runner'

GitRunner::Base.new(ARGV).run

Configuration

Configuration can be changed through a YAML file at either /etc/git-runner.yml or $HOME/.git-runner.yml. The default configuration settings are:

Option Default Value Description
git_executable /usr/bin/env git Location of the git executable to use
instruction_file config/deploy.rb Where to look for Git Runner instructions within each repository
instruction_prefix # GitRunner: What Git Runner instructions will be prefixed with in the instruction file
tmp_directory /tmp/git-runner Working directory for git-runner

TODOs

  • TESTS!
  • Support to monitor a command (stdout and stderr) as the command is running, not just at the end.
  • Instruction file path is globally set, make this overwritable on a per-repository basis?
  • Instruction prefix is globally set, make this overwritable on a per-repository basis?
  • Have core functionality fire useful hooks.
  • Improve the output/text library, it can work better!
  • Simplify Base#run (CodeClimate)

Support

Check out GitHub Issues to see if anyone else has had the same problem you have, or create a new issue.

Also feel free to contact me directly (james at jamesbrooks dot net) for non-support comments or support of a more sensitive nature.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

git-runner's People

Contributors

gosuto-inzasheru avatar jamesbrooks avatar spohlenz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

git-runner's Issues

Usage instructions

This looks like a great project but I think the usage section of the README could do will a little work, what does "Symlink hooks/post-update to git-runner" mean, does it mean to symlink some file inside the gem?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.