diff options
authordistix ticketing system <>2018-07-26 14:14:04 +0000
committerdistix ticketing system <>2018-07-26 14:14:04 +0000
commit1c84c16cf62798186bb6c306b9e8876771ef7e5e (patch)
parentdad7c1313926abc9debc22a2f8b39347a2a24d03 (diff)
imported mails
1 files changed, 191 insertions, 0 deletions
diff --git a/tickets/fdf0ea2a14784fd0b4bc21727c915d9a/Maildir/new/1532614444.M574217P11733Q1.koom b/tickets/fdf0ea2a14784fd0b4bc21727c915d9a/Maildir/new/1532614444.M574217P11733Q1.koom
new file mode 100644
index 0000000..ec89ac1
--- /dev/null
+++ b/tickets/fdf0ea2a14784fd0b4bc21727c915d9a/Maildir/new/1532614444.M574217P11733Q1.koom
@@ -0,0 +1,191 @@
+Return-Path: <>
+Received: from ( [])
+ by (Postfix) with ESMTPS id BE78243816
+ for <>; Thu, 26 Jul 2018 14:13:38 +0000 (UTC)
+Received: from (unknown [])
+ by (Postfix) with ESMTP id 7F21F41468
+ for <>; Thu, 26 Jul 2018 15:13:38 +0100 (BST)
+Received: from ip6-localhost.nat ([::1]
+ by with esmtp (Exim 4.80 #2 (Debian))
+ id 1fih1O-0003jX-ED; Thu, 26 Jul 2018 15:13:38 +0100
+Received: from ([]
+ by with esmtpsa (Exim 4.80 #2 (Debian))
+ id 1fih1M-0003io-MB
+ for <>; Thu, 26 Jul 2018 15:13:36 +0100
+Received: from (
+ []) by (Postfix) with ESMTPSA id E321040A82
+ for <>; Thu, 26 Jul 2018 14:13:35 +0000 (UTC)
+Received: from (localhost [])
+ by (Postfix) with ESMTPS id 0634488041E
+ for <>; Thu, 26 Jul 2018 17:13:34 +0300 (EEST)
+Date: Thu, 26 Jul 2018 17:13:32 +0300
+From: Lars Wirzenius <>
+Message-ID: <>
+References: <20180726130528.xgtftruk6srzgi4x@somnambulist.local>
+MIME-Version: 1.0
+In-Reply-To: <20180726130528.xgtftruk6srzgi4x@somnambulist.local>
+User-Agent: Mutt/1.10.1 (2018-07-13)
+X-Pepperfish-Transaction: 209b-579f-e244-76b2
+X-Pepperfish-Transaction-By: platypus
+Subject: Re: Proposal: an icktool lint subcommand
+X-Mailman-Version: 2.1.5
+Precedence: list
+List-Id: discussions about the ick CI system <>
+List-Unsubscribe: <>,
+ <>
+List-Archive: <>
+List-Post: <>
+List-Help: <>
+List-Subscribe: <>,
+ <>
+Content-Type: multipart/mixed; boundary="===============2072883612514617144=="
+Mime-version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha512;
+ protocol="application/pgp-signature"; boundary="qMm9M+Fa2AknHoGS"
+Content-Disposition: inline
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+Content-Transfer-Encoding: quoted-printable
+On Thu, Jul 26, 2018 at 02:05:28PM +0100, Daniel Silverstone wrote:
+> I have noticed, over time, that it's possible to get into situations
+> where the controller is in a bit of an inconsistent or messy state.
+> To that end I'd like to suggest the introduction of a set of lints which
+> can be run against the controller to tell you about it (or a subset of it=
+I am in full support of this idea. I have some suggestions. We should
+definitely do some form of this idea, preferably sooner. I too have
+spent long evening trying to get all the details right.
+> * Projects refer to pipelines which do not exist
+> * Projects refer to pipelines but do not have all the requisite parameters
+> * Pipelines exist which are not referred to by any project
+> * Pipelines exist with no actions
+I would add the following check:
+* Project defines a parameter that none of its pipelines ask for.
+The first implementation thought I have is that we should make it easy
+to write checks. If it's easy, we'll have more, and they'll more
+likely be correct.
+My second implementation thought is it would be nice to be able to
+run the checks before putting the projects and pipelines into the
+controller. Thus, I'd do it client side. It would be nice if the
+client could read the projects and resources from the controller, or
+=66rom a local file, though. Local file is more important: if we have
+that, we can use "icktool show" to list all projects and pipelines.
+My third implementation thought is that I'd like this to not be part
+of icktool, which is growing fairly large already. Thus, a new tool,
+icklint, would be called for. It can be added to ick2.git, or be kept
+in its own repository. Could be written in Python or any other
+suitable language, such as Rust. (I'd like to learn Rust more.)
+Preferably a language I understand.
+Alternatively, we could have a set of checks, and a way to run them
+against a set of project and pipeline objects, and then use them both
+=66rom icktool, and in the controller, runnig the checks at build
+trigger time.
+Since I don't yet know enough Rust to write this, I sketch in Python:
+assume a main program that reads files with projects and pipelines,
+and then runs though a number of checks. Each check is implemented as
+an object with the following interface:
+ class IckLintCheck:
+ def set_projects(self, projects):
+ def set_pipelines(self, projects):
+ def get_projects(self):
+ def get_pipelines(self):
+ def find_lint(self):
+Here projects and pipelines are dicts indexed with the name of a
+project or pipeline, and find_lint yields a sequence of issues. An issue
+is a string to be displayed to the user.
+ class CheckProjects(IckLintCheck):
+ def find_lint(self):
+ checks =3D [self.check_pipeline_exists, self.check_params_given]
+ for p in self.get_projects():
+ for name in p['pipelines']:
+ for check in checks:
+ for issue in check(p, name):
+ yield issue
+ def check_pipeline_exists(self, p, name):
+ if name not in self.get_pipelines():
+ yield 'Project {} uses pipeline {}, which does not exist'.f=
+ p['project'], name)
+ def check_params_given(self, p, name):
+ pl =3D self.get_pipelines()[name]
+ for param in pl['parameters']:
+ if param not in p['parameters']:
+ yield 'Project {} does not define {}, needed by {}.form=
+ p['project'], param, name)
+It is probably possible to reduct boilerplate, but I hope you get the
+idea from the example.
+Does that seem reasonable?
+I want to build worthwhile things that might last. --joeyh
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+ick-discuss mailing list