changeset 429:b766b8a3370d

click click wip
author Louis Opter <kalessin@kalessin.fr>
date Tue, 12 Apr 2016 01:06:45 -0700
parents 04c5d201a054
children e0d8348169da
files add_make_release.patch
diffstat 1 files changed, 98 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/add_make_release.patch	Sun Apr 10 23:40:40 2016 -0700
+++ b/add_make_release.patch	Tue Apr 12 01:06:45 2016 -0700
@@ -1,5 +1,5 @@
 # HG changeset patch
-# Parent  550428b5500438ecb084b12a822283b52460edf0
+# Parent  fce5e79a61b88e312ef56ff08d7e08b9c08c5351
 Add a release command that can be used from buildbot
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
@@ -304,12 +304,13 @@
 new file mode 100644
 --- /dev/null
 +++ b/dist/release.py.in
-@@ -0,0 +1,36 @@
+@@ -0,0 +1,115 @@
 +#!/usr/bin/env python3
 +
++import click
 +import os
++import jinja
 +import subprocess
-+import jinja
 +
 +# where the lightsd sources are:
 +LIGHTSD_SOURCE_DIR="@LIGHTSD_SOURCE_DIR@"
@@ -322,22 +323,107 @@
 +    return os.path.join([LIGHTSD_SOURCE_DIR, repo])
 +
 +
++class PackageContext:
++
++    __slots__ = (
++        "lightsd_version",
++        "lightsd_archive",
++    )
++
++    def __init__(self, **kwargs):
++        for name, value in kwargs.iteritems():
++            if name not in self.__slots__:
++                raise TypeError("{}: invalid argument {}".format(
++                    self.__class__.__name__, name
++                ))
++            setattr(self, name, value)
++
++
 +class DownstreamPackage:
 +
-+    def __init__(self, distpath, repopath, templates=None):
++    def __init__(self, repo):
++        self._repo = repo
++
++    def commit(self, msg):
++        dirty = len(subprocess.check_output([
++            "hg", "-R", self._repo, "status"
++        ])) != 0
++        if dirty is False:
++            return
++
++        subprocess.check_call([
++            "hg", "-R", self._repo, "commit", "-m", msg
++        ])
++
++
++class DebianPackage(DownstreamPackage):
++
++    def render(self, pkg_ctx):
 +        pass
 +
-+    def render(self, context):
++
++class HomebrewPackage(DownstreamPackage):
++
++    def render(self, pkg_ctx):
 +        pass
 +
-+    def push(self):
++
++class OpenWRTPackage(DownstreamPackage):
++
++    def render(self, pkg_ctx):
 +        pass
 +
 +
++class PKGBUILDPackage(DownstreamPackage):
++
++    def render(self, pkg_ctx):
++        pass
++
++
++PACKAGES = (
++    DebianPackage(repopath("dpkg-lightsd")),
++    HomebrewPackage(repopath("homebrew-lightsd")),
++    OpenWRTPackage(repopath("openwrt-lightsd")),
++    PKGBUILDPackage(repopath("pkgbuild-lightsd")),
++)
++
++
++@click.group()
++def release(ctx):
++    if ctx.invoked_subcommand is None:
++        # TODO: developer "make release" flow
++        return
++
++
++@click.command()
++# hg log -R … -r "max(tag('re:\d+.\d+.\d+'))" -T "{tags}"
++@click.argument("version")
++@click.argument("archive", type=click.Path)
++def new_tag(version, archive):
++    pkg_ctx = PackageContext(
++        lightsd_version=version,
++        lightsd_archive=archive,
++    )
++    for pkg in PACKAGES:
++        pkg.render(pkg_ctx)
++        # TODO prendre le message de commit aussi et update la documentation:
++        pkg.commit("New upstream release {}".format(version))
++
++
++@click.command()
++def packages():
++    pass
++
++
++release.add_command(new_tag)
++release.add_command(packages)
++
 +if __name__ == "__main__":
-+    packages = (
-+        DownstreamPackage("dpkg", repopath("dpkg-lightsd")),
-+        DownstreamPackage("homebrew", repopath("homebrew-lightsd")),
-+        DownstreamPackage("openwrt", repopath("openwrt-lightsd")),
-+        DownstreamPackage("pkgbuild", repopath("pkgbuild-lightsd")),
-+    )
++    release()
+diff --git a/dist/requirements-release.txt b/dist/requirements-release.txt
+new file mode 100644
+--- /dev/null
++++ b/dist/requirements-release.txt
+@@ -0,0 +1,2 @@
++click~=6.6
++jinja~=1.2