From d96d4d16706f295af4f5e1df201a683606f2f108 Mon Sep 17 00:00:00 2001 From: danix Date: Wed, 19 Dec 2018 08:16:14 +0100 Subject: [PATCH] extra scripts are now separated from main create script. --- create | 78 +++++++++++------------------------------ gitbase/deploy.sh | 31 ++++++++++++++++ gitbase/pip_install | 14 ++++++++ gitbase/post-receive | 3 ++ gitbase/post-receive-py | 4 +++ 5 files changed, 73 insertions(+), 57 deletions(-) create mode 100644 gitbase/deploy.sh create mode 100644 gitbase/pip_install create mode 100644 gitbase/post-receive create mode 100644 gitbase/post-receive-py diff --git a/create b/create index f3fa041..a98db20 100755 --- a/create +++ b/create @@ -4,6 +4,7 @@ # this command will setup the repo and send a mail for confirmation. GITDIR="/var/git" +BASEDIR=".gitbase" MULTIMAIL="/usr/doc/git-2.14.5/contrib/hooks/multimail/git_multimail.py" GITUSER="git" GITGRP="git" @@ -33,32 +34,28 @@ function git_init() { echo "Remember to insert a README.md file to explain what your project is about." mkdir custom-hooks ln -s $MULTIMAIL custom-hooks/git_multimail.py - touch hooks/post-receive - cat > hooks/post-receive < custom-hooks/pip_install << EOPIP -#!/bin/sh -while read oldrev newrev refname; do - if [[ \$refname =~ .*/master$ ]]; then - # definitely updating master; - CHECKFILE=\$(git ls-tree --full-tree -r HEAD |grep requirements.txt |awk '{print \$3}') - TMPREQ=\$(git cat-file -p \$CHECKFILE > /tmp/${PROJECT}-req.txt) - if [ \$CHECKFILE ]; then - ${VENVSDIR}/${PROJECT}/bin/pip install -r /tmp/${PROJECT}-req.txt - fi - if git diff-tree --name-only -r -z \$oldrev \$newrev \$CHECKFILE; then - ${VENVSDIR}/${PROJECT}/bin/pip install -r /tmp/${PROJECT}-req.txt - fi - fi -done -EOPIP + # if yes + cp ${GITDIR}/${BASEDIR}/post-receive-py hooks/post-receive + sed -i "s|{{GITDIR}}|${GITDIR}|g" hooks/post-receive + sed -i "s|{{PROJECT}}|${PROJECT}|g" hooks/post-receive + cp ${GITDIR}/${BASEDIR}/pip_install custom-hooks/pip_install + sed -i "s|{{VENVSDIR}}|${VENVSDIR}|g" custom-hooks/pip_install + sed -i "s|{{PROJECT}}|${PROJECT}|g" custom-hooks/pip_install + chmod 0755 custom-hooks/pip_install + else + # otherwise + cp ${GITDIR}/${BASEDIR}/post-receive hooks/post-receive + sed -i "s|{{GITDIR}}|${GITDIR}|g" hooks/post-receive + sed -i "s|{{PROJECT}}|${PROJECT}|g" hooks/post-receive fi + # in any case we setup so that we can deploy + cp ${GITDIR}/${BASEDIR}/deploy.sh custom-hooks/deploy.sh + sed -i "s|{{GITDIR}}|${GITDIR}|g" custom-hooks/deploy.sh + sed -i "s|{{PROJECT}}|${PROJECT}|g" custom-hooks/deploy.sh + # add multimail settings to config cat >> config < custom-hooks/deploy.sh < description cd ${GITDIR}/ diff --git a/gitbase/deploy.sh b/gitbase/deploy.sh new file mode 100644 index 0000000..6ee3a17 --- /dev/null +++ b/gitbase/deploy.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Directory where to deploy files from repository +DPTARGET="" +# Directory containing repository +DPGIT_DIR="{{GITDIR}}/{{PROJECT}}.git" +# Branch that is going to be deployed to server +DPBRANCH="master" + +while read oldrev newrev ref +do + # if DPTARGET is empty we don't want deploy for this project + if [[ ! "" == $DPTARGET ]]; then + # let's check that we are deploying to the correct branch + if [[ $ref = refs/heads/${DPBRANCH} ]]; then + echo "Ref $ref received. Deploying ${DPBRANCH} branch to production..." + git --work-tree=$DPTARGET --git-dir=$DPGIT_DIR checkout -f $DPBRANCH + NOW=$(date +"%d%m%Y-%H%M") + git tag release_$NOW $DPBRANCH + echo " /===============================" + echo " | DEPLOYMENT COMPLETED" + echo " | Target branch: $DPTARGET" + echo " | Target folder: $DPGIT_DIR" + echo " | Tag name : release_$NOW" + echo " \==============================" + else + echo "Ref $ref received. Doing nothing: only the ${DPBRANCH} branch may be deployed on this server." + fi + else + echo "Target directory not declared. Skipping deploy to server." + fi +done diff --git a/gitbase/pip_install b/gitbase/pip_install new file mode 100644 index 0000000..07a6374 --- /dev/null +++ b/gitbase/pip_install @@ -0,0 +1,14 @@ +#!/bin/sh +while read oldrev newrev refname; do + if [[ $refname =~ .*/master$ ]]; then + # definitely updating master; + CHECKFILE=$(git ls-tree --full-tree -r HEAD |grep requirements.txt |awk '{print $3}') + TMPREQ=$(git cat-file -p $CHECKFILE > /tmp/{{PROJECT}}-req.txt) + if [ $CHECKFILE ]; then + {{VENVSDIR}}/{{PROJECT}}/bin/pip install -r /tmp/{{PROJECT}}-req.txt + fi + if git diff-tree --name-only -r -z $oldrev $newrev $CHECKFILE; then + {{VENVSDIR}}/{{PROJECT}}/bin/pip install -r /tmp/{{PROJECT}}-req.txt + fi + fi +done diff --git a/gitbase/post-receive b/gitbase/post-receive new file mode 100644 index 0000000..d9da8cb --- /dev/null +++ b/gitbase/post-receive @@ -0,0 +1,3 @@ +#!/bin/sh +/usr/bin/pee {{GITDIR}}/{{PROJECT}}.git/custom-hooks/deploy.sh \ + {{GITDIR}}/{{PROJECT}}.git/custom-hooks/git_multimail.py diff --git a/gitbase/post-receive-py b/gitbase/post-receive-py new file mode 100644 index 0000000..37ac6cf --- /dev/null +++ b/gitbase/post-receive-py @@ -0,0 +1,4 @@ +#!/bin/sh +/usr/bin/pee {{GITDIR}}/{{PROJECT}}.git/custom-hooks/deploy.sh \ + {{GITDIR}}/{{PROJECT}}.git/custom-hooks/pip_install \ + {{GITDIR}}/{{PROJECT}}.git/custom-hooks/git_multimail.py -- 2.20.1