Ejemplo n.º 1
0
class ReleaseMP(object):
    """Nuxeo MP release manager.

    See 'self.perpare()', 'self.perform()'."""

    # pylint: disable=R0913
    def __init__(self,
                 alias,
                 restart_from,
                 default_conf=None,
                 marketplace_conf=None):
        self.alias = alias
        self.restart_from = restart_from
        if marketplace_conf == '':
            marketplace_conf = DEFAULT_MP_CONF_URL
        self.marketplace_conf = marketplace_conf
        cwd = os.getcwd()
        if os.path.isdir(os.path.join(cwd, "marketplace")):
            pass
        elif os.path.split(cwd)[1] == "marketplace":
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        else:
            if '__file__' not in locals():
                __file__ = inspect.getframeinfo(
                    inspect.currentframe())[0]  # @ReservedAssignment
            cwd = os.path.dirname(os.path.abspath(__file__))
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        log("Nuxeo source location: %s" % cwd)
        self.repo = Repository(cwd, self.alias)
        self.defaults = {}
        if default_conf:
            default_info = ReleaseInfo()
            default_info.read_release_log(default_conf)
            prefix = default_info.module
            for key, value in vars(default_info).iteritems():
                self.defaults[prefix + "-" + key] = str(value)
        self.mp_config = self.repo.get_mp_config(self.marketplace_conf,
                                                 self.defaults)

    def clone(self):
        cwd = os.getcwd()
        self.repo.clone_mp(self.marketplace_conf)
        os.chdir(cwd)

    # pylint: disable=E1103

    def get_packages_list(self):
        """Return the list of packages to work on."""
        marketplaces = self.mp_config.sections()
        if self.restart_from:
            idx = marketplaces.index(self.restart_from)
            marketplaces = marketplaces[idx:]
        return marketplaces

    def prepare(self, dryrun=False):
        """ Prepare the release."""
        cwd = os.getcwd()
        if not os.path.isdir(self.repo.mp_dir):
            self.clone()
        os.chdir(self.repo.mp_dir)
        marketplaces_skipped = []
        for marketplace in self.get_packages_list():
            log("")
            if self.mp_config.has_option(marketplace, "skip"):
                log("[%s]" % marketplace)
                log("[WARN] Skipped '%s' (%s)" %
                    (marketplace, self.mp_config.get(marketplace, "skip")))
                marketplaces_skipped.append(marketplace)
                upgrade_only = True
            else:
                upgrade_only = False
            if self.mp_config.getboolean(marketplace, "prepared"):
                log("[%s]" % marketplace)
                log("Skipped '%s' (%s)" % (marketplace, "Already prepared"))
                continue
            try:
                mp_dir = os.path.join(self.repo.mp_dir, marketplace)
                if not os.path.isdir(mp_dir):
                    os.chdir(self.repo.mp_dir)
                    self.repo.git_pull(
                        marketplace, self.mp_config.get(marketplace, "branch"))
                else:
                    log("[%s]" % marketplace)
                os.chdir(mp_dir)
                mp_repo = Repository(os.getcwd(), self.alias)
                if upgrade_only:
                    log("Upgrade skipped %s..." % marketplace)
                else:
                    log("Prepare release of %s..." % marketplace)

                release_info = ReleaseInfo(
                    module=marketplace,
                    remote_alias=self.alias,
                    branch=self.mp_config.get(marketplace, "branch"),
                    tag=self.mp_config.get(marketplace, "tag"),
                    next_snapshot=self.mp_config.get(marketplace,
                                                     "next_snapshot"),
                    maintenance_version=self.mp_config.get(
                        marketplace, "maintenance_version"),
                    is_final=self.mp_config.getboolean(marketplace,
                                                       "is_final"),
                    skip_tests=self.mp_config.getboolean(
                        marketplace, "skipTests"),
                    skip_its=self.mp_config.getboolean(marketplace, "skipITs"),
                    profiles=self.mp_config.get(marketplace, "profiles"),
                    other_versions=self.mp_config.get(marketplace,
                                                      "other_versions"),
                    #files_pattern, props_pattern, msg_commit, msg_tag,
                    auto_increment_policy=self.mp_config.get(
                        marketplace, "auto_increment_policy"),
                    dryrun=dryrun)
                mp_release = Release(mp_repo, release_info)
                release_log = mp_release.log_summary()
                release_info.read_release_log(release_log)
                if dryrun:
                    print "DEBUG -- init %s with:" % marketplace
                for key, value in vars(release_info).iteritems():
                    if dryrun:
                        print "DEBUG: %s-%s=%s" % (marketplace, key, value)
                    self.mp_config.set("DEFAULT", marketplace + "-" + key,
                                       str(value))
                if dryrun:
                    print

                mp_release.prepare(dryrun=dryrun,
                                   upgrade_only=upgrade_only,
                                   dodeploy=True)
                prepared = True
            except Exception, e:
                stack = traceback.format_exc()
                if hasattr(e, 'message') and e.message is not None:
                    stack = e.message + "\n" + stack
                log("[ERROR] %s" % stack)
                prepared = False
                stack = stack.replace("%", "%%")
                self.mp_config.set(marketplace, "skip", "Failed! %s" % stack)
            self.mp_config.set(marketplace, "prepared", str(prepared))
            self.repo.save_mp_config(self.mp_config)
            if prepared and not upgrade_only:
                self.upload(CONNECT_TEST_URL, marketplace, dryrun=dryrun)
        os.chdir(cwd)
Ejemplo n.º 2
0
class ReleaseMP(object):
    """Nuxeo MP release manager.

    See 'self.perpare()', 'self.perform()'."""

    # pylint: disable=R0913
    def __init__(self, alias, restart_from, marketplace_conf=None):
        self.alias = alias
        self.restart_from = restart_from
        if marketplace_conf == '':
            marketplace_conf = DEFAULT_MP_CONF_URL
        self.marketplace_conf = marketplace_conf
        cwd = os.getcwd()
        if os.path.isdir(os.path.join(cwd, "marketplace")):
            pass
        elif os.path.split(cwd)[1] == "marketplace":
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        else:
            if '__file__' not in locals():
                __file__ = inspect.getframeinfo(inspect.currentframe())[0]
            cwd = os.path.dirname(os.path.abspath(__file__))
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        log("Nuxeo source location: %s" % cwd)
        self.repo = Repository(cwd, self.alias)
        self.mp_config = self.repo.get_mp_config(self.marketplace_conf)

    def clone(self):
        cwd = os.getcwd()
        self.repo.clone_mp(self.marketplace_conf)
        os.chdir(cwd)

    # pylint: disable=E1103
    def prepare(self, dryrun=False):
        """ Prepare the release."""
        cwd = os.getcwd()
        if not os.path.isdir(self.repo.mp_dir):
            self.clone()
        os.chdir(self.repo.mp_dir)
        marketplaces = self.mp_config.sections()
        marketplaces_skipped = []
        if self.restart_from:
            idx = marketplaces.index(self.restart_from)
            marketplaces = marketplaces[idx:]
        for marketplace in marketplaces:
            log("")
            if self.mp_config.has_option(marketplace, "skip"):
                log("[%s]" % marketplace)
                log("[WARN] Skipped '%s' (%s)" %
                    (marketplace, self.mp_config.get(marketplace, "skip")))
                marketplaces_skipped.append(marketplace)
                upgrade_only = True
            else:
                upgrade_only = False
            if self.mp_config.getboolean(marketplace, "prepared"):
                log("[%s]" % marketplace)
                log("Skipped '%s' (%s)" % (marketplace, "Already prepared"))
                continue
            try:
                mp_dir = os.path.join(self.repo.mp_dir, marketplace)
                if not os.path.isdir(mp_dir):
                    os.chdir(self.repo.mp_dir)
                    self.repo.git_pull(
                        marketplace, self.mp_config.get(marketplace, "branch"))
                else:
                    log("[%s]" % marketplace)
                os.chdir(mp_dir)
                mp_repo = Repository(os.getcwd(), self.alias)
                if upgrade_only:
                    log("Upgrade skipped %s..." % marketplace)
                else:
                    log("Prepare release of %s..." % marketplace)
                mp_release = Release(
                    mp_repo,
                    self.mp_config.get(marketplace, "branch"),
                    self.mp_config.get(marketplace, "tag"),
                    self.mp_config.get(marketplace, "next_snapshot"),
                    self.mp_config.get(marketplace, "maintenance_version"),
                    is_final=True,
                    skipTests=False,
                    skipITs=False,
                    other_versions=self.mp_config.get(marketplace,
                                                      "other_versions", None))
                mp_release.log_summary()
                mp_release.prepare(dryrun=dryrun,
                                   upgrade_only=upgrade_only,
                                   dodeploy=True)
                prepared = True
            except Exception, e:
                stack = traceback.format_exc()
                if hasattr(e, 'message') and e.message is not None:
                    stack = e.message + "\n" + stack
                log("[ERROR] %s" % stack)
                prepared = False
                stack = stack.replace("%", "%%")
                self.mp_config.set(marketplace, "skip", "Failed! %s" % stack)
            self.mp_config.set(marketplace, "prepared", str(prepared))
            self.repo.save_mp_config(self.mp_config)
            if prepared and not upgrade_only:
                # Upload on Connect test
                for dirpath, _, filenames in os.walk(mp_repo.basedir):
                    for name in filenames:
                        path = os.path.join(dirpath, name)
                        if (os.path.isfile(path) and fnmatch.fnmatch(
                                path[len(mp_repo.basedir) + 1:],
                                self.mp_config.get(marketplace,
                                                   "mp_to_upload"))):
                            self.upload(CONNECT_TEST_URL, path, dryrun=dryrun)
                            self.mp_config.set(marketplace, "uploaded",
                                               CONNECT_TEST_URL + ": " + path)
                            self.repo.save_mp_config(self.mp_config)
        os.chdir(cwd)
Ejemplo n.º 3
0
class ReleaseMP(object):
    """Nuxeo MP release manager.

    See 'self.perpare()', 'self.perform()'."""
    # pylint: disable=R0913
    def __init__(self, alias, restart_from, marketplace_conf=None):
        self.alias = alias
        self.restart_from = restart_from
        if marketplace_conf == '':
            marketplace_conf = DEFAULT_MP_CONF_URL
        self.marketplace_conf = marketplace_conf
        cwd = os.getcwd()
        if os.path.isdir(os.path.join(cwd, "marketplace")):
            pass
        elif os.path.split(cwd)[1] == "marketplace":
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        else:
            if '__file__' not in locals():
                __file__ = inspect.getframeinfo(inspect.currentframe())[0]  # @ReservedAssignment
            cwd = os.path.dirname(os.path.abspath(__file__))
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        log("Nuxeo source location: %s" % cwd)
        self.repo = Repository(cwd, self.alias)
        self.mp_config = self.repo.get_mp_config(self.marketplace_conf)

    def clone(self):
        cwd = os.getcwd()
        self.repo.clone_mp(self.marketplace_conf)
        os.chdir(cwd)

    # pylint: disable=E1103

    def get_packages_list(self):
        """Return the list of packages to work on."""
        marketplaces = self.mp_config.sections()
        if self.restart_from:
            idx = marketplaces.index(self.restart_from)
            marketplaces = marketplaces[idx:]
        return marketplaces

    def prepare(self, dryrun=False):
        """ Prepare the release."""
        cwd = os.getcwd()
        if not os.path.isdir(self.repo.mp_dir):
            self.clone()
        os.chdir(self.repo.mp_dir)
        marketplaces_skipped = []
        for marketplace in self.get_packages_list():
            log("")
            if self.mp_config.has_option(marketplace, "skip"):
                log("[%s]" % marketplace)
                log("[WARN] Skipped '%s' (%s)" % (marketplace, self.mp_config.get(marketplace, "skip")))
                marketplaces_skipped.append(marketplace)
                upgrade_only = True
            else:
                upgrade_only = False
            if self.mp_config.getboolean(marketplace, "prepared"):
                log("[%s]" % marketplace)
                log("Skipped '%s' (%s)" % (marketplace, "Already prepared"))
                continue
            try:
                mp_dir = os.path.join(self.repo.mp_dir, marketplace)
                if not os.path.isdir(mp_dir):
                    os.chdir(self.repo.mp_dir)
                    self.repo.git_pull(marketplace, self.mp_config.get(marketplace, "branch"))
                else:
                    log("[%s]" % marketplace)
                os.chdir(mp_dir)
                mp_repo = Repository(os.getcwd(), self.alias)
                if upgrade_only:
                    log("Upgrade skipped %s..." % marketplace)
                else:
                    log("Prepare release of %s..." % marketplace)
                mp_release = Release(mp_repo,
                                     self.mp_config.get(marketplace, "branch"),
                                     self.mp_config.get(marketplace, "tag"),
                                     self.mp_config.get(marketplace, "next_snapshot"),
                                     self.mp_config.get(marketplace, "maintenance_version"),
                                     is_final=True,
                                     skipTests=self.mp_config.getboolean(marketplace, "skipTests"),
                                     skipITs=self.mp_config.getboolean(marketplace, "skipITs"),
                                     other_versions=self.mp_config.get(marketplace, "other_versions", None))
                mp_release.log_summary()
                mp_release.prepare(dryrun=dryrun, upgrade_only=upgrade_only, dodeploy=True)
                prepared = True
            except Exception, e:
                stack = traceback.format_exc()
                if hasattr(e, 'message') and e.message is not None:
                    stack = e.message + "\n" + stack
                log("[ERROR] %s" % stack)
                prepared = False
                stack = stack.replace("%", "%%")
                self.mp_config.set(marketplace, "skip", "Failed! %s" % stack)
            self.mp_config.set(marketplace, "prepared", str(prepared))
            self.repo.save_mp_config(self.mp_config)
            if prepared and not upgrade_only:
                self.upload(CONNECT_TEST_URL, marketplace, dryrun=dryrun)
        os.chdir(cwd)
Ejemplo n.º 4
0
class ReleaseMP(object):
    """Nuxeo MP release manager.

    See 'self.perpare()', 'self.perform()'."""
    # pylint: disable=R0913
    def __init__(self, alias, restart_from, default_conf=None, marketplace_conf=None):
        self.alias = alias
        self.restart_from = restart_from
        if marketplace_conf == '':
            marketplace_conf = DEFAULT_MP_CONF_URL
        self.marketplace_conf = marketplace_conf
        cwd = os.getcwd()
        if os.path.isdir(os.path.join(cwd, "marketplace")):
            pass
        elif os.path.split(cwd)[1] == "marketplace":
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        else:
            if '__file__' not in locals():
                __file__ = inspect.getframeinfo(inspect.currentframe())[0]  # @ReservedAssignment
            cwd = os.path.dirname(os.path.abspath(__file__))
            cwd = os.path.abspath(os.path.join(cwd, os.pardir))
        log("Nuxeo source location: %s" % cwd)
        self.repo = Repository(cwd, self.alias)
        self.defaults = {}
        if default_conf:
            default_info = ReleaseInfo()
            default_info.read_release_log(default_conf)
            prefix = default_info.module
            for key, value in vars(default_info).iteritems():
                self.defaults[prefix + "-" + key] = str(value)
        self.mp_config = self.repo.get_mp_config(self.marketplace_conf, self.defaults)

    def clone(self):
        cwd = os.getcwd()
        self.repo.clone_mp(self.marketplace_conf)
        os.chdir(cwd)

    # pylint: disable=E1103

    def get_packages_list(self):
        """Return the list of packages to work on."""
        marketplaces = self.mp_config.sections()
        if self.restart_from:
            idx = marketplaces.index(self.restart_from)
            marketplaces = marketplaces[idx:]
        return marketplaces

    def prepare(self, dryrun=False):
        """ Prepare the release."""
        cwd = os.getcwd()
        if not os.path.isdir(self.repo.mp_dir):
            self.clone()
        os.chdir(self.repo.mp_dir)
        marketplaces_skipped = []
        for marketplace in self.get_packages_list():
            log("")
            if self.mp_config.has_option(marketplace, "skip"):
                log("[%s]" % marketplace)
                log("[WARN] Skipped '%s' (%s)" % (marketplace, self.mp_config.get(marketplace, "skip")))
                marketplaces_skipped.append(marketplace)
                upgrade_only = True
            else:
                upgrade_only = False
            if self.mp_config.getboolean(marketplace, "prepared"):
                log("[%s]" % marketplace)
                log("Skipped '%s' (%s)" % (marketplace, "Already prepared"))
                continue
            try:
                mp_dir = os.path.join(self.repo.mp_dir, marketplace)
                if not os.path.isdir(mp_dir):
                    os.chdir(self.repo.mp_dir)
                    self.repo.git_pull(marketplace, self.mp_config.get(marketplace, "branch"))
                else:
                    log("[%s]" % marketplace)
                os.chdir(mp_dir)
                mp_repo = Repository(os.getcwd(), self.alias)
                if upgrade_only:
                    log("Upgrade skipped %s..." % marketplace)
                else:
                    log("Prepare release of %s..." % marketplace)

                release_info = ReleaseInfo(module=marketplace, remote_alias=self.alias,
                                           branch=self.mp_config.get(marketplace, "branch"),
                                           tag=self.mp_config.get(marketplace, "tag"),
                                           next_snapshot=self.mp_config.get(marketplace, "next_snapshot"),
                                           maintenance_version=self.mp_config.get(marketplace, "maintenance_version"),
                                           is_final=self.mp_config.getboolean(marketplace, "is_final"),
                                           skip_tests=self.mp_config.getboolean(marketplace, "skipTests"),
                                           skip_its=self.mp_config.getboolean(marketplace, "skipITs"),
                                           profiles=self.mp_config.get(marketplace, "profiles"),
                                           other_versions=self.mp_config.get(marketplace, "other_versions"),
                                           #files_pattern, props_pattern, msg_commit, msg_tag,
                                           auto_increment_policy=self.mp_config.get(marketplace,
                                                                                    "auto_increment_policy"),
                                           dryrun=dryrun)
                mp_release = Release(mp_repo, release_info)
                release_log = mp_release.log_summary()
                release_info.read_release_log(release_log)
                if dryrun:
                    print "DEBUG -- init %s with:" % marketplace
                for key, value in vars(release_info).iteritems():
                    if dryrun:
                        print "DEBUG: %s-%s=%s" % (marketplace, key, value)
                    self.mp_config.set("DEFAULT", marketplace + "-" + key, str(value))
                if dryrun:
                    print

                mp_release.prepare(dryrun=dryrun, upgrade_only=upgrade_only, dodeploy=True)
                prepared = True
            except Exception, e:
                stack = traceback.format_exc()
                if hasattr(e, 'message') and e.message is not None:
                    stack = e.message + "\n" + stack
                log("[ERROR] %s" % stack)
                prepared = False
                stack = stack.replace("%", "%%")
                self.mp_config.set(marketplace, "skip", "Failed! %s" % stack)
            self.mp_config.set(marketplace, "prepared", str(prepared))
            self.repo.save_mp_config(self.mp_config)
            if prepared and not upgrade_only:
                owner = None
                if self.mp_config.has_option(marketplace, "owner"):
                    owner = self.mp_config.get(marketplace, "owner")
                self.upload(CONNECT_TEST_URL, marketplace, dryrun=dryrun, owner=owner)
        os.chdir(cwd)