def fetch_source(self, buildreq, conn_data): retval = None if buildreq.transport.method != self.method: retval = "wrong_method" if not retval: self.workdir = os.path.join( self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package() ) if buildreq.transport.vcs_id is not None: command = "svn export %s@%s %s" % (buildreq.transport.uri, buildreq.transport.vcs_id, self.workdir) elif buildreq.transport.uri is not None: command = "svn export %s %s" % (buildreq.transport.uri, self.workdir) else: logging.warn("E: Could not fetch source, no method URI found") retval = "unrecognised uri" if not retval: if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "fetch_source" if not retval: retval = "success" pybitclient.send_message(conn_data, retval) if retval == "success": return 0 else: return 1
def build_master(self, buildreq, conn_data): retval = None logfile = self.get_buildlog(self.settings["buildroot"], buildreq) if not isinstance(buildreq, BuildRequest): logging.debug("E: not able to identify package name.") retval = "misconfigured" pybitclient.send_message(conn_data, retval) return srcdir = os.path.join(self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method) package_dir = "%s/%s" % (srcdir, buildreq.get_package()) command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % package_dir if pybitclient.run_cmd(command, self.settings["dry_run"], logfile): retval = "build-dep-wait" if not retval: command = "sbuild -n --debbuildopt=\"-a%s\" --setup-hook=\"/usr/bin/sbuild-cross.sh\" --arch=%s -A -s -d %s %s/%s_%s.dsc" % ( buildreq.get_arch(), buildreq.get_arch(), buildreq.get_suite(), srcdir, buildreq.get_package(), buildreq.get_version()) if pybitclient.run_cmd(command, self.settings["dry_run"], logfile): retval = "build_binary" if not retval: changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"], buildreq.get_package(), buildreq.get_version(), buildreq.get_arch()) if not self.settings["dry_run"] and not os.path.isfile(changes): logging.debug("build_master: Failed to find %s file." % changes) retval = "build_changes" if not retval: retval = "success" pybitclient.send_message(conn_data, retval) if retval == "success": return 0 else: return 1
def build_slave (self, buildreq, conn_data): retval = None srcdir = os.path.join (self.options["buildroot"], buildreq.get_suite(), buildreq.transport.method) package_dir = "%s/%s" % (srcdir, buildreq.get_package()) if os.path.isdir(package_dir) : command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % package_dir if not pybitclient.run_cmd (command, self.options["dry_run"]): retval = "build_dsc" if not retval : command = "sbuild --apt-update -d %s %s/%s_%s.dsc" % ( buildreq.get_suite(), srcdir, buildreq.get_package(), buildreq.get_version()) if not pybitclient.run_cmd (command, self.options["dry_run"]): retval = "build_binary" if not retval : changes = "%s/%s_%s_%s.changes" % (srcdir, buildreq.get_package(), buildreq.get_version(), buildreq.get_arch()) if not os.path.isfile (changes) : print "Failed to find %s file." % (changes) retval = "build_changes" if not retval : retval = "success" pybitclient.send_message (conn_data, retval) if retval == "success": return 0 else : return 1
def fetch_source(self, buildreq, conn_data): retval = None # try: if buildreq.transport.method != "svn": retval = "wrong_method" if not retval: self.workdir = os.path.join( self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package() ) if buildreq.transport.vcs_id is not None: command = "svn export %s@%s %s" % (buildreq.transport.uri, buildreq.transport.vcs_id, self.workdir) elif buildreq.transport.uri is not None: command = "svn export %s %s" % (buildreq.transport.uri, self.workdir) else: print "Could not fetch source, no method URI found" retval = "unrecognised uri" if not retval: if not pybitclient.run_cmd(command, self.settings["dry_run"]): retval = "fetch_source" # except Exception as e: # retval = str(e) if not retval: retval = "success" pybitclient.send_message(conn_data, retval) if retval == "success": return 0 else: return 1
def clean_source(self, buildreq, conn_data): retval = None if buildreq.transport.method != "apt": retval = "wrong_method" if not retval: src_dir = os.path.join(self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method) src_changes = "%s/%s_%s.dsc" % (src_dir, buildreq.get_package(), buildreq.get_version()) command = "dcmd rm -f %s" % src_changes if not os.path.exists(src_changes): retval = "success" elif pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "source-clean-fail" if not retval: self.cleandir = os.path.join(self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package()) command = "rm -rf %s/" % self.cleandir if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "failed_clean" if not retval: retval = "success" pybitclient.send_message(conn_data, retval) if retval == "success": return 0 else: return 1
def build_slave(self, buildreq, conn_data): retval = None logfile = self.get_buildlog(self.settings["buildroot"], buildreq) srcdir = os.path.join(self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method) package_dir = "%s/%s" % (srcdir, buildreq.get_package()) if os.path.isdir(package_dir) or self.settings["dry_run"]: command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % package_dir if pybitclient.run_cmd(command, self.settings["dry_run"], logfile): retval = "build_dsc" if not retval: command = "sbuild -n --apt-update -d %s %s/%s_%s.dsc" % ( buildreq.get_suite(), srcdir, buildreq.get_package(), buildreq.get_version()) if pybitclient.run_cmd(command, self.settings["dry_run"], logfile): retval = "build_binary" if not retval: changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"], buildreq.get_package(), buildreq.get_version(), buildreq.get_arch()) if not self.settings["dry_run"] and not os.path.isfile(changes): logging.debug("build_slave: Failed to find %s file." % changes) retval = "build_changes" else: retval = "Can't find build dir." if not retval: retval = "success" pybitclient.send_message(conn_data, retval) if retval == "success": return 0 else: return 1
def _overall_success(self, message, conn_data): error = 1 #If we have a message set we send back the message and failure if message : pybitclient.send_message (conn_data, message) else: pybitclient.send_message (conn_data, "success") error = 0 return error
def update_environment(self, name, pkg, conn_data): retval = "success" command = "schroot -u root -c %s -- apt-get update > /dev/null 2>&1" % name if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "build_update" pybitclient.send_message(conn_data, retval) if retval == "success": return 0 else: return 1
def clean_source (self, buildreq, conn_data) : retval = None if buildreq.transport.method != "git": retval = "wrong_method" if not retval : self.cleandir = os.path.join (self.options["buildroot"], buildreq.get_suite()) command = "rm -rf %s/*" % (self.cleandir) if not pybitclient.run_cmd (command, self.options["dry_run"]) : retval = "failed_clean" retval = "success" pybitclient.send_message (conn_data, retval)
def clean_source (self, buildreq, conn_data) : retval = None if buildreq.transport.method != "apt": retval = "wrong_method" if not retval : self.cleandir = os.path.join (self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package()) command = "rm -rf %s" % (self.cleandir) if pybitclient.run_cmd (command, self.settings["dry_run"], None) : retval = "failed_clean" if not retval : retval = "success" pybitclient.send_message (conn_data, retval) if retval == "success": return 0 else : return 1
def build_master (self, buildreq, conn_data): retval = None if (not isinstance(buildreq, BuildRequest)): print "E: not able to identify package name." retval = "misconfigured" pybitclient.send_message (conn_data, retval) return srcdir = os.path.join (self.options["buildroot"], buildreq.get_suite(), buildreq.transport.method) package_dir = "%s/%s" % (srcdir, buildreq.get_package()) command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % (package_dir) if not pybitclient.run_cmd (command, self.options["dry_run"]): retval = "build-dep-wait" if not retval : command = "sbuild --debbuildopt=\"-a%s\" --setup-hook=\"/usr/bin/sbuild-cross.sh\" --arch=%s -A -s -d %s %s/%s_%s.dsc" % (pkg.architecture, pkg.architecture, pkg.suite, srcdir, pkg.source, pkg.version) if not pybitclient.run_cmd (command, self.options["dry_run"]): retval = "build_binary"
def clean_source(self, buildreq, conn_data): retval = None if buildreq.transport.method != self.method: retval = "wrong_method" if not retval: # look for a _source.changes file generated when we made the .dsc src_chgs = os.path.join( self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, ("%s_%s_source.changes" % (buildreq.get_package(), buildreq.get_version())), ) if os.path.exists(src_chgs): command = "dcmd rm -f %s" % (src_chgs) if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "source-clean-fail" else: # check for just the .dsc src_chgs = os.path.join( self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, ("%s_%s.dsc" % (buildreq.get_package(), buildreq.get_version())), ) if os.path.exists(src_chgs): command = "dcmd rm -f %s" % (src_chgs) if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "source-clean-fail" if not retval: self.cleandir = os.path.join( self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package() ) command = "rm -rf %s" % (self.cleandir) if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "failed_clean" if not retval: retval = "success" pybitclient.send_message(conn_data, retval) # return the exit value of the process - exit (0) for success. if retval == "success": return 0 else: return 1
def fetch_source(self, buildreq, conn_data): retval = None command = None if buildreq.transport.method != "apt": retval = "wrong_method" if not retval: self.workdir = os.path.join(self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package()) if not os.path.isdir(self.workdir): pybitclient.mkdir_p(self.workdir) apt_path = os.path.join(self.workdir, "lists", "partial") pybitclient.mkdir_p(apt_path) apt_path = os.path.join(self.workdir, "archives", "partial") pybitclient.mkdir_p(apt_path) apt_path = os.path.join(self.workdir, "etc", "apt", "preferences.d") pybitclient.mkdir_p(apt_path) apt_path = os.path.join(self.workdir, "sources.list") src_list = os.open(apt_path, os.O_CREAT | os.O_WRONLY) url = "deb-src http://cdn.debian.net/debian %s main " % buildreq.get_suite() os.write(src_list, url) cfg_str = "-o Apt::Get::AllowUnauthenticated=true -o Dir=%s -o Dir::State=%s -o Dir::Etc::SourceList=%s/sources.list -o Dir::Cache=%s" % \ (self.workdir, self.workdir, self.workdir, self.workdir) command = "(cd %s && apt-get %s update 2>/dev/null || true)" % (self.workdir, cfg_str) if not retval: if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "update_apt" if buildreq.get_version() is not None: command = "(cd %s/.. && apt-get %s -d source %s=%s )" % (self.workdir, cfg_str, buildreq.get_package(), buildreq.get_version()) else: command = "(cd %s && apt-get %s -d source %s )" % (self.workdir, cfg_str, buildreq.get_package()) if not retval: if pybitclient.run_cmd(command, self.settings["dry_run"], None): retval = "fetch_source" if not retval: retval = "success" pybitclient.send_message(conn_data, retval) # return the exit value of the process - exit (0) for success. if retval == "success": return 0 else: return 1
def build_master (self, buildreq, conn_data): print "build_master" retval = None if (not isinstance(buildreq, BuildRequest)): print "E: not able to identify package name." retval = "misconfigured" pybitclient.send_message (conn_data, retval) return srcdir = os.path.join (self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method) package_dir = "%s/%s" % (srcdir, buildreq.get_package()) # FIXME: doesn't make sense to run dpkg-checkbuilddeps outside the chroot! if os.path.isdir(package_dir) : control = os.path.join (package_dir, 'debian', 'control') dep_check = "/usr/lib/pbuilder/pbuilder-satisfydepends-classic --control" command = "schroot -u root -c %s -- %s %s" % (buildreq.get_suite(), dep_check, os.path.realpath(control)) if not pybitclient.run_cmd (command, self.settings["dry_run"]): retval = "build-dep-wait" if not retval : command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % (package_dir) if not pybitclient.run_cmd (command, self.settings["dry_run"]): retval = "build_dsc" if not retval : command = "sbuild -A -s -d %s %s/%s_%s.dsc" % (buildreq.get_suite(), srcdir, buildreq.get_package(), buildreq.get_version()) if not pybitclient.run_cmd (command, self.settings["dry_run"]): retval = "build_binary" if not retval : changes = "%s/%s_%s_%s.changes" % (os.getcwd(), buildreq.get_package(), buildreq.get_version(), buildreq.get_arch()) if not self.settings["dry_run"] and not os.path.isfile (changes) : print "build_master: Failed to find %s file." % (changes) retval = "build_changes" if not retval : retval = "success" pybitclient.send_message (conn_data, retval) if retval == "success": return 0 else : return 1
def upload (self, buildreq, conn_data): retval = None srcdir = os.path.join (self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method) changes = "%s/%s_%s_%s.changes" % (os.getcwd(), buildreq.get_package(), buildreq.get_version(), buildreq.get_arch()) if not os.path.isfile (changes) and not self.settings["dry_run"]: print "upload: Failed to find %s file." % (changes) retval = "upload_changes" if not retval : command = "dput -c %s %s %s %s" % (self.dput_cfg, self.settings["dput"], self.settings["dput_dest"], changes) if not pybitclient.run_cmd (command, self.settings["dry_run"]): retval = "upload_fail" if not retval : retval = "success" pybitclient.send_message (conn_data, retval) if retval == "success": return 0 else : return 1
def fetch_source(self, buildreq, conn_data): retval = None #try: if buildreq.transport.method != "git": retval = "wrong_method" if not retval : self.workdir = os.path.join (self.options["buildroot"], buildreq.get_suite(), buildreq.transport.method) # vcs_id for git is a branch identifier if (buildreq.transport.vcs_id is not None): command = "git clone -b %s %s %s" % (buildreq.transport.vcs_id, buildreq.transport.uri, self.workdir) elif (buildreq.transport.uri is not None): command = "git clone %s %s" % (buildreq.transport.uri, self.workdir) else: print "Could not fetch source, no method URI found" retval = "unrecognised uri" if not retval : if not pybitclient.run_cmd (command, self.options["dry_run"]) : retval = "fetch_source" if not retval : retval = "success" pybitclient.send_message (conn_data, retval)
def fetch_source(self, buildreq, conn_data): retval = None if buildreq.transport.method != "apt": retval = "wrong_method" if not retval : self.workdir = os.path.join (self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method) if (buildreq.get_version() is not None): command = "(cd %s && apt-get -d source %s=%s && dpkg-source -x %s_%s.dsc)" % (self.workdir, buildreq.get_package(), buildreq.get_version(), buildreq.get_package(), buildreq.get_version() ) else : command = "(cd %s && apt-get -d source %s && dpkg-source -x %s_%s.dsc)" % (self.workdir, buildreq.get_package(), buildreq.get_package(), buildreq.get_version() ) if not retval : if pybitclient.run_cmd (command, self.settings["dry_run"], None) : retval = "fetch_source" if not retval : retval = "success" pybitclient.send_message (conn_data, retval) if retval == "success": return 0 else : return 1
def upload(self, buildreq, conn_data): retval = None logfile = self.get_buildlog(self.settings["buildroot"], buildreq) changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"], buildreq.get_package(), buildreq.get_version(), buildreq.get_arch()) if not os.path.isfile(changes) and not self.settings["dry_run"]: logging.debug("upload: Failed to find %s file." % changes) retval = "upload_changes" if not retval: command = "dput -c %s %s %s %s" % (self.dput_cfg, self.settings["dput"], self.settings["dput_dest"], changes) if pybitclient.run_cmd(command, self.settings["dry_run"], logfile): retval = "upload_fail" if not retval: command = "dcmd rm %s" % changes if pybitclient.run_cmd(command, self.settings["dry_run"], logfile): retval = "post-upload-clean-fail" if not retval: retval = "success" pybitclient.send_message(conn_data, retval) if retval == "success": return 0 else: return 1