Mercurial > louis > mq > lightsd
changeset 435:a021acf00891
wip release stuff
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Sat, 16 Apr 2016 19:42:55 -0700 |
parents | 88eef83cfb09 |
children | 481c9363b4e6 |
files | add_make_release.patch |
diffstat | 1 files changed, 160 insertions(+), 60 deletions(-) [+] |
line wrap: on
line diff
--- a/add_make_release.patch Sat Apr 16 16:26:18 2016 -0700 +++ b/add_make_release.patch Sat Apr 16 19:42:55 2016 -0700 @@ -5,18 +5,36 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -24,7 +24,10 @@ +@@ -24,7 +24,13 @@ # TODO: we need at least 2.0.19-stable because of the logging defines FIND_PACKAGE(Event2 REQUIRED COMPONENTS core) FIND_PACKAGE(Endian REQUIRED) ++FIND_PACKAGE(Hg) +SET(Python_ADDITIONAL_VERSIONS 3) +FIND_PACKAGE(PythonInterp) FIND_PACKAGE(Sphinx) ++FIND_PACKAGE(BsdTar) +FIND_PACKAGE(Virtualenv) ++FIND_PACKAGE(Xz) INCLUDE(CheckFunctionExists) INCLUDE(CheckVariableExists) -@@ -105,7 +108,17 @@ +@@ -89,12 +95,11 @@ + ADD_SUBDIRECTORY(compat) + ADD_SUBDIRECTORY(core) + ADD_SUBDIRECTORY(lifx) ++ADD_SUBDIRECTORY(dist) + + # 2.8.11 is the first version with TARGET_INCLUDE_DIRECTORIES: + IF (CMAKE_VERSION VERSION_GREATER 2.8.10) +- CONFIGURE_FILE( +- CTestCustom.cmake.in "${LIGHTSD_BINARY_DIR}/CTestCustom.cmake" @ONLY +- ) ++ CONFIGURE_FILE(CTestCustom.cmake.in "${LIGHTSD_BINARY_DIR}/CTestCustom.cmake" @ONLY) + ADD_SUBDIRECTORY(tests) + ELSE () + MESSAGE( +@@ -105,7 +110,10 @@ ENDIF () IF (SPHINX_FOUND) @@ -24,16 +42,32 @@ ADD_SUBDIRECTORY(docs) +ELSE () + MESSAGE(STATUS "Shpinx wasn't found, docs generation disabled") -+ENDIF () -+ -+IF (PYTHONINTERP_FOUND AND PYTHON_VERSION_MAJOR EQUAL 3 AND VIRTUALENV_FOUND) -+ MESSAGE(STATUS "Python 3 and virtualenv found, release commands enabled") -+ ADD_SUBDIRECTORY(dist) # release script for buildbot integration -+ELSE () -+ MESSAGE(STATUS "Python 3 and/or virtualenv weren't found, release commands disabled") ENDIF () INSTALL( +diff --git a/CMakeScripts/FindBsdTar.cmake b/CMakeScripts/FindBsdTar.cmake +new file mode 100644 +--- /dev/null ++++ b/CMakeScripts/FindBsdTar.cmake +@@ -0,0 +1,6 @@ ++FIND_PROGRAM( ++ BSDTAR_EXECUTABLE NAMES bsdtar ++ DOC "Path to the bsdtar executable" ++) ++ ++FIND_PACKAGE_HANDLE_STANDARD_ARGS(BsdTar DEFAULT_MSG BSDTAR_EXECUTABLE) +diff --git a/CMakeScripts/FindSphinx.cmake b/CMakeScripts/FindSphinx.cmake +--- a/CMakeScripts/FindSphinx.cmake ++++ b/CMakeScripts/FindSphinx.cmake +@@ -1,7 +1,7 @@ + FIND_PROGRAM( + SPHINX_EXECUTABLE + NAMES sphinx-build sphinx-build2 +- DOC "Path to sphinx-build executable" ++ DOC "Path to the sphinx-build executable" + ) + + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Sphinx DEFAULT_MSG SPHINX_EXECUTABLE) diff --git a/CMakeScripts/FindVirtualenv.cmake b/CMakeScripts/FindVirtualenv.cmake new file mode 100644 --- /dev/null @@ -46,59 +80,123 @@ +) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Virtualenv DEFAULT_MSG VIRTUALENV_EXECUTABLE) +diff --git a/CMakeScripts/FindXz.cmake b/CMakeScripts/FindXz.cmake +new file mode 100644 +--- /dev/null ++++ b/CMakeScripts/FindXz.cmake +@@ -0,0 +1,6 @@ ++FIND_PROGRAM( ++ XZ_EXECUTABLE NAMES xz ++ DOC "Path to the xz executable" ++) ++ ++FIND_PACKAGE_HANDLE_STANDARD_ARGS(Xz DEFAULT_MSG XZ_EXECUTABLE) diff --git a/dist/CMakeLists.txt b/dist/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/dist/CMakeLists.txt -@@ -0,0 +1,49 @@ +@@ -0,0 +1,102 @@ +CONFIGURE_FILE(release.py.in "${CMAKE_CURRENT_BINARY_DIR}/release.py") + ++SET(TAR_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/lightsd-${LIGHTSD_VERSION}.tar") ++SET(TARGZ_ARCHIVE "${TAR_ARCHIVE}.gz") ++SET(TARXZ_ARCHIVE "${TAR_ARCHIVE}.xz") ++ ++# I wanted to use hg export but then dpkg gave me troubles: ++IF (BSDTAR_FOUND AND HG_FOUND) ++ MESSAGE(STATUS "bsdtar and mercurial found, archives generation enabled") ++ ++ ADD_CUSTOM_TARGET( ++ clean_source_dir ++ COMMAND "${HG_EXECUTABLE}" -R "${LIGHTSD_SOURCE_DIR}" --config extensions.purge= purge -a --all --files --dirs ++ VERBATIM ++ ) ++ ++ ADD_CUSTOM_COMMAND( ++ OUTPUT "${TAR_ARCHIVE}" "${TARGZ_ARCHIVE}" ++ COMMAND "${BSDTAR_EXECUTABLE}" -C "${LIGHTSD_SOURCE_DIR}" -cf "${TAR_ARCHIVE}" -s "/^/lightsd-${LIGHTSD_VERSION}/" . ++ COMMAND "${BSDTAR_EXECUTABLE}" -C "${LIGHTSD_SOURCE_DIR}" -czf "${TARGZ_ARCHIVE}" -s "/^/lightsd-${LIGHTSD_VERSION}/" . ++ DEPENDS clean_source_dir ++ VERBATIM ++ ) ++ ++ IF (XZ_FOUND) ++ ADD_CUSTOM_COMMAND( ++ OUTPUT "${TARXZ_ARCHIVE}" ++ COMMAND "${XZ_EXECUTABLE}" -k "${TAR_ARCHIVE}" ++ DEPENDS "${TAR_ARCHIVE}" ++ VERBATIM ++ ) ++ ADD_CUSTOM_TARGET( ++ archives ++ COMMENT "Creating tarballs for release ${LIGHTSD_VERSION}" ++ DEPENDS "${TAR_ARCHIVE}" "${TARGZ_ARCHIVE}" "${TARXZ_ARCHIVE}" ++ ) ++ ELSE () ++ MESSAGE(WARNING "Not creating a xz compressed tarball since xz wasn't found") ++ ADD_CUSTOM_TARGET( ++ archives ++ COMMENT "Creating tarballs for release ${LIGHTSD_VERSION}" ++ DEPENDS "${TAR_ARCHIVE}" "${TARGZ_ARCHIVE}" ++ ) ++ ENDIF () ++ELSE () ++ MESSAGE(STATUS "bsdtar and/or mercurial weren't found, archives generation disabled") ++ENDIF () ++ +SET(VENV_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/py-env") ++SET(VENV_PYTHON "${VENV_DIRECTORY}/bin/python") + -+ADD_CUSTOM_COMMAND( -+ OUTPUT "${VENV_DIRECTORY}.stamp" -+ COMMAND "${VIRTUALENV_EXECUTABLE}" -p "${PYTHON_EXECUTABLE}" "${VENV_DIRECTORY}" -+ COMMAND "${VENV_DIRECTORY}/bin/pip" install -Ur "${CMAKE_CURRENT_SOURCE_DIR}/requirements-release.txt" -+ COMMAND "${CMAKE_COMMAND}" -E touch "${VENV_DIRECTORY}.stamp" -+ COMMENT "Setting up a Python virtualenv at ${VENV_DIRECTORY} for the release script" -+ VERBATIM -+) ++IF (PYTHONINTERP_FOUND AND PYTHON_VERSION_MAJOR EQUAL 3 AND VIRTUALENV_FOUND) ++ MESSAGE(STATUS "Python 3 and virtualenv found, release commands enabled") + -+ADD_CUSTOM_TARGET( -+ release -+ COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" -+ COMMENT "Starting release for ${LIGHTSD_VERSION}" -+ DEPENDS "${VENV_DIRECTORY}.stamp" -+ VERBATIM -+) -+ -+IF (DEFINED "${LIGHTSD_RELEASE_PACKAGES_DIR}") -+ MESSAGE( -+ STATUS -+ "Downstream packages directory specified at " -+ "${LIGHTSD_RELEASE_PACKAGES_DIR}, enabling package release integration" ++ ADD_CUSTOM_COMMAND( ++ OUTPUT "${VENV_DIRECTORY}.stamp" ++ COMMAND "${VIRTUALENV_EXECUTABLE}" -p "${PYTHON_EXECUTABLE}" "${VENV_DIRECTORY}" ++ COMMAND "${VENV_DIRECTORY}/bin/pip" install -Ur "${CMAKE_CURRENT_SOURCE_DIR}/requirements-release.txt" ++ COMMAND "${CMAKE_COMMAND}" -E touch "${VENV_DIRECTORY}.stamp" ++ COMMENT "Setting up a Python virtualenv at ${VENV_DIRECTORY} for the release script" ++ VERBATIM + ) + + ADD_CUSTOM_TARGET( -+ release_new_tag -+ COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" release_new_tag -+ COMMENT "Starting downstream packages release for ${LIGHTSD_VERSION}" ++ release ++ COMMAND "${VENV_PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" ++ COMMENT "Starting release for ${LIGHTSD_VERSION}" + DEPENDS "${VENV_DIRECTORY}.stamp" + VERBATIM + ) -+ ADD_CUSTOM_TARGET( -+ release_new_tag -+ COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" release_new_tag -+ COMMENT "Starting downstream packages release for ${LIGHTSD_VERSION}" -+ DEPENDS "${VENV_DIRECTORY}.stamp" -+ VERBATIM -+ ) ++ ++ IF (DEFINED "${LIGHTSD_RELEASE_PACKAGES_DIR}") ++ MESSAGE( ++ STATUS ++ "Downstream packages directory specified at " ++ "${LIGHTSD_RELEASE_PACKAGES_DIR}, enabling package release integration" ++ ) ++ ++ ADD_CUSTOM_TARGET( ++ release_new_tag ++ COMMAND "${VENV_PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" release_new_tag ++ COMMENT "Starting downstream packages release for ${LIGHTSD_VERSION}" ++ DEPENDS "${VENV_DIRECTORY}.stamp" ++ VERBATIM ++ ) ++ ADD_CUSTOM_TARGET( ++ release_new_tag ++ COMMAND "${VENV_PYTHON}" "${CMAKE_CURRENT_BINARY_DIR}/release.py" release_new_tag ++ COMMENT "Starting downstream packages release for ${LIGHTSD_VERSION}" ++ DEPENDS "${VENV_DIRECTORY}.stamp" ++ VERBATIM ++ ) ++ ELSE () ++ MESSAGE( ++ STATUS ++ "No directory specified for downstream packages, " ++ "package release integration disabled" ++ ) ++ ENDIF () +ELSE () -+ MESSAGE( -+ STATUS -+ "No directory specified for downstream packages, " -+ "package release integration disabled" -+ ) ++ MESSAGE(STATUS "Python 3 and/or virtualenv weren't found, release commands disabled") +ENDIF () diff --git a/dist/dpkg/.hgtags b/dist/dpkg/.hgtags new file mode 100644 @@ -769,7 +867,7 @@ +PKG_LICENSE:=GPL-3.0+ +PKG_SOURCE_URL:=https://downloads.lightsd.io/releases/ +#PKG_SOURCE_URL:=http://localhost:8000/ -+PKG_SOURCE:=$(PKG_VERSION).tar.gz ++PKG_SOURCE:={{ archive_name }} +PKG_MD5SUM:={{ archive_md5 }} +PKG_BUILD_DIR:=$(BUILD_DIR)/lightsd-$(PKG_VERSION) + @@ -884,7 +982,7 @@ + "ipython: makes lightsc.py more user-friendly" +) +makedepends=("cmake>=2.8.11") -+source=("https://downloads.lightsd.io/releases/${pkgver}.tar.gz") ++source=("{{ archive_url }}") +sha256sums=("{{ archive_sha256 }}") +#source=("src/${pkgname}-${pkgver}::hg+file:///home/kal/projs/lightsd") +#sha256sums="SKIP" @@ -943,7 +1041,7 @@ new file mode 100644 --- /dev/null +++ b/dist/release.py.in -@@ -0,0 +1,169 @@ +@@ -0,0 +1,171 @@ +#!/usr/bin/env python3 + +import click @@ -963,7 +1061,7 @@ + + +def repopath(repo): -+ return os.path.join([LIGHTSD_SOURCE_DIR, repo]) ++ return os.path.join(LIGHTSD_SOURCE_DIR, repo) + + +class PackageContext: @@ -993,7 +1091,7 @@ + def __init__(self, repo): + self._repo = repo + self._render_ctx = jinja2.Environment(loader=jinja2.FileSystemLoader( -+ os.path.join(LIGHTSD_SOURCE_DIR, "dist", type) ++ os.path.join(LIGHTSD_SOURCE_DIR, "dist", self.TYPE) + )) + + def render(self, pkg_ctx): @@ -1062,7 +1160,8 @@ +) + + -+@click.group() ++@click.group(invoke_without_command=True) ++@click.pass_context +def release(ctx): + if ctx.invoked_subcommand is None: + # TODO: developer "make release" flow @@ -1073,11 +1172,11 @@ +@click.command() +# hg log -R … -r "max(tag('re:\d+.\d+.\d+'))" -T "{tags}" +@click.argument("version") -+@click.argument("archive", type=click.Path) ++@click.argument("archive", type=click.Path(exists=True)) +def new_tag(version, archive): + archive_md5 = hashlib.md5() + archive_sha256 = hashlib.sha256() -+ with open("archive", "rb") as fp: ++ with open(archive, "rb") as fp: + while True: + chunk = fp.read(ARCHIVE_READ_SIZE) + if not chunk: @@ -1087,14 +1186,15 @@ + archive_md5 = archive_md5.hexdigest() + archive_sha256 = archive_sha256.hexdigest() + ++ archive_name = os.path.basename(archive) + pkg_ctx = PackageContext( + version=version, + dev_version=semver.bump_patch(version), -+ archive=archive, ++ archive_name=archive_name, + archive_md5=archive_md5, + archive_sha256=archive_sha256, -+ archive_url="https://downloads.lightsd.io/releases/{}.tar.gz".format( -+ version ++ archive_url="https://downloads.lightsd.io/releases/{}".format( ++ archive_name + ), + ) + for pkg in PACKAGES: @@ -1118,6 +1218,6 @@ --- /dev/null +++ b/dist/requirements-release.txt @@ -0,0 +1,3 @@ -+click~=6.6 -+jinja~=1.2 -+semver~=2.4.1 ++click>=6.6,<7.0 ++jinja2>=2.8,<3.0 ++semver>=2.4.1,<3.0.0