Skip to content

Instantly share code, notes, and snippets.

@02JanDal
Created March 22, 2015 20:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 02JanDal/bc850fe5b1648105f6f2 to your computer and use it in GitHub Desktop.
Save 02JanDal/bc850fe5b1648105f6f2 to your computer and use it in GitHub Desktop.
#!/bin/sh
##### HELPERS #####
function update_git() # dir url branch
{
dir=$1
url=$2
branch=$3
if [ -d $dir ]; then
echo 'Fetching existing git repo'
cd $dir
git fetch 2>&1 | sed "s/^/ /"
if git checkout $branch 2> /dev/null > /dev/null; then
git reset --hard origin/$branch 2>&1 | sed "s/^/ /"
else
git checkout -b $branch 2>&1 | sed "s/^/ /"
fi
else
echo 'Cloning new git repo'
git clone $url $dir 2>&1 | sed "s/^/ /"
cd $dir
if ! git checkout $branch 2>&1 | sed "s/^/ /"; then git checkout -b $branch 2>&1 | sed "s/^/ /"; fi
fi
}
##### CONFIGURATION #####
USER=MultiMC
REPO=WonkoTheSane
SLEEP=60s # How long to sleep between polls
BRANCH=master
##### BUILDING #####
function build() # branch
{
SRC=$PWD
OUT=$PWD/../../02JanDal/WonkoTheSaneFiles
EXE=./main.rb
branch=$1
echo 'Retrieving existing files...'
cd ../..
update_git 02JanDal/WonkoTheSaneFiles git@github.com:02JanDal/WonkoTheSaneFiles.git $branch
cd $SRC
if [ -d files ]; then rm -rf files; fi
mkdir files
#cp -r $OUT/* files/
echo 'Cleaning...'
$EXE --invalidate-all | sed "s/^/ /"
echo 'Refreshing...'
$EXE --refresh-all | sed "s/^/ /"
echo 'Commiting changes...'
cd $OUT
find -type f | grep -vF ".git" | xargs git rm | sed "s/^/ /"
cp -r $SRC/files/* .
find -type f | grep -vF ".git" | xargs git add | sed "s/^/ /"
git commit -m "Updated by CI" | sed "s/^/ /"
git push origin $branch | sed "s/^/ /"
}
##### INITIAL SETUP #####
DIR=$PWD
REPO_DIR=$DIR/repos/$USER/$REPO/`echo $BRANCH | sed 's/\//_/'`
##### POLLING #####
while true; do
cd $DIR
touch headers
ETAG=`grep -F "ETag:" headers | grep -oP "\".*\""`
curl https://api.github.com/repos/$USER/$REPO/branches/$BRANCH -s -H "If-None-Match: $ETAG" -D headers > data.tmp
echo "Requests remaining: `grep -F X-RateLimit-Remaining: headers | grep -oP "\d*"`, next reset: $(date --date="@`grep -F X-RateLimit-Reset: headers | grep -oP "\d*"`" +%H:%M:%S)"
if ! grep -qF 304 headers
then
mv data.tmp data
else
rm data.tmp
fi
LATEST_COMMIT=`grep -F \"sha\": data | head -n1 | grep -oP "[a-f0-9]{10,100}"`
CURRENT_COMMIT=`if [ -d $REPO_DIR ]; then cd $REPO_DIR && git rev-parse HEAD; fi`
if ! [ "$LATEST_COMMIT" = "$CURRENT_COMMIT" ]; then
update_git $REPO_DIR git@github.com:$USER/$REPO.git $BRANCH
cd $REPO_DIR
echo 'Building...'
build $BRANCH | sed "s/^/ /"
echo 'Done.'
fi
sleep $SLEEP
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment