changeset 443:cf7f56964196

wip, reworked the client-side release commands
author Louis Opter <kalessin@kalessin.fr>
date Thu, 28 Apr 2016 23:50:40 -0700
parents 6615c130dab6
children 918645c7e15e
files add_make_release.patch
diffstat 1 files changed, 102 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/add_make_release.patch	Wed Apr 27 00:02:19 2016 -0700
+++ b/add_make_release.patch	Thu Apr 28 23:50:40 2016 -0700
@@ -133,17 +133,19 @@
 new file mode 100644
 --- /dev/null
 +++ b/CMakeScripts/LightsdVersion.cmake
-@@ -0,0 +1,5 @@
+@@ -0,0 +1,7 @@
 +# NOTE: auto-generated by the release target
 +SET(CPACK_PACKAGE_VERSION_MAJOR "1")
 +SET(CPACK_PACKAGE_VERSION_MINOR "2")
 +SET(CPACK_PACKAGE_VERSION_PATCH "0")
-+SET(LIGHTSD_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
++SET(LIGHTSD_PRERELEASE "rc.1")
++SET(LIGHTSD_BUILD "")
++SET(LIGHTSD_VERSION "1.2.0-rc.1")
 diff --git a/dist/CMakeLists.txt b/dist/CMakeLists.txt
 new file mode 100644
 --- /dev/null
 +++ b/dist/CMakeLists.txt
-@@ -0,0 +1,60 @@
+@@ -0,0 +1,74 @@
 +IF (
 +    PYTHONINTERP_FOUND
 +    AND PYTHON_VERSION_MAJOR EQUAL 3
@@ -179,7 +181,21 @@
 +
 +    ADD_CUSTOM_TARGET(
 +        release
-+        COMMAND "${VENV_PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}/release.py"
++        COMMAND "${VENV_PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" "release"
++        DEPENDS "${VENV_STAMP}"
++        VERBATIM
++    )
++
++    ADD_CUSTOM_TARGET(
++        pre_release
++        COMMAND "${VENV_PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" "pre_release"
++        DEPENDS "${VENV_STAMP}"
++        VERBATIM
++    )
++
++    ADD_CUSTOM_TARGET(
++        package_release
++        COMMAND "${VENV_PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" "package_release"
 +        DEPENDS "${VENV_STAMP}"
 +        VERBATIM
 +    )
@@ -1047,7 +1063,7 @@
 new file mode 100644
 --- /dev/null
 +++ b/dist/release.py.in
-@@ -0,0 +1,387 @@
+@@ -0,0 +1,438 @@
 +#!/usr/bin/env python3
 +
 +import click
@@ -1105,10 +1121,20 @@
 +
 +
 +def next_dev_version(version):
-+    parts = semver.parse(version)
++    parts, version = version, semver.format_version(**version)
 +    if parts["prerelease"] is not None:
 +        return semver.bump_prerelease(version)
-+    return semver.bump_prerelease(semver.bump_patch(version))
++    return semver.parse(semver.bump_prerelease(semver.bump_patch(version)))
++
++
++def next_pre_release(version):
++    version = semver.format_version(**version)
++    return semver.parse(semver.bump_prerelease(version))
++
++
++def next_build_release(version):
++    version = semver.format_version(**version)
++    return semver.parse(semver.bump_build(version))
 +
 +
 +def readfile(fp, read_size=FILE_READ_SIZE):
@@ -1258,28 +1284,33 @@
 +    PKGBUILDPackage(repopath("pkgbuild-lightsd")),
 +)
 +
-+
-+def _update_lightsd_version_cmake_include(version):
-+    lightsd_version_file = os.path.join(
-+        LIGHTSD_SOURCE_DIR, "CMakeScripts", "LightsdVersion.cmake"
-+    )
-+    with open(lightsd_version_file, "wb") as fp:
-+        fp.write("""# NOTE: auto-generated by the release target
++LIGHTSD_VERSION_CMAKE_TEMPLATE = (
++"""# NOTE: auto-generated by the release target
 +SET(CPACK_PACKAGE_VERSION_MAJOR "{major}")
 +SET(CPACK_PACKAGE_VERSION_MINOR "{minor}")
 +SET(CPACK_PACKAGE_VERSION_PATCH "{patch}")
 +SET(LIGHTSD_PRERELEASE "{prerelease}")
 +SET(LIGHTSD_BUILD "{build}")
-+SET(LIGHTSD_VERSION "${{{version}}}")
-+""".format(version=version, **semver.parse(version)).encode("utf-8"))  # noqa
++SET(LIGHTSD_VERSION "{version}")
++"""  # noqa
++)
 +
 +
-+@click.group(invoke_without_command=True)
-+@click.pass_context
-+def release(ctx):
-+    if ctx.invoked_subcommand is not None:
-+        return
++def _update_lightsd_version_cmake_include(version):
++    version_parts = {
++        k: v if v is not None else ""
++        for k, v in semver.parse(version).items()
++    }
++    lightsd_version_file = os.path.join(
++        LIGHTSD_SOURCE_DIR, "CMakeScripts", "LightsdVersion.cmake"
++    )
++    with open(lightsd_version_file, "wb") as fp:
++        fp.write(LIGHTSD_VERSION_CMAKE_TEMPLATE.format(
++            version=version, **version_parts
++        ).encode("utf-8"))
 +
++
++def _release(version, next_version):
 +    revision, branch = [
 +        part.strip() for part in subprocess.check_output([
 +            HG_EXECUTABLE, "-R", LIGHTSD_SOURCE_DIR, "id", "--id", "--branch"
@@ -1300,11 +1331,9 @@
 +
 +    # Re-gen LightsdVersion.cmake with major.minor.patch, tag, and re-gen
 +    # LightsdVersion.cmake after bumping minor adding a prerelease tag:
-+    version = semver.parse(LIGHTSD_VERSION)
-+    version["prerelease"] = version["build"] = None
 +    version = click.prompt(
 +        "Confirm the version to release",
-+        default=semver.format_version(**version),
++        default=version,
 +        type=lambda arg: semver.format_version(**semver.parse(arg))
 +    )
 +    _update_lightsd_version_cmake_include(version)
@@ -1313,19 +1342,57 @@
 +        "tag", "-m", "Tagging release {}".format(version), version
 +        # TODO: use docutils to extract the changelog section
 +    ])
-+    version = next_dev_version(version)
-+    _update_lightsd_version_cmake_include(version)
++    _update_lightsd_version_cmake_include(next_version)
 +    subprocess.check_call([
 +        HG_EXECUTABLE, "-R", LIGHTSD_SOURCE_DIR,
-+        "commit", "-m", "Back to development, {}".format(version)
++        "commit", "-m", "Back to development, {}".format(next_version)
 +    ])
 +
 +    subprocess.check_call([HG_EXECUTABLE, "-R", LIGHTSD_SOURCE_DIR, "out"])
 +    if click.confirm("Are you ready to push those commit?"):
++        return
 +        subprocess.check_call([HG_EXECUTABLE, "-R", LIGHTSD_SOURCE_DIR, "push"])
 +
 +
-+@release.command()
++@click.group()
++def cli():
++    pass
++
++
++@cli.command()
++def pre_release():
++    version = semver.parse(LIGHTSD_VERSION)
++    if version["prerelease"] is None:
++        version = next_pre_release(version)
++    _release(
++        semver.format_version(**version),
++        semver.format_version(**next_pre_release(version)),
++    )
++
++
++@cli.command()
++def release():
++    version = semver.parse(LIGHTSD_VERSION)
++    version["prerelease"] = version["build"] = None
++    _release(
++        semver.format_version(**version),
++        semver.format_version(**next_dev_version(version)),
++    )
++
++
++@cli.command()
++def package_release(release):
++    version = semver.parse(LIGHTSD_VERSION)
++    # TODO: version = previous_release (including build metadata)
++    #       (maybe downloads.lightsd.io can help)
++    version = next_build_release(version)
++    _release(
++        semver.format_version(**version),
++        semver.format_version(**next_build_release(version)),
++    )
++
++
++@cli.command()
 +def new_tag():
 +    if not LIGHTSD_PKGS_DIR or not LIGHTSD_ARCHIVES_DIR:
 +        error_echo(
@@ -1342,10 +1409,10 @@
 +        gz_archive_name
 +    )
 +
-+#   action_echo("Checking for an existing release")
-+#   response = requests.head(gz_archive_url, allow_redirects=True)
-+#   if response.status_code == requests.codes.ok:
-+#       error_echo("Release already found at {}!".format(gz_archive_url))
++    action_echo("Checking for an existing release")
++    response = requests.head(gz_archive_url, allow_redirects=True)
++    if response.status_code == requests.codes.ok:
++        error_echo("Release already found at {}!".format(gz_archive_url))
 +
 +    prereq_echo("Cleaning-up the source tree")
 +    subprocess.check_call([
@@ -1394,7 +1461,7 @@
 +
 +    pkg_ctx = PackageContext(
 +        version=LIGHTSD_VERSION,
-+        dev_version=next_dev_version(LIGHTSD_VERSION),
++        dev_version=next_dev_version(semver.parse(LIGHTSD_VERSION)),
 +        archive_name=gz_archive_name,
 +        archive_md5=gz_archive_md5,
 +        archive_sha256=gz_archive_sha256,
@@ -1412,7 +1479,7 @@
 +    result_echo("New upstream release {}".format(LIGHTSD_VERSION))
 +
 +
-+@release.command()
++@cli.command()
 +def docs():
 +    version = semver.parse(LIGHTSD_VERSION)
 +    dest_dir = os.path.join(LIGHTSD_DOCS_DIR, LIGHTSD_VERSION)
@@ -1434,7 +1501,7 @@
 +
 +
 +if __name__ == "__main__":
-+    release()
++    cli()
 diff --git a/dist/requirements-release.txt b/dist/requirements-release.txt
 new file mode 100644
 --- /dev/null