Mercurial > louis > mq > lightsd
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