From 01df764eaf1879da05f76e4a627e7fb562995384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohnic=CC=81?= Date: Mon, 28 May 2012 20:46:49 +0200 Subject: [PATCH] add scripts to help with release process --- Rakefile | 36 ++++++++++++++++++++++++++++++++++++ git-hooks/changed-version.sh | 14 ++++++++++++++ git-hooks/commit-msg.sh | 11 +++++++++++ git-hooks/install | 16 ++++++++++++++++ git-hooks/pre-commit.sh | 13 +++++++++++++ 5 files changed, 90 insertions(+) create mode 100644 git-hooks/changed-version.sh create mode 100644 git-hooks/commit-msg.sh create mode 100755 git-hooks/install create mode 100644 git-hooks/pre-commit.sh diff --git a/Rakefile b/Rakefile index 906c1c94..f3e9282d 100644 --- a/Rakefile +++ b/Rakefile @@ -115,6 +115,12 @@ task :install => "hub" do FileUtils.cp "man/hub.1", "#{prefix}/share/man/man1" end +# +# Release +# + +task :release => [:pages, :gem_release, :homebrew] + desc "Copy files to gh-pages branch, but don't publish" task :gh_pages => [:check_dirty, "hub", "man/hub.1.html"] do cp "man/hub.1.html", "html" @@ -133,3 +139,33 @@ task :pages => :gh_pages do sh "git checkout master" puts "Done." end + +task :gem_release do + sh "gem release -t" +end + +desc "Publish to Homebrew" +task :homebrew do + require File.expand_path('../lib/hub/version', __FILE__) + Dir.chdir `brew --prefix`.chomp do + sh 'git checkout -q master' + sh 'git pull -q origin master' + + formula_file = 'Library/Formula/hub.rb' + md5 = `curl -#L https://github.com/defunkt/hub/tarball/v#{Hub::VERSION} | md5`.chomp + abort unless $?.success? and md5.length == 32 + + formula = File.read formula_file + formula.sub! /\bv\d+(\.\d+)*/, "v#{Hub::VERSION}" + formula.sub! /\b[0-9a-f]{32}\b/, md5 + File.open(formula_file, 'w') {|f| f << formula } + + branch = "hub-v#{Hub::VERSION}" + sh "git checkout -q -B #{branch}" + sh "git commit -m 'upgrade hub to v#{Hub::VERSION}' -- #{formula_file}" + sh "git push -u mislav #{branch}" + sh "hub pull-request 'upgrade hub to v#{Hub::VERSION}'" + + sh "git checkout -q master" + end +end diff --git a/git-hooks/changed-version.sh b/git-hooks/changed-version.sh new file mode 100644 index 00000000..89cf31a2 --- /dev/null +++ b/git-hooks/changed-version.sh @@ -0,0 +1,14 @@ +#!/bin/bash +## If version file is staged to be committed, display the new version number. + +version_file="${1:-lib/hub/version.rb}" + +if git rev-parse --verify HEAD >/dev/null 2>&1; then + if git diff-index --quiet --cached HEAD -- "$version_file"; then + exit 1 + else + git cat-file blob ":$version_file" | grep VERSION | head -1 | cut -d\' -f2 + fi +else + exit 1 +fi diff --git a/git-hooks/commit-msg.sh b/git-hooks/commit-msg.sh new file mode 100644 index 00000000..267050b8 --- /dev/null +++ b/git-hooks/commit-msg.sh @@ -0,0 +1,11 @@ +#!/bin/bash +## Checks that commit that changes version number includes it in subject line. + +set -e + +new_version="$("$(dirname "$0")"/changed-version)" || exit 0 + +head -1 "$1" | grep "$new_version" >/dev/null || { + echo "aborted: version $new_version not present in subject line" + exit 1 +} diff --git a/git-hooks/install b/git-hooks/install new file mode 100755 index 00000000..68625272 --- /dev/null +++ b/git-hooks/install @@ -0,0 +1,16 @@ +#!/bin/bash +## Installs the provided hooks in the current git repo + +set -e + +hooks_dir="$(git rev-parse --git-dir)/hooks" +source_dir="$(dirname "$0")" + +for file in "$source_dir"/*.sh; do + dest="${hooks_dir}/$(basename "$file" .sh)" + [[ ! $dest -nt $file ]] && \ + cp -v "$file" "$dest" && \ + chmod +x "$dest" +done + +exit 0 diff --git a/git-hooks/pre-commit.sh b/git-hooks/pre-commit.sh new file mode 100644 index 00000000..13db5947 --- /dev/null +++ b/git-hooks/pre-commit.sh @@ -0,0 +1,13 @@ +#!/bin/bash +## Prevents a commit that changes version but doesn't update HISTORY.md + +set -e + +new_version="$("$(dirname "$0")"/changed-version)" || exit 0 + +if git cat-file blob :HISTORY.md | head -1 | grep $new_version >/dev/null; then + exit 0 +else + echo "aborted: History.md is out of date" >&2 + exit 1 +fi -- GitLab