示例#1
0
def _get_version(config: Mapping) -> Tuple[Version, str]:
    vcs = Vcs(config["vcs"])
    style = config["style"]
    if style is not None:
        style = Style(style)

    version = Version.from_vcs(vcs, config["pattern"], config["latest-tag"],
                               config["subversion"]["tag-dir"])

    if config["format-jinja"]:
        base = version.base
        revision = version.revision
        if config["bump"]:
            if version.stage is None:
                base = bump_version(version.base)
            else:
                if version.revision is None:
                    revision = 2
                else:
                    revision = version.revision + 1

        default_context = {
            "base": base,
            "version": version,
            "stage": version.stage,
            "revision": revision,
            "distance": version.distance,
            "commit": version.commit,
            "dirty": version.dirty,
            "env": os.environ,
            "bump_version": bump_version,
            "tagged_metadata": version.tagged_metadata,
            "serialize_pep440": serialize_pep440,
            "serialize_pvp": serialize_pvp,
            "serialize_semver": serialize_semver,
        }
        custom_context = {}  # type: dict
        for entry in config["format-jinja-imports"]:
            if "module" in entry:
                module = import_module(entry["module"])
                if "item" in entry:
                    custom_context[entry["item"]] = getattr(
                        module, entry["item"])
                else:
                    custom_context[entry["module"]] = module
        serialized = jinja2.Template(
            config["format-jinja"]).render(**default_context, **custom_context)
        if style is not None:
            check_version(serialized, style)
    else:
        serialized = version.serialize(
            metadata=config["metadata"],
            dirty=config["dirty"],
            format=config["format"],
            style=style,
            bump=config["bump"],
            tagged_metadata=config["tagged-metadata"],
        )

    return (version, serialized)
示例#2
0
def _bump_version_per_config(version: Version, bump: bool) -> Version:
    if not bump or version.distance == 0:
        return version

    version = copy.deepcopy(version)

    if version.stage is None:
        version.base = bump_version(version.base)
    else:
        if version.revision is None:
            version.revision = 2
        else:
            version.revision += 1

    return version
示例#3
0
from dunamai import Version, bump_version, serialize_pep440

if "CI_MERGE_REQUEST_IID" in os.environ:
    mr_version: Optional[str] = os.environ["CI_MERGE_REQUEST_IID"]
else:
    mr_version = None

build_official = "BUILD_OFFICIAL" in os.environ

v = Version.from_git(pattern=r"^(?P<base>\d+\.\d+\.\d+)$")
if v.distance == 0:
    out = serialize_pep440(v.base, v.stage, v.revision)
else:
    if build_official:
        out = serialize_pep440(bump_version(v.base),
                               None,
                               None,
                               dev=v.distance)
    elif mr_version is not None:
        out = serialize_pep440(bump_version(v.base),
                               None,
                               None,
                               dev=v.distance,
                               metadata=[f"mr{mr_version}"])
    else:
        out = serialize_pep440(bump_version(v.base),
                               None,
                               None,
                               dev=v.distance,
                               metadata=[f"g{v.commit}"])
示例#4
0
def test__bump_version():
    assert bump_version("1.2.3") == "1.2.4"

    assert bump_version("1.2.3", 0) == "2.0.0"
    assert bump_version("1.2.3", 1) == "1.3.0"
    assert bump_version("1.2.3", 2) == "1.2.4"

    assert bump_version("1.2.3", -1) == "1.2.4"
    assert bump_version("1.2.3", -2) == "1.3.0"
    assert bump_version("1.2.3", -3) == "2.0.0"

    with pytest.raises(IndexError):
        bump_version("1.2.3", 3)

    with pytest.raises(IndexError):
        bump_version("1.2.3", -4)

    with pytest.raises(ValueError):
        bump_version("foo", 0)