# 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"
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 <<EOPR
-#!/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
-EOPR
+ # check if we are creating a python project
if [ $USEVENV == true ]; then
- cat > 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 <<EOT
[multimailhook]
logFile = "/var/log/multimail.log"
errorLogFile = "/var/log/multimail_err.log"
EOT
- touch custom-hooks/deploy.sh
- cat > custom-hooks/deploy.sh <<EODP
-#!/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
-EODP
+ # fix permissions to post-receive and deploy.sh scripts
chmod 0755 hooks/post-receive custom-hooks/deploy.sh
echo $DESCRIPTION > description
cd ${GITDIR}/
--- /dev/null
+#!/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