diff --git a/update-nixpkgs.sh b/update-nixpkgs.sh new file mode 100755 index 00000000..ea4a7375 --- /dev/null +++ b/update-nixpkgs.sh @@ -0,0 +1,83 @@ +#!/bin/bash - +#=============================================================================== +# +# FILE: update-nixpkgs.sh +# +# USAGE: ./update-nixpkgs.sh +# +# DESCRIPTION: Update servant packages in nixpkgs. +# +# OPTIONS: -d +# REQUIREMENTS: cabal2nix, git, hub +# BUGS: --- +# NOTES: --- +# AUTHOR: Julian Arni , +# ORGANIZATION: Zalora SEA +# CREATED: 09.01.2015 15:38 +# REVISION: --- +#=============================================================================== + +set -o nounset +set -e + +# Variables +declare -ar -x PKGS=(servant servant-client servant-server servant-jquery servant-docs) +declare -a CHANGED + +PKG_NO=${#PKGS[@]} +GIT_DIR=$(mktemp -d) +FORK="" +BRANCH_NAME=servant-changes +HASKELL_LIBS=pkgs/development/libraries/haskell + +cleanup () { + echo "Removing temporary directory $GIT_DIR" + rm -rf $GIT_DIR +} + +while getopts f: OPT ; do + case $OPT in + f) FORK=$OPTARG ;; + esac +done + +# Check if we can proceed + +if [[ -z "$FORK" ]] ; then + echo "Your fork must be specified with -f FORK" + exit 1 +fi + +cd $GIT_DIR + +git clone --depth 1 git@github.com:NixOS/nixpkgs.git && cd nixpkgs + +trap cleanup INT TERM EXIT + +for ((i = 0 ; i < PKG_NO ; i++ )); do + PKG=${PKGS[$i]} + echo -n "Checking $PKG... " + FILE="pkgs/development/libraries/haskell/$PKG/default.nix" + TEMPFILE=$(tempfile) + cabal2nix cabal://$PKG >> $TEMPFILE + if [[ -n "$(diff -q $TEMPFILE $FILE)" ]] ; then + CHANGED+=( $PKG ) + echo "Package updated" + cat $TEMPFILE > $FILE + else + echo "No changes" + fi + rm $TEMPFILE +done + +git checkout -b $BRANCH_NAME + +if [[ ${#CHANGED[@]} -ne 0 ]]; then + git add pkgs/development/libraries/haskell + git commit -m "Updated haskell packages ${CHANGED[@]}" + git remote add fork $FORK + git push fork $BRANCH_NAME + hub pull-request +fi + +cleanup