diff --git a/client/autodeploy_client/Client.py b/client/autodeploy_client/Client.py index 10646ba..3bed9a1 100644 --- a/client/autodeploy_client/Client.py +++ b/client/autodeploy_client/Client.py @@ -125,4 +125,15 @@ def getCommitsDiff(self,workdir,commit,owner=''): for item in res.split("\n"): if item=="" or item=="Done" : continue result.append(item) + return result + + def getChangeLog(self, workdir, since,to, owner=''): + if owner == '': + owner = Config.Owner + msg = Job.createGetChangeLog(owner, workdir, self.scm,options={"since":since,"to":to}) + res = self._send(msg) + result = [] + for item in res.split("\n"): + if item == "" or item == "Done": continue + result.append(item) return result \ No newline at end of file diff --git a/client/autodeploy_client/ClientJob.py b/client/autodeploy_client/ClientJob.py index 2d410b6..fa6d7ac 100644 --- a/client/autodeploy_client/ClientJob.py +++ b/client/autodeploy_client/ClientJob.py @@ -150,6 +150,19 @@ def creategetCommitsDiffMessage(owner, workdir, commit, scm,options=None): f += '%s'%workdir f += '%s'%commit + if options: + f += '' + for option in options.keys(): + f += "" % (option, options[option]) + + f += "" + f += '' + return f + +def createGetChangeLog(owner,workdir,scm,options=None): + sec = base64.encodestring(importKey().encrypt(owner + scm + "LIST-CHANGES", "")[0]) + f = '\n' % (owner, "LIST-CHANGES", sec, scm) + f += '%s' % workdir if options: f += '' for option in options.keys(): diff --git a/server/Config.cfg b/server/Config.cfg index c836575..34fc44c 100755 --- a/server/Config.cfg +++ b/server/Config.cfg @@ -1,4 +1,4 @@ [Server] port: 4567 -publicKey: /home/mohamed/autoDeploy/autoDeploy/server/client.pub +publicKey: /home/mohamed/AutoDeploy/server/client.pub diff --git a/server/Request.py b/server/Request.py index 597e820..a115d9c 100755 --- a/server/Request.py +++ b/server/Request.py @@ -173,4 +173,24 @@ def parseSwitchCommitJob(message): def parseGetCommitDiff(message): - return parseSwitchCommitJob(message) \ No newline at end of file + return parseSwitchCommitJob(message) + +def parseGetChangeLog(message): + params = {} + optionsDict = {} + doc = xml.dom.minidom.parseString(message) + Job = doc.getElementsByTagName('job')[0] + scm = Job.getAttribute("scm") + workdir = getValue(Job, 'workdir') + + requestType = Job.getAttribute('type') + owner = Job.getAttribute('owner') + options = (Job.getElementsByTagName('option')) + for option in options: + name = option.getAttribute("name") + optionsDict[name] = option.firstChild.nodeValue + + print 'Recieved New Job from ' + owner + '.....' + params = {"workdir": workdir, "owner": owner, "requestType": requestType, + "scm": scm, "options": optionsDict} + return params \ No newline at end of file diff --git a/server/autodeploy-server.py b/server/autodeploy-server.py index b90b004..9e99c29 100755 --- a/server/autodeploy-server.py +++ b/server/autodeploy-server.py @@ -143,6 +143,26 @@ def HandleClient(clientsock): if job["scm"]=="git": gclient=git.GIT(workdir=job["workdir"]) cmd=gclient.commit_diff_cmd(commit=job["commit"]) + + elif req["requestType"]=="LIST-CHANGES": + job = Request.parseGetChangeLog(msg) + if job["scm"] == "git": + gclient = git.GIT(workdir=job["workdir"]) + cmd = gclient.get_changelog(since=job["options"]["since"], to=job["options"]["to"]) + result = [] + res = Common.run(cmd) + print res + if "ERR:" in res: + Response.sendData(clientsock, res) + else: + for line in res.split("\n"): + try: + if line != "": + result.append(line.replace("*", "").strip()) + except: + pass + print result + Response.sendData(clientsock, "\n".join(result)) elif req["requestType"]=="DEPLOY": print msg job = Request.parseDeployJob(msg) diff --git a/server/scm/Git.py b/server/scm/Git.py index a815716..4498610 100644 --- a/server/scm/Git.py +++ b/server/scm/Git.py @@ -42,3 +42,6 @@ def switch_to_histroy_cmd(self,commit): def commit_diff_cmd(self,commit): Common.run(self.get_pull_cmd()) return 'git rev-list %s..HEAD'%(commit) + def get_changelog(self,since,to): + return "cd %s;git shortlog %s..%s"%(self.workdir,since,to) + diff --git a/webapp/autoDeploy/autodeploy/api.py b/webapp/autoDeploy/autodeploy/api.py index ee6416e..cac9641 100644 --- a/webapp/autoDeploy/autodeploy/api.py +++ b/webapp/autoDeploy/autodeploy/api.py @@ -31,6 +31,7 @@ def deploy(request): import Common server = Server.objects.get(name=request.session["deploy_server"]) project = Project.objects.get(name=request.session["deploy_project"]) + last_Deployment=Deployment_Server.objects.filter(server=server,project=project).latest() D= Deployment_Server() c = Client(str(project.repo_type), server.ip, server.port) D.project = project @@ -60,14 +61,36 @@ def deploy(request): link="http://"+server.DNS+project.deployment_link print link if project.emailUsers!="" or project.emailUsers!=" ": -# for user in project.emailUsers.split(","): - Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,
This is an automated notification that a new version of %s has been deployed at: %s"%(project.name,link),fromUser=None,cc="",bcc="",) + changes=c.getChangeLog(project.working_dir,since=last_Deployment.update_version,to=request.GET["commit"]) + changes_text="

Changes

" + else: + changes_text="" + Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,
This is an automated notification that a new version of %s has been deployed at: %s
%s"%(project.name,link,changes_text),fromUser=None,cc="",bcc="",) return HttpResponse(res+",,"+link) else: print "in else" link=project.deployment_link if project.emailUsers!="" or project.emailUsers!=" ": - Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,
This is an automated notification that a new version of %s has been deployed at: %s"%(project.name,link),fromUser=None,cc="",bcc="",) + changes=c.getChangeLog(project.working_dir,since=last_Deployment.update_version,to=request.GET["commit"]) + changes_text="

Changes

" + else: + changes_text = "" + + Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,
This is an automated notification that a new version of %s has been deployed at: %s.
%s"%(project.name,link,changes_text),fromUser=None,cc="",bcc="",) return HttpResponse(res+",,"+link) else: return HttpResponse(res) diff --git a/webapp/autoDeploy/autodeploy/models.py b/webapp/autoDeploy/autodeploy/models.py index 242ea3d..15d32a9 100644 --- a/webapp/autoDeploy/autodeploy/models.py +++ b/webapp/autoDeploy/autodeploy/models.py @@ -55,6 +55,9 @@ class Deployment_Server(models.Model): project = models.ForeignKey(Project) server = models.ForeignKey(Server) + class Meta: + get_latest_by="id" + class Plugins(models.Model): name=models.CharField(max_length=50) settings=models.TextField() diff --git a/webapp/autoDeploy/media/AutoDeploy/autodeploy.yaml b/webapp/autoDeploy/media/AutoDeploy/autodeploy.yaml deleted file mode 100644 index f0ee7f2..0000000 --- a/webapp/autoDeploy/media/AutoDeploy/autodeploy.yaml +++ /dev/null @@ -1,18 +0,0 @@ -files: - - source: /webapp/autoDeploy/* - destination: /var/www/autodeploy/ - -permissions: - - object: /var/www/autodeploy/ - owner: mohamed - group: users - mode: 755 - type: directory - -events: - beforeInstall: - - location: "/bin/rm -rf /var/www/autodeploy" - afterInstall: - - location: "/var/www/autodeploy/manage.py runserver 0.0.0.0:9002 &" - interpreter: python - wait: False