diff options
author | Oliver Poignant <oliver@poignant.se> | 2016-03-11 23:48:52 +0100 |
---|---|---|
committer | Oliver Poignant <oliver@poignant.se> | 2016-03-11 23:48:52 +0100 |
commit | 87797cfbb4d0b640997e3501144ca2f59b55baae (patch) | |
tree | 24cf592540c04b34862979c7f17337e908f27bea | |
parent | 65e382c3909841766c8c7ebc64cb74e4dbf1d990 (diff) | |
download | Git-Auto-Deploy-87797cfbb4d0b640997e3501144ca2f59b55baae.zip Git-Auto-Deploy-87797cfbb4d0b640997e3501144ca2f59b55baae.tar.gz Git-Auto-Deploy-87797cfbb4d0b640997e3501144ca2f59b55baae.tar.bz2 |
Debian packaging setup
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | bin/gad-generate-config | 8 | ||||
-rwxr-xr-x | bin/gad-server | 9 | ||||
-rw-r--r-- | debian/changelog | 5 | ||||
-rw-r--r-- | debian/control | 17 | ||||
-rw-r--r-- | docs/Useful commands.md | 6 | ||||
-rw-r--r-- | gitautodeploy/gitautodeploy.py | 21 | ||||
-rwxr-xr-x | platforms/debian/scripts/create-debian-package.sh | 53 | ||||
-rw-r--r-- | platforms/debian/stdeb/compat (renamed from debian/compat) | 0 | ||||
-rw-r--r-- | platforms/debian/stdeb/conffiles | 0 | ||||
-rw-r--r-- | platforms/debian/stdeb/control | 17 | ||||
-rwxr-xr-x | platforms/debian/stdeb/git-auto-deploy.init | 152 | ||||
-rw-r--r-- | platforms/debian/stdeb/git-auto-deploy.install | 1 | ||||
-rwxr-xr-x | platforms/debian/stdeb/git-auto-deploy.postinst | 39 | ||||
-rwxr-xr-x | platforms/debian/stdeb/git-auto-deploy.prerm | 1 | ||||
-rwxr-xr-x | platforms/debian/stdeb/rules (renamed from debian/rules) | 8 | ||||
-rw-r--r-- | platforms/debian/stdeb/source/format (renamed from debian/source/format) | 0 | ||||
-rw-r--r-- | platforms/debian/stdeb/source/options (renamed from debian/source/options) | 0 | ||||
-rw-r--r-- | setup.py | 4 | ||||
-rw-r--r-- | stdeb.cfg | 2 |
20 files changed, 293 insertions, 51 deletions
@@ -68,3 +68,4 @@ GitAutoDeploy.conf.json # Ignore deb_dist *.tar.gz +MANIFEST diff --git a/bin/gad-generate-config b/bin/gad-generate-config deleted file mode 100644 index dc556f6..0000000 --- a/bin/gad-generate-config +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python - -if __name__ == '__main__': - import sys - import os - sys.path.append(os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../'))) - from gitautodeploy.cli import generate_config - generate_config() diff --git a/bin/gad-server b/bin/gad-server deleted file mode 100755 index 0d3e492..0000000 --- a/bin/gad-server +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python - -if __name__ == '__main__': - import sys - import os - sys.path.append(os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../'))) - import gitautodeploy - - gitautodeploy.main() diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index d70e2f1..0000000 --- a/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -git-auto-deploy (0.2.0-1) unstable; urgency=low - - * source package automatically created by stdeb 0.8.5 - - -- Oliver Poignant <oliver@poignant.se> Tue, 08 Mar 2016 22:44:44 +0100 diff --git a/debian/control b/debian/control deleted file mode 100644 index b61ef5c..0000000 --- a/debian/control +++ /dev/null @@ -1,17 +0,0 @@ -Source: git-auto-deploy -Maintainer: Oliver Poignant <oliver@poignant.se> -Section: python -Priority: optional -Build-Depends: python-setuptools (>= 0.6b3), python-all (>= 2.6.6-3), debhelper (>= 7.4.3) -Standards-Version: 3.9.1 - - - -Package: python-git-auto-deploy -Architecture: all -Depends: ${misc:Depends}, ${python:Depends} -Description: Deploy your GitHub, GitLab or Bitbucket projects automatical - - - - diff --git a/docs/Useful commands.md b/docs/Useful commands.md index 37b39c6..fb25613 100644 --- a/docs/Useful commands.md +++ b/docs/Useful commands.md @@ -1,7 +1,11 @@ # Create debian package +apt-get install python-stdeb fakeroot python-all + https://pypi.python.org/pypi/stdeb/0.8.5 -python setup.py --command-packages=stdeb.command bdist_deb +python setup.py --command-packages=stdeb.command –package=git-auto-deploy bdist_deb +python setup.py --command-packages=stdeb.command sdist_dsc bdist_deb + # Debianize python setup.py --command-packages=stdeb.command debianize diff --git a/gitautodeploy/gitautodeploy.py b/gitautodeploy/gitautodeploy.py index f7008ac..a618d40 100644 --- a/gitautodeploy/gitautodeploy.py +++ b/gitautodeploy/gitautodeploy.py @@ -94,11 +94,13 @@ class GitAutoDeploy(object): # Add current CWD if not identical to script path if not os.getcwd() in target_directories: target_directories.append(os.getcwd()) - + target_directories.reverse() # Look for a *conf.json or *config.json for dir in target_directories: + if not os.access(dir, os.R_OK): + continue for item in os.listdir(dir): if re.match(r".*conf(ig)?\.json$", item): path = os.path.realpath(os.path.join(dir, item)) @@ -106,10 +108,11 @@ class GitAutoDeploy(object): return path return - + def read_json_file(self, file_path): import json import logging + import re logger = logging.getLogger() try: @@ -120,7 +123,19 @@ class GitAutoDeploy(object): raise e try: - data = json.loads(json_string) + # Remove commens from JSON (makes sample config options easier) + regex = r'\s*(#|\/{2}).*$' + regex_inline = r'(:?(?:\s)*([A-Za-z\d\.{}]*)|((?<=\").*\"),?)(?:\s)*(((#|(\/{2})).*)|)$' + lines = json_string.split('\n') + + for index, line in enumerate(lines): + if re.search(regex, line): + if re.search(r'^' + regex, line, re.IGNORECASE): + lines[index] = "" + elif re.search(regex_inline, line): + lines[index] = re.sub(regex_inline, r'\1', line) + + data = json.loads('\n'.join(lines)) except Exception as e: logger.critical("%s file is not valid JSON\n" % file_path) diff --git a/platforms/debian/scripts/create-debian-package.sh b/platforms/debian/scripts/create-debian-package.sh new file mode 100755 index 0000000..9043cf0 --- /dev/null +++ b/platforms/debian/scripts/create-debian-package.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# +# This script compiles a binary Debian package (.deb) +# + +# Get current path +ORIGINAL_CWD=`pwd -P` + +# Get script path (<path>/Git-Auto-Deploy/platforms/debian/scripts) +pushd `dirname $0` > /dev/null +SCRIPT_PATH=`pwd -P` +popd > /dev/null + +# Path to Git-Auto-Deploy project directory +PROJECT_PATH=`readlink -f $SCRIPT_PATH/../../../` +cd $PROJECT_PATH + +# Get package name and version +PACKAGE_NAME=`python setup.py --name` +PACKAGE_VERSION=`python setup.py --version` + +# Generate a Debian source package +echo +echo "** Generating a Debian source package **" +python setup.py --command-packages=stdeb.command sdist_dsc + +# Path to newly generated deb_dist directory +TARGET=`readlink -f "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION"` + +# Copy configuration files +echo +echo "** Copying configuration files **" +cp -vr "$PROJECT_PATH/platforms/debian/stdeb"/* "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/" +#cp -vrp "$PROJECT_PATH/platforms/debian/etc"/* "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/" +#cp -vrp "$PROJECT_PATH/platforms/debian/etc"/* "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/source" +#mkdir "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/gitautodeploy" +#mkdir "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/git-auto-deploy" +#mkdir "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/tmp" +#cp -vrp "$PROJECT_PATH/platforms/debian/etc"/* "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/gitautodeploy" +#cp -vrp "$PROJECT_PATH/platforms/debian/etc"/* "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/debian/tmp" +#cp -vrp "$PROJECT_PATH/platforms/debian/etc"/* "$PROJECT_PATH/deb_dist/$PACKAGE_NAME-$PACKAGE_VERSION/gitautodeploy" + +# Copile a Debian binary package +echo +echo "** Compiling a Debian binary package **" +cd "$PROJECT_PATH/deb_dist/"* + +#dpkg-source --commit + +dpkg-buildpackage -rfakeroot -uc -us + +# Restore cwd +cd $ORIGINAL_CWD
\ No newline at end of file diff --git a/debian/compat b/platforms/debian/stdeb/compat index 7f8f011..7f8f011 100644 --- a/debian/compat +++ b/platforms/debian/stdeb/compat diff --git a/platforms/debian/stdeb/conffiles b/platforms/debian/stdeb/conffiles new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/platforms/debian/stdeb/conffiles diff --git a/platforms/debian/stdeb/control b/platforms/debian/stdeb/control new file mode 100644 index 0000000..e436648 --- /dev/null +++ b/platforms/debian/stdeb/control @@ -0,0 +1,17 @@ +Source: git-auto-deploy +Maintainer: Oliver Poignant <oliver@poignant.se> +Section: python +Priority: optional +Build-Depends: python-all (>= 2.6.6-3), debhelper (>= 7) +Standards-Version: 3.9.1 + + + +Package: git-auto-deploy +Architecture: all +Depends: ${misc:Depends}, ${python:Depends} +Description: Deploy your GitHub, GitLab or Bitbucket projects automatical + GitAutoDeploy consists of a HTTP server that listens for Web hook requests sent from GitHub, GitLab or Bitbucket servers. This application allows you to continuously and automatically deploy you projects each time you push new commits to your repository. + + + diff --git a/platforms/debian/stdeb/git-auto-deploy.init b/platforms/debian/stdeb/git-auto-deploy.init new file mode 100755 index 0000000..3d7f0bf --- /dev/null +++ b/platforms/debian/stdeb/git-auto-deploy.init @@ -0,0 +1,152 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: gitautodeploy +# Required-Start: $remote_fs $syslog $network +# Required-Stop: $remote_fs $syslog $network +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Script to start Autodeploy Git +# Description: Autodeploy script for Gitlab +### END INIT INFO + +# Author: JA Nache <nache.nache@gmail.com> + +NAME="git-auto-deploy" +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="GitAutodeploy" +DAEMON="/usr/bin/git-auto-deploy" +DAEMON_UID="git-auto-deploy" +DAEMON_GID="git-auto-deploy" +RUNDIR=/var/run/$NAME +PIDFILE=/var/run/$NAME/$NAME.pid +#PWD=/opt/Git-Auto-Deploy/ +OPTIONS="--daemon-mode --pid-file $PIDFILE --config /etc/$NAME.conf.json" +SCRIPTNAME="/etc/init.d/$NAME" + +# Exit if the package is not installed +#[ -x $DAEMON ] || echo "$name is not installed" && exit 0 + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +. /lib/lsb/init-functions + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME || ENABLE_GITAUTODEPLOY=yes + +# +# Check whether daemon starting is enabled +# +check_start_daemon() { + if [ ! "$ENABLE_GITAUTODEPLOY" = "yes" ]; then + [ "$VERBOSE" != no ] && \ + log_warning_msg "Not starting gitautodeploy, disabled via /etc/default/gitautodeploy" + return 1 + else + return 0 + fi +} + +# +# Function that starts the daemon/service +# +do_start() +{ + echo "Starting.." + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + + if [ ! -d $RUNDIR ]; then + mkdir $RUNDIR + fi + + if ! dpkg-statoverride --list $dir >/dev/null 2>&1; then + chown $DAEMON_UID:$DAEMON_GID $RUNDIR + chmod g-w,o-rwx $RUNDIR + fi + + start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $DAEMON \ + --name $NAME --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --startas $DAEMON \ + --name $NAME --umask 0027 --chuid $DAEMON_UID:$DAEMON_GID -- $OPTIONS \ + || return 2 +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + echo "Stopping.." + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --signal 6 --retry 30 --pidfile $PIDFILE +} + +# +# Function that reload the daemon/service +# +do_reload() +{ + echo "Reloading.." + start-stop-daemon --stop -s 1 --pidfile $PIDFILE +} + +case "$1" in + start) + check_start_daemon || exit 0 + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc -p $PIDFILE "python" "$DAEMON" && exit 0 || exit $? + + ;; + reload) + do_reload + ;; + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: + diff --git a/platforms/debian/stdeb/git-auto-deploy.install b/platforms/debian/stdeb/git-auto-deploy.install new file mode 100644 index 0000000..cbe91a4 --- /dev/null +++ b/platforms/debian/stdeb/git-auto-deploy.install @@ -0,0 +1 @@ +gitautodeploy/data/git-auto-deploy.conf.json etc diff --git a/platforms/debian/stdeb/git-auto-deploy.postinst b/platforms/debian/stdeb/git-auto-deploy.postinst new file mode 100755 index 0000000..c5a2af0 --- /dev/null +++ b/platforms/debian/stdeb/git-auto-deploy.postinst @@ -0,0 +1,39 @@ +#!/bin/bash + +NAME="git-auto-deploy" +GAD_UID="git-auto-deploy" +GAD_GID="git-auto-deploy" + +CONF_DIR="/etc/$NAME" +DATA_DIR="/var/lib/$NAME" +PID_DIR="/var/run/$NAME" + +# Add user and group +adduser --quiet --system --home $CONF_DIR --no-create-home --ingroup nogroup --disabled-password $GAD_UID +addgroup --system $GAD_GID +adduser $GAD_UID $GAD_GID + +# Create config dir +mkdir -p $CONF_DIR +chown -R $GAD_UID:$GAD_GID $CONF_DIR +chmod 750 $CONF_DIR + +# Create log file +touch /var/log/$NAME.log +chown $GAD_UID:$GAD_GID /var/log/$NAME.log +chmod 750 /var/log/$NAME.log + +# Create data directory +mkdir -p $DATA_DIR +chown -R $GAD_UID:$GAD_GID $DATA_DIR +chmod 750 $DATA_DIR + +# Create pid file +mkdir -p $PID_DIR +chown -R $GAD_UID:$GAD_GID $PID_DIR +chmod 750 $PID_DIR +touch $PID_DIR/$NAME.pid +chown $GAD_UID:$GAD_GID $PID_DIR/$NAME.pid +chmod 750 $PID_DIR/$NAME.pid + +update-rc.d $NAME defaults diff --git a/platforms/debian/stdeb/git-auto-deploy.prerm b/platforms/debian/stdeb/git-auto-deploy.prerm new file mode 100755 index 0000000..a9bf588 --- /dev/null +++ b/platforms/debian/stdeb/git-auto-deploy.prerm @@ -0,0 +1 @@ +#!/bin/bash diff --git a/debian/rules b/platforms/debian/stdeb/rules index e127a70..27cda30 100755 --- a/debian/rules +++ b/platforms/debian/stdeb/rules @@ -1,7 +1,7 @@ #!/usr/bin/make -f # This file was automatically generated by stdeb 0.8.5 at -# Tue, 08 Mar 2016 22:44:44 +0100 +# Thu, 10 Mar 2016 19:52:51 +0100 %: dh $@ --with python2 --buildsystem=python_distutils @@ -19,13 +19,9 @@ override_dh_auto_build: override_dh_auto_install: - python setup.py install --force --root=debian/python-git-auto-deploy --no-compile -O0 --install-layout=deb + python setup.py install --force --root=debian/git-auto-deploy --no-compile -O0 --install-layout=deb override_dh_python2: dh_python2 --no-guessing-versions - - - - diff --git a/debian/source/format b/platforms/debian/stdeb/source/format index 163aaf8..163aaf8 100644 --- a/debian/source/format +++ b/platforms/debian/stdeb/source/format diff --git a/debian/source/options b/platforms/debian/stdeb/source/options index bcc4bbb..bcc4bbb 100644 --- a/debian/source/options +++ b/platforms/debian/stdeb/source/options @@ -6,10 +6,10 @@ setup(name='git-auto-deploy', author='Oliver Poignant', author_email='oliver@poignant.se', packages = find_packages(), + package_data={'gitautodeploy': ['data/*']}, entry_points={ 'console_scripts': [ - 'gad-server = gitautodeploy.__main__:main', - 'gad-generate-config = gitautodeploy.cli:generate_config' + 'git-auto-deploy = gitautodeploy.__main__:main' ] }, description = "Deploy your GitHub, GitLab or Bitbucket projects automatically on Git push events or webhooks.", diff --git a/stdeb.cfg b/stdeb.cfg new file mode 100644 index 0000000..10ce100 --- /dev/null +++ b/stdeb.cfg @@ -0,0 +1,2 @@ +[DEFAULT] +Package: git-auto-deploy |