Exemplo n.º 1
0
def update_version_number(update_level='patch'):
    """Update version number

    Returns a semantic_version object"""

    """Find current version"""
    temp_file = version_file().parent / ("~" + version_file().name)
    with open(str(temp_file), 'w') as g:
        with open(str(version_file()), 'r') as f:
            for line in f:
                version_matches = bare_version_re.match(line)
                if version_matches:
                    bare_version_str = version_matches.groups(0)[0]
                    if semantic_version.validate(bare_version_str):
                        current_version = Version(bare_version_str)
                        print("{}Current version is {}".format(" "*4, current_version))
                    else:
                        current_version = Version.coerce(bare_version_str)
                        if not text.query_yes_quit("{}I think the version is {}. Use it?".format(" "*4, current_version), default="yes"):
                            exit(colorama.Fore.RED + 'Please set an initial version number to continue')

                    """Determine new version number"""
                    if update_level is 'major':
                        current_version = current_version.next_major()
                    elif update_level is 'minor':
                        current_version = current_version.next_minor()
                    elif update_level is 'patch':
                        current_version = current_version.next_patch()
                    elif update_level is 'prerelease':
                        if not current_version.prerelease:
                            current_version = current_version.next_patch()
                            current_version.prerelease = ('dev', )
                    elif update_level is None:
                        # don't update version
                        pass
                    else:
                        exit(colorama.Fore.RED + 'Cannot update version in {} mode'.format(update_level))

                    print("{}New version is     {}".format(" "*4, current_version))

                    """Update version number"""
                    line = '__version__ = "{}"\n'.format(current_version)
                print(line, file=g, end="")
        #print('', file=g)  # add a blank line at the end of the file
    shutil.copyfile(str(temp_file), str(version_file()))
    os.remove(str(temp_file))
    return(current_version)
Exemplo n.º 2
0
def update_version_number(update_level='patch'):
    """Update version number

    Returns a semantic_version object"""

    """Find current version"""
    temp_file = version_file().parent / ("~" + version_file().name)
    with open(str(temp_file), 'w') as g:
        with open(str(version_file()), 'r') as f:
            for line in f:
                version_matches = bare_version_re.match(line)
                if version_matches:
                    bare_version_str = version_matches.groups(0)[0]
                    if semantic_version.validate(bare_version_str):
                        current_version = Version(bare_version_str)
                        print("{}Current version is {}".format(" "*4, current_version))
                    else:
                        current_version = Version.coerce(bare_version_str)
                        if not text.query_yes_quit("{}I think the version is {}. Use it?".format(" "*4, current_version), default="yes"):
                            exit(colorama.Fore.RED + 'Please set an initial version number to continue')

                    """Determine new version number"""
                    if update_level is 'major':
                        current_version = current_version.next_major()
                    elif update_level is 'minor':
                        current_version = current_version.next_minor()
                    elif update_level is 'patch':
                        current_version = current_version.next_patch()
                    elif update_level is 'prerelease':
                        if not current_version.prerelease:
                            current_version = current_version.next_patch()
                            current_version.prerelease = ('dev', )
                    elif update_level is None:
                        # don't update version
                        pass
                    else:
                        exit(colorama.Fore.RED + 'Cannot update version in {} mode'.format(update_level))

                    print("{}New version is     {}".format(" "*4, current_version))

                    """Update version number"""
                    line = '__version__ = "{}"\n'.format(current_version)
                print(line, file=g, end="")
        #print('', file=g)  # add a blank line at the end of the file
    shutil.copyfile(str(temp_file), str(version_file()))
    os.remove(str(temp_file))
    return(current_version)
Exemplo n.º 3
0
 def update(self, instance, validated_data):
     version_increment = validated_data.pop("version_increment", "patch")
     if version_increment == "initial":
         raise exceptions.APIException("Unable to update template with version_increment set to 'initial'!")
     v = Version(instance.version)
     if version_increment == "major":
         validated_data["version"] = str(v.next_major())
     if version_increment == "minor":
         validated_data["version"] = str(v.next_minor())
     if version_increment == "patch":
         validated_data["version"] = str(v.next_patch())
     validated_data["dependencies"] = []
     return super(TemplateSerializer, self).update(instance, validated_data)
Exemplo n.º 4
0
def get_next_version(release_type):
    """Increment a version for a particular release type."""
    if not isinstance(release_type, ReleaseType):
        raise TypeError()

    version = Version(get_current_version())

    if release_type is ReleaseType.major:
        return str(version.next_major())

    if release_type is ReleaseType.minor:
        return str(version.next_minor())

    return str(version.next_patch())
Exemplo n.º 5
0
def package(ctx, path, version):
    '''
    Package a current path to a new version and upload to chart repo.
    '''
    # helm package --app-version 0.1.9 --version 0.1.9 fantuan-base
    # curl -F "[email protected]" http://localhost:8080/api/charts

    update_helm()

    path = path.strip('/')

    chart_name = path.split('/')[-1]
    if not version:
        click.echo(
            click.style('No version specified. Reading from chart_repo ...',
                        fg='yellow'))
        version = Version(
            get_chart_version(ctx.obj.get('helm_repo'), chart_name))
        version = str(version.next_patch())
        click.echo(click.style('Get new version %s' % version, fg='green'))
    Version(version)

    click.echo(click.style('Updateing dependency ...', fg='yellow'))
    helm.dependency.update(path)
    click.echo(click.style('Done!\n', fg='green'))

    click.echo(click.style('Packaging ...', fg='yellow'))
    helm.package('--app-version', version, '--version', version, path)
    tar = '%s-%s.tgz' % (path, version)

    click.echo(click.style('Uploading ...', fg='yellow'))
    cmd_result = curl('-F', 'chart=@%s' % tar,
                      get_chart_repo(ctx.obj.get('helm_repo')) + '/api/charts')

    click.echo(click.style('Cleaning ...', fg='yellow'))
    rm(tar)

    result = json.loads(cmd_result.stdout)
    if result.get('saved'):
        click.echo(click.style('SUCCESS!', fg='green'))
    else:
        click.echo(click.style('FAILED!: %s' % result.get('error'), fg='red'))
Exemplo n.º 6
0
class ReleaseTest:

    st_bool = strategy("bool")

    def __init__(self, gov, registry, create_token, create_vault):
        self.gov = gov
        self.registry = registry
        self.create_token = lambda s: create_token()

        def create_vault_adaptor(self, *args, **kwargs):
            return create_vault(*args, **kwargs)

        self.create_vault = create_vault_adaptor

    def setup(self):
        self.latest_version = Version("1.0.0")
        token = self.create_token()
        vault = self.create_vault(token, version=str(self.latest_version))
        self.vaults = {token: [vault]}
        self.registry.newRelease(vault, {"from": self.gov})
        self.experiments = {}

    def rule_new_release(self, new_token="st_bool"):
        if new_token or len(self.vaults.keys()) == 0:
            token = self.create_token()
        else:
            token = list(self.vaults.keys())[-1]

        self.latest_version = self.latest_version.next_patch()

        vault = self.create_vault(token, version=str(self.latest_version))
        print(f"Registry.newRelease({token}, {self.latest_version})")
        self.registry.newRelease(vault, {"from": self.gov})

        if token in self.vaults:
            self.vaults[token].append(vault)
        else:
            self.vaults[token] = [vault]

    def rule_new_deployment(self, new_token="st_bool"):
        tokens_with_stale_deployments = [
            token for token, deployments in self.vaults.items()
            if Version(deployments[-1].apiVersion()) < self.latest_version
        ]
        if new_token or len(tokens_with_stale_deployments) == 0:
            token = self.create_token()
        else:
            token = tokens_with_stale_deployments[-1]

        print(f"Registry.newVault({token}, {self.latest_version})")
        vault = Vault.at(
            self.registry.newVault(token, self.gov, self.gov, "",
                                   "").return_value)

        if token in self.vaults:
            self.vaults[token].append(vault)
        else:
            self.vaults[token] = [vault]

    def rule_new_experiment(self):
        token = self.create_token()
        print(f"Registry.newExperimentalVault({token}, {self.latest_version})")

        vault = Vault.at(
            self.registry.newExperimentalVault(token, self.gov, self.gov,
                                               self.gov, "", "").return_value)

        self.experiments[token] = [vault]

    def rule_endorse_experiment(self):
        experiments_with_latest_api = [
            (token, deployments[-1])
            for token, deployments in self.experiments.items()
            if (Version(deployments[-1].apiVersion()) == self.latest_version
                and (token not in self.vaults
                     or Version(self.vaults[token][-1].apiVersion()) < Version(
                         deployments[-1].apiVersion())))
        ]
        if len(experiments_with_latest_api) > 0:
            token, vault = experiments_with_latest_api[-1]
            print(f"Registry.endorseVault({token}, {self.latest_version})")
            self.registry.endorseVault(vault, {"from": self.gov})

            if token in self.vaults:
                self.vaults[token].append(vault)
            else:
                self.vaults[token] = [vault]

    def invariant(self):
        for token, deployments in self.vaults.items():
            # Check that token matches up
            assert deployments[0].token() == token
            # Strictly linearly increasing versions
            last_version = Version(deployments[0].apiVersion())
            assert last_version <= self.latest_version

            for vault in deployments[1:]:
                # Check that token matches up
                assert vault.token() == token
                # Strictly linearly increasing versions
                assert last_version < Version(
                    vault.apiVersion()) <= self.latest_version
Exemplo n.º 7
0
    def _normalize(self, constraint):
        """
        Normalizes the constraint so that it can be understood
        by the underlying system.
        
        :param constraint: The dependency constraint.
        :type constraint: str or dict
        
        :rtype: str
        """
        if self.is_vcs_dependency():
            # Any VCS dependency is considered prerelease
            self._is_prerelease = True

            return self._normalize_vcs_constraint(constraint)

        version = constraint
        if isinstance(version, dict):
            version = version['version']

        constraint = self._spec(version)
        normalized = []

        for spec in constraint.specs:
            version = spec.spec

            if VersionParser.parse_stability(version) == 'dev':
                self._accepts_prereleases = True

            major, minor, patch, prerelease = (version.major, version.minor,
                                               version.patch,
                                               version.prerelease)
            current = '{}.{}.{}'.format(major, minor or 0, patch or 0)
            current = Version(current)

            if spec.kind == SpecItem.KIND_CARET:
                if current.major != 0 or minor is None:
                    upper = current.next_major()
                elif current.minor != 0 or patch is None:
                    upper = current.next_minor()
                else:
                    upper = current.next_patch()

                if prerelease:
                    current = str(current) + '{}'.format(''.join(prerelease))

                normalized.append('>={},<{}'.format(current, upper))
            elif spec.kind == SpecItem.KIND_TILDE:
                if minor is None and patch is None:
                    upper = current.next_major()
                else:
                    upper = current.next_minor()

                upper = '{}.{}.{}'.format(*upper)

                normalized.append('>={},<{}'.format(current, upper))

                if prerelease:
                    current = str(current) + '{}'.format(''.join(prerelease))
            else:
                current = spec.kind + str(current)
                if prerelease:
                    current += '{}'.format(''.join(prerelease))

                normalized.append(current)

        return ','.join(normalized)
import sys
from pathlib import Path
from semantic_version import Version

# Assume this script is called from the root directory

version_path = Path('src/resources/version.txt')
v = Version(version_path.read_text())

increment_type = sys.argv[1]
if increment_type == 'major':
    v = v.next_major()
elif increment_type == 'minor':
    v = v.next_minor()
elif increment_type == 'patch':
    v = v.next_patch()
else:
    raise ValueError(f'Increment type should be "major", "minor", or '
                     f'"patch", but was {increment_type}')

version_path.write_text(str(v))
Exemplo n.º 9
0
    with open(SRC + PROJECT + file_name, "r") as infile:
        for line in infile:
            if line.strip().startswith("__version__"):
                if '"' not in line:
                    print(file_name)
                    print(line)
                    raise TypeError("Please format your code with Black.")
                else:
                    parts = line.split('"')
                    if len(parts) != 3:
                        raise TypeError(
                            'Version must be of form __version__ = "1.1.1"  with no comments'
                        )
                    if version is None:
                        version = Version(parts[1])
                        next_version = version.next_patch()
                to_write.append('__version__ = "{0}"'.format(
                    str(next_version)))
            else:
                to_write.append(line)

    if DEBUG:
        for line in to_write:
            print(line, end="")
    else:
        with open(SRC + PROJECT + file_name, "w") as outfile:
            outfile.writelines(to_write)

# setup.py related. setup.py itself should read __init__.py or __version__.py
to_write = []
other_files = ["setup.cfg"]