Exemplo n.º 1
0
def test_release_candidate_bumps():
    """Or a second release candidate...."""
    observed = MwVersion('1.30.0-rc.0')
    expected = FakeVersion({
        'raw': '1.30.0-rc.0',
        'major': '1.30',
        'branch': 'REL1_30',
        'tag': 'tags/1.30.0-rc.0',
        'phase': 'rc',
        'cycle': '0',
    })
    assert_mw_versions_equal(expected, observed)

    observed = MwVersion('1.30.0-rc.1')
    expected = FakeVersion({
        'raw': '1.30.0-rc.1',
        'major': '1.30',
        'branch': 'REL1_30',
        'tag': 'tags/1.30.0-rc.1',
        'prev_tag': 'tags/1.30.0-rc.0',
        'prev_version': '1.30.0-rc.0',
        'phase': 'rc',
        'cycle': '1',
    })
    assert_mw_versions_equal(expected, observed)
    def __init__(self, ops):
        if ops.version is None:
            self.version = MwVersion.new_snapshot(ops.branch)
        else:
            self.version = MwVersion(ops.version)
        self.options = ops

        if not os.path.isfile(self.options.conffile):
            logging.error("Configuration file not found: %s",
                          self.options.conffile)
            sys.exit(1)

        self.config = None
        with open(self.options.conffile) as conf:
            self.config = yaml.load(conf)
Exemplo n.º 3
0
def test_major_version():
    """Make sure major versions are proper"""
    observed = MwVersion('1.30.0')
    expected = FakeVersion({
        'raw': '1.30.0',
        'major': '1.30',
        'branch': 'REL1_30',
        'tag': 'tags/1.30.0',
    })
    assert_mw_versions_equal(expected, observed)
Exemplo n.º 4
0
def test_release_candidate():
    """Don't forget about release candidates"""
    observed = MwVersion('1.30.0-rc.0')
    expected = FakeVersion({
        'raw': '1.30.0-rc.0',
        'major': '1.30',
        'branch': 'REL1_30',
        'tag': 'tags/1.30.0-rc.0',
        'phase': 'rc',
        'cycle': '0',
    })
    assert_mw_versions_equal(expected, observed)
Exemplo n.º 5
0
def test_minor_version():
    """Minor versions too"""
    observed = MwVersion('1.30.1')
    expected = FakeVersion({
        'raw': '1.30.1',
        'major': '1.30',
        'branch': 'REL1_30',
        'tag': 'tags/1.30.1',
        'prev_tag': 'tags/1.30.0',
        'prev_version': '1.30.0',
    })
    assert_mw_versions_equal(expected, observed)
    def main(self):
        """return value should be usable as an exit code"""
        logging.info("Doing release for %s", self.version.raw)

        if self.version.branch is None:
            logging.debug("No branch, assuming '%s'. Override with --branch.",
                          self.options.branch)
            self.version.branch = self.options.branch

        # No version specified, assuming a snapshot release
        if self.options.version is None:
            self.do_release(
                version=MwVersion.new_snapshot(self.options.branch))
            return 0

        if self.options.previousversion:
            # Given the previous version on the command line
            self.do_release(version=self.version)
            return 0

        no_previous = False
        if self.version.prev_version is None:
            no_previous = True
            if not self.ask("No previous release found. Do you want to make a "
                            "release with no patch?"):
                logging.error('Please specify the correct previous release ' +
                              'on the command line')
                return 1
        if no_previous or self.options.no_previous:
            self.do_release(version=self.version)
        else:
            if not self.ask("Was %s the previous release?" %
                            self.version.prev_version):
                logging.error('Please specify the correct previous release ' +
                              'on the command line')
                return 1

            self.do_release(version=self.version)
        return 0
    def do_release(self, version):
        """Do all the nasty work of building a release"""
        build_dir = self.options.buildroot
        patch_dir = self.options.patch_dir

        # variables related to the version
        prev_version = version.prev_version

        # If we're operating in the same repo as this script, kindly make it
        # in a subdirectory to avoid polluting things
        if build_dir == os.path.dirname(os.path.abspath(__file__)):
            build_dir = os.path.join(build_dir, 'build')

        if not os.path.exists(build_dir):
            logging.debug('Creating build dir: %s', build_dir)
            os.mkdir(build_dir)

        os.chdir(build_dir)

        package = 'mediawiki-' + version.raw
        package_dir = os.path.join(build_dir, package)

        # Export the target. If we're going to patch later, use the branch
        if patch_dir:
            get_git(package_dir, version.branch)
        else:
            get_git(package_dir, version.tag)

        if patch_dir:
            maybe_apply_patches(
                package,
                get_patches_for_repo(patch_dir, 'core', version.branch))
            maybe_apply_patches(
                os.path.join(package, 'vendor'),
                get_patches_for_repo(patch_dir, 'vendor', version.branch))

        ext_exclude = []
        for ext in get_skins_and_extensions(package_dir):
            if patch_dir:
                maybe_apply_patches(
                    os.path.join(package, ext),
                    get_patches_for_repo(patch_dir, ext, version.branch))
            ext_exclude.append("--exclude")
            ext_exclude.append(ext)

        # Generate the .tar.gz files
        out_files = [
            self.make_tar(
                package=package,
                input_dir=package,
                build_dir=build_dir),
            self.make_tar(
                package='mediawiki-core-' + version.raw,
                input_dir=package,
                build_dir=build_dir,
                add_args=ext_exclude)
        ]

        # Patch
        if not self.options.no_previous and prev_version is not None:
            prev_dir = 'mediawiki-' + prev_version
            get_git(os.path.join(build_dir, prev_dir),
                    MwVersion(prev_version).tag)

            self.make_patch(
                build_dir, package + '.patch.gz', prev_dir, package, 'normal')
            out_files.append(package + '.patch.gz')
            logging.debug('%s.patch.gz written', package)
            if os.path.exists(os.path.join(package, 'languages', 'messages')):
                i18n_patch = 'mediawiki-i18n-' + version.raw + '.patch.gz'
                if (self.make_patch(
                        build_dir, i18n_patch, prev_dir, package, 'i18n')):
                    out_files.append(i18n_patch)
                    logging.info('%s written', i18n_patch)
                else:
                    i18n_patch = None

        # Sign
        for file_name in out_files:
            if self.options.sign:
                try:
                    proc = subprocess.Popen([
                        'gpg', '--detach-sign',
                        os.path.join(build_dir, file_name)])
                except OSError as ose:
                    logging.error("gpg failed, does it exist? Skip with " +
                                  "--dont-sign.")
                    logging.error("Error %s: %s", ose.errno, ose.strerror)
                    sys.exit(1)
                if proc.wait() != 0:
                    logging.error("gpg failed, exiting")
                    sys.exit(1)
        output(version, out_files)
        return 0
def test_new_snapshot():
    """Make sure a new snapshot release spits out expected version info"""
    version = MwVersion.new_snapshot()
    assert version.raw.startswith('snapshot-')
    assert version.branch == 'master'
    assert version.major == 'snapshot'
Exemplo n.º 9
0
def test_new_snapshot():
    """Make sure a new snapshot release spits out expected version info"""
    version = MwVersion.new_snapshot()
    assert version.raw.startswith('snapshot-')
    assert version.branch == 'master'
    assert version.major == 'snapshot'
Exemplo n.º 10
0
def test_tag():
    """Make sure tags are right"""
    data = {'1.21.3': 'tags/1.21.3', '1.24.0': 'tags/1.24.0'}
    for version, tag in data.items():
        assert tag == MwVersion(version).tag
Exemplo n.º 11
0
def test_incomplete_version():
    """Bogus versions are verboten"""
    for version in ['1.30', 'bad', None]:
        with pytest.raises(ValueError):
            MwVersion(version)