From patchwork Wed Feb 11 19:55:33 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Orling X-Patchwork-Id: 80934 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id D54F0ECD6E3 for ; Wed, 11 Feb 2026 19:55:49 +0000 (UTC) Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.27914.1770839746952061513 for ; Wed, 11 Feb 2026 11:55:47 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=khRHQ3lC; spf=pass (domain: gmail.com, ip: 209.85.210.179, mailfrom: ticotimo@gmail.com) Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-824adc96ad2so326489b3a.3 for ; Wed, 11 Feb 2026 11:55:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770839746; x=1771444546; darn=lists.yoctoproject.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ZOCIcp29lq/M55SkmhIQVIhdbqF4388ZhmRXwUEe9P4=; b=khRHQ3lC3HW+/LFmWH4dg9E6OPGkD6SLsUAS+RP3JKos8bcth7ihfwj+TQCQTThPuR eK1XNFpqGap8q9Cty3CKtWUiQKScT4aEGBNOTOlzFJp1U8FDpE7Q6qu39a59tNhcwIfl 0sX4qdYEMD8pzEmLNoE7YrPfE5qacWg1SxgaXGQzzpjVXr77B1ZhpVBWGViyr6wUZH2X mtG3tCllf9bN3MaHK0Hj13D6Sp14SoB/D5M4CV1p5FxijjvcqPfjWsDYwcrX5TQQS85c oAUkL6iEprNhtwm3DqeHI9I+o2X53iOZjkWMBT95L6mjVMqJx3TkZnlb53fXABHDDaGu YXUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770839746; x=1771444546; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ZOCIcp29lq/M55SkmhIQVIhdbqF4388ZhmRXwUEe9P4=; b=kD69v10mxkQ477OTpsCwS+hlxUUZkjNX0GRCJJ9V1k/fjvVgDXAbWDSV+DNSq9XxPV 7CdZdSLOut+OFTEMoTeaco3RIdJY4pKmG8M5ZJi1t8AyjpqGJyzMg7Z+iQmO+mpcCc4U Sg4/AJfwoXT3x4yTcoByUVsF80lnhcYYlddV23cHgT9n2/rL3IANa+d3FbLr9PMrAZwB rJG+nr/bkAkCzPMP9mM/uKApe+6Y76jj5h3mDk0bPPKg6OAvUmmacFnl5/h1w2AFgR3z WNTaEPeR1vfAO271YR7DXWDxwodgp1MliHEaVqjGVqmglVlF32sReg8hnePp+7YccaHm LFCA== X-Gm-Message-State: AOJu0YwmapHqKwQnVLcyoeVxzt8ogHSXsNCH1z2Y03VGPns/emdfPyQf 3lLL5MLU3wQw1A+YC7YlGDkw6VnOhqm8CJlY8FAX0VC0olqinINYDpNJLSif4Q== X-Gm-Gg: AZuq6aLrNW3zuIPbTLMXyeeZDhhwPviOerkMZNw4ITo3NIZgrcYmVdjSsxVFylK8dfY BPkCKRD9vfMid+CdrKdgK4YCfnzQ/xLjJ65SuqkzTOwpQRaz0Evkz7oF7AcI6JXwX4/aHjdqWX+ QOFthu84U8ns2M73aQyfzFuWbBTwFBf/e2snxvYVoZyGS9iOj8KWX2zvLcDtwcCjbLp8RzQ3yFl 3WKhj/DubsuFR+PJXm1eub0vZ3FPxHfSKgKj00UQLKbS/Pw8wqXMiR0KGyTLiMtGSq7sZhRKIKq U5vH0Fx02Yuoby5AzzaDpYuruqBjtwg5InfGTygTVkBcGe5xMEFPFafPJsGpCxv8ZHp7lzXhe3V ZCkJeZaL9aWn7ww8XKeBPnA4zsYGr+T6AVN1yra9QrLJE2pyvL7w6240+Yr9f4SEGr20ivq2do3 RrJ5ET76kSx/V/s1hoC35rPoPcdxhhe8S2OCjr1I30p+bYo8/BBRlDto+9DbYcxZRGXE4yOO3b7 xfb1BL4yVwhGrgbQOQfAu0= X-Received: by 2002:a05:6a00:2492:b0:823:52b6:1633 with SMTP id d2e1a72fcca58-824b0543412mr166389b3a.40.1770839745699; Wed, 11 Feb 2026 11:55:45 -0800 (PST) Received: from localhost.localdomain (c-98-232-159-17.hsd1.or.comcast.net. [98.232.159.17]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8249e7d621esm2810293b3a.32.2026.02.11.11.55.44 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 11 Feb 2026 11:55:45 -0800 (PST) From: Tim Orling X-Google-Original-From: Tim Orling To: yocto-patches@lists.yoctoproject.org Cc: Tim Orling Subject: [layerindex-web][PATCH 1/4] requirements: bump to fix vulnerabilities Date: Wed, 11 Feb 2026 11:55:33 -0800 Message-ID: <20260211195536.10278-1-tim.orling@konsulko.com> X-Mailer: git-send-email 2.50.1 MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 11 Feb 2026 19:55:49 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/yocto-patches/message/3214 -Django>=4.2,<4.3 +Django>=4.2.28,<4.3 https://docs.djangoproject.com/en/dev/releases/4.2.28/ CVE: CVE-2025-13473 CVE: CVE-2025-14550 CVE: CVE-2026-1207 CVE: CVE-2026-1285 CVE: CVE-2026-1287 CVE: CVE-2026-1312 -django-simple-captcha==0.6.0 +django-simple-captcha==0.6.3 https://django-simple-captcha.readthedocs.io/en/latest/changes.html#version-0-6-3 -Pillow==10.4.0 +Pillow==12.1.1 https://pillow.readthedocs.io/en/stable/releasenotes/12.1.1.html CVE: CVE-2026-25990 -sqlparse==0.5.1 +sqlparse==0.5.5 https://sqlparse.readthedocs.io/en/stable/changes.html#release-0-5-5-dec-19-2025 Signed-off-by: Tim Orling --- requirements.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/requirements.txt b/requirements.txt index 15530a6..7a3806c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +-i https://pkgs.safetycli.com/repository/self-d8782/project/layerindex-web/pypi/simple/ amqp==5.2.0 asgiref==3.8.1 beautifulsoup4==4.12.3 @@ -9,7 +10,7 @@ click-plugins==1.1.1 click-repl==0.3.0 confusable-homoglyphs==3.3.1 diff-match-patch==20230430 -Django>=4.2,<4.3 +Django>=4.2.28,<4.3 django-appconf==1.0.6 django-axes==6.5.1 django-cors-headers==4.4.0 @@ -18,21 +19,21 @@ django-ranged-response==0.2.0 django-registration==3.4 django-reversion==5.1.0 django-reversion-compare==0.17.0 -django-simple-captcha==0.6.0 +django-simple-captcha==0.6.3 djangorestframework==3.15.2 gitdb==4.0.11 GitPython==3.1.43 kombu==5.4.0 mysqlclient==2.2.4 packaging_legacy==23.0.post0 -Pillow==10.4.0 +Pillow==12.1.1 prompt-toolkit==3.0.47 python-dateutil==2.9.0.post0 pytz==2024.1 six==1.16.0 smmap==5.0.1 soupsieve==2.6 -sqlparse==0.5.1 +sqlparse==0.5.5 typing_extensions==4.12.2 tzdata==2024.1 vine==5.1.0 From patchwork Wed Feb 11 19:55:34 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Orling X-Patchwork-Id: 80937 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A29B1ECD6E6 for ; Wed, 11 Feb 2026 19:55:59 +0000 (UTC) Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.27915.1770839751213334997 for ; Wed, 11 Feb 2026 11:55:51 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=b7lkWMmS; spf=pass (domain: gmail.com, ip: 209.85.216.47, mailfrom: ticotimo@gmail.com) Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-3530e7b3dc2so2058293a91.3 for ; Wed, 11 Feb 2026 11:55:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770839750; x=1771444550; darn=lists.yoctoproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KiF+U4+8DbSF5IOZ30uEZkkjQQhEAOreJA1Yet/PxSg=; b=b7lkWMmSUszPAg9qd3SkcczIs17Jq3ZzkOEDrVcPrhMFBVX46+ggl+BGPX+ejXlTJ4 Qu2MNoT6zlXnRNhvO2wxaaiXet9QRrItYwAeBt82ZrA3m4d5mYzq1BUVlQal5vG6pP3S 52Iwx+bdDGS0xM/gE2Zh6fh6feKAKje4Uovz59uF8w828/TJqBWT056ljDL9M9JLQbqM mD0djpVstQSRl60IxqpmJtnBjyay05V35PAansK4QAl/nYtOh5GdoFlmrQkxvDCANbxK pXGpOK5vFFfMwVtom/QpgiWzp2S9Qpw+QwaXIqzMzvHTuAm74btYh52J2e1gPo7PviH7 JDZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770839750; x=1771444550; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=KiF+U4+8DbSF5IOZ30uEZkkjQQhEAOreJA1Yet/PxSg=; b=U8UewN7wRPGLdlOEy24U45eskT3E1aHyGSEmn9hVYOhPiUX/o1BtHkFrl43xl9Yzd1 iYd7pw8mKp82A3bVkftagnE2Tnp9p7LTt8gS0iSKtQvZ18Xsen2JyQlWz7nA4Lu+VFBz TNTH0Qg2XsG/QmEuG7oQ0rlHVxrcBU5SaM1rM9mYmROksFciQCKGHLCXn5RdBRKFPohs eiDVXL1U/0FmWFWR0clddiuqoXqrcIkv+UoxuoVqv266qPgccRbhCbEfQPmL89tIW0Nf 598oNEwl8+0/aTRQ1JCuYzVWCP1UyeBmntxlOMi8ssjDdn01ts3s2PBo/4CS9ufsYhZ0 EzvQ== X-Gm-Message-State: AOJu0YyI4ayQ90EjxU1u4Ysjx/d0zxJQ6Q5rkGHZ/t0eYs6bO/1T3gyJ p69gBd24J7jnkRUiLbUgXGnGHr1wqoVuPGt2WShtEy+SxSVEDo94/XvXaZynVg== X-Gm-Gg: AZuq6aLSvgUT/3eSFksUXgGexNeum4azQOF1mPS9dk6VXmwfWVv9B977JluXwIVz4rm K37OUuB7FSQiEphs9dkrLAUGohPb7DzZCKxuVSSmQFQNoTZKmxAk8auQgGIEVcT+E2Pk8WCmaBp t8jqSIILf2y8pGFiNYej9gCTmKOykvlXqOEZQ/L98/aaXVrONuFiLtj84a4hkZDOPEhkVsouOUC EtK56QyKcDg+/a7Jt5IvL7cAQgnvlDmWM3BaOslvrNoNReneA5v750IkgVd0jLRJAOdIA8JtJxU Eh4XN1Cb8+gQe3CT06QXtZ0OIXc4aJYSLIVqem2iEwrjjGvGsOqV6VXmzmQUqEqVlAXV9HeojFW 4QFxXh5u/xJoXCuJIsCkaAnFfll2mPlpF/QX1yUM/uNm82jYS9QaKEbhFURpQNF4DpmECri2ws3 lkPEFj7852wn2zyDo/roFaPAF80eAd47IFg1wDmGEvhUGLlvVod9e2VRU2+K4FdnUBAKbg6ODkx 5BdnJ1QL74ba9qlo7FubtE= X-Received: by 2002:a17:90b:350c:b0:356:7a0c:372f with SMTP id 98e67ed59e1d1-3568f3e80cdmr526624a91.17.1770839749848; Wed, 11 Feb 2026 11:55:49 -0800 (PST) Received: from localhost.localdomain (c-98-232-159-17.hsd1.or.comcast.net. [98.232.159.17]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8249e7d621esm2810293b3a.32.2026.02.11.11.55.47 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 11 Feb 2026 11:55:49 -0800 (PST) From: Tim Orling X-Google-Original-From: Tim Orling To: yocto-patches@lists.yoctoproject.org Cc: Tim Orling Subject: [layerindex-web][PATCH 2/4] rrs: tools: add create_release.py Date: Wed, 11 Feb 2026 11:55:34 -0800 Message-ID: <20260211195536.10278-2-tim.orling@konsulko.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260211195536.10278-1-tim.orling@konsulko.com> References: <20260211195536.10278-1-tim.orling@konsulko.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 11 Feb 2026 19:55:59 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/yocto-patches/message/3215 Allow for a new release and milestones to be created from a YAML file input. Add PyYAML==6.0.3 to requirements.txt Fixes: [YOCTO #15578] Signed-off-by: Tim Orling --- requirements.txt | 1 + rrs/tools/create_release.py | 160 ++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100755 rrs/tools/create_release.py diff --git a/requirements.txt b/requirements.txt index 7a3806c..767d4bc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -38,3 +38,4 @@ typing_extensions==4.12.2 tzdata==2024.1 vine==5.1.0 wcwidth==0.2.13 +PyYAML==6.0.3 diff --git a/rrs/tools/create_release.py b/rrs/tools/create_release.py new file mode 100755 index 0000000..3f14820 --- /dev/null +++ b/rrs/tools/create_release.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 + +# +# Create a new release (and its milestones) from a YAML file. +# +# Licensed under the MIT license, see COPYING.MIT for details +# +# SPDX-License-Identifier: MIT + +import sys +import os.path + +sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))) +sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..', 'layerindex'))) + +import argparse +import utils +import logging +import yaml + +logger = utils.logger_create('CreateRelease') + + +def main(): + parser = argparse.ArgumentParser( + description="Create a new release and milestones from a YAML file", + epilog="""Example YAML file: + + release: + plan: "OE-Core" + name: 5.1 + start_date: 2024-04-30 + end_date: 2024-10-25 + milestones: + - name: M1 + start_date: 2024-04-30 + end_date: 2024-05-31 + - name: M2 + start_date: 2024-06-03 + end_date: 2024-07-19 +""", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("yamlfile", help="Path to YAML file defining the release") + parser.add_argument('-d', '--debug', action='store_true', + help='Enable debug output') + parser.add_argument('-q', '--quiet', action='store_true', + help='Hide all output except error messages') + parser.add_argument('-n', '--dry-run', action='store_true', + help='Do not write any changes') + parser.add_argument('--update', action='store_true', + help='Update existing release/milestones if they already exist') + + args = parser.parse_args() + + if args.debug: + loglevel = logging.DEBUG + elif args.quiet: + loglevel = logging.WARNING + else: + loglevel = logging.INFO + + logger.setLevel(loglevel) + + with open(args.yamlfile, 'r') as f: + data = yaml.safe_load(f) + + if 'release' not in data: + logger.error("YAML file must contain a top-level 'release' key") + sys.exit(1) + + reldata = data['release'] + + for field in ('plan', 'name', 'start_date', 'end_date'): + if field not in reldata: + logger.error("Release is missing required field '%s'" % field) + sys.exit(1) + + milestones = reldata.get('milestones', []) + for i, ms in enumerate(milestones): + for field in ('name', 'start_date', 'end_date'): + if field not in ms: + logger.error("Milestone %d is missing required field '%s'" + % (i + 1, field)) + sys.exit(1) + + utils.setup_django() + from rrs.models import MaintenancePlan, Release, Milestone + from django.db import transaction + + plan_name = str(reldata['plan']) + maintplan = MaintenancePlan.objects.filter(name=plan_name).first() + if not maintplan: + logger.error("Maintenance plan '%s' does not exist. Available plans: %s" + % (plan_name, + ', '.join(MaintenancePlan.objects.values_list('name', flat=True)))) + sys.exit(1) + + release_name = str(reldata['name']) + + try: + with transaction.atomic(): + existing = Release.objects.filter(plan=maintplan, + name=release_name).first() + if existing: + if not args.update: + logger.error("Release '%s' already exists for plan '%s' " + "(use --update to update it)" % (release_name, plan_name)) + sys.exit(1) + release = existing + release.start_date = reldata['start_date'] + release.end_date = reldata['end_date'] + release.save() + logger.info("Updated release '%s'" % release) + else: + release = Release.objects.create( + plan=maintplan, + name=release_name, + start_date=reldata['start_date'], + end_date=reldata['end_date'], + ) + logger.info("Created release '%s'" % release) + + for ms in milestones: + ms_name = str(ms['name']) + existing_ms = Milestone.objects.filter(release=release, + name=ms_name).first() + if existing_ms: + if not args.update: + logger.error("Milestone '%s' already exists for release " + "'%s' (use --update to update it)" + % (ms_name, release)) + sys.exit(1) + existing_ms.start_date = ms['start_date'] + existing_ms.end_date = ms['end_date'] + existing_ms.save() + logger.info("Updated milestone '%s'" % existing_ms) + else: + milestone = Milestone.objects.create( + release=release, + name=ms_name, + start_date=ms['start_date'], + end_date=ms['end_date'], + ) + logger.info("Created milestone '%s'" % milestone) + + if args.dry_run: + raise DryRunRollbackException + except DryRunRollbackException: + logger.info("Dry run; changes not saved") + + sys.exit(0) + + +class DryRunRollbackException(Exception): + pass + + +if __name__ == "__main__": + main() From patchwork Wed Feb 11 19:55:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Orling X-Patchwork-Id: 80936 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A5ADBECD6E9 for ; Wed, 11 Feb 2026 19:55:59 +0000 (UTC) Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.27916.1770839753202055438 for ; Wed, 11 Feb 2026 11:55:53 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=fvyQOLTg; spf=pass (domain: gmail.com, ip: 209.85.215.179, mailfrom: ticotimo@gmail.com) Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-c5513f598c0so2618704a12.0 for ; Wed, 11 Feb 2026 11:55:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770839752; x=1771444552; darn=lists.yoctoproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Bo+ZB0clgwRrPqKB0WVvdRlOwzGd3hOadMarlpBcM+Q=; b=fvyQOLTglhu7rfXOTKQEUMbRQJWSl9VD3is7Q8qQOR/35XSk4kDahkeVayBgM1jvUh rMyg5QHNlruJhZpSUITsior3J8eYnvvH5gO8I12ibur2Wep1+zXTBZB5WZjmSgdlg4qz xyqu2S2k+xqO5qkApv93XmcBvgJHqVJ5W+2M7zOZH5zpkp7ik8l96Uj7MljSu1pOgs1k GeaJoRlbYyB11t9IMXei81DEMlwEtu5UawtcnirBibNTeOfj84sJW0pMsIsDB+R535rK W/yYCBifC1rVQaUI1WmdRaCM5g1PdyJC60zxl8yQB2pnjGdpYuGcCI1SiIQrCokiaD3L J49g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770839752; x=1771444552; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Bo+ZB0clgwRrPqKB0WVvdRlOwzGd3hOadMarlpBcM+Q=; b=N7NwU+i8clUY8Y5CORY+51npgl06S2p0AeZikWbDn1SnksQRroIQnTknHnnOj5JoaB AKyVEbWXMWPgweO88hN/PaSDIvE4aIdZpAdQ40HNJDBJ+o/THFcGDEMtdtdRZXAT0neu 0L0eUWxFt1+Q7rNeuVVCotpaWXXhzy2LU1yadPCOQ0zdnPg5iwEjUN0Z/hTYJox0wJNc l9neHw0nfnlE3sCsArH/zLwpGy4NTIOkReH26PSIrCk1rPECDL0VA8tZ+eZnOp7IPLEz KPffGum/h/7E3hw+yw7t7YsdG5sqE0vVTS+WcJOJ+mcYzeolHiM61dA6jTIZvguBfqE5 2xWg== X-Gm-Message-State: AOJu0YxUfDWjucJ7lmKdqcFlJfXPDZne9zxFW7rq2dX8IKFhFUcRYY/U b+dyD+L6kDuKPOcHhO29bA67uZ2MDhZzqnTOuhoNyS0HQEqflkxEstbiiDVZhg== X-Gm-Gg: AZuq6aJWONjxlCrWbbEXbapGkzjWVyTAU/srMorTgiH7R7593hTqsMZyTT4NyS/oC9V A13rpxkwdvd7RFZqDn/jqLqccRV5NbvQ+QZ8CjziVho7ApSD62xfRsYtABP+PYaWCqA9Xld558p EUSfo9mLx2BPgx/eQyfTRZtOWhStiNsZGED5eXy4v70aXMt4qitN0RXXnyh9uQpY9AT++BfW7MF kr+mMYdvyXqhBrsNOnToo227pu46fUTKJOp8GKdhHzY3o8xACrd4yBuHSFpsf6r4Tww3rI20pfL YCO2g5kiRg5SjIJnwvFosA80AsBuwVVUvBhLBXuW6sfCuU1tZhWh3Bv7XzHfrFHLVHhXCG6EvEU kPns61EapH+ImGjnfog6/z1W3rf2HkxBjKqGZ+FUK+xaQ+N9h+A2IMHm9G2Ff/cbtGWivDAOsIc o39Y9lNjFz5Hgg2hQJorP1fB4WQgclWaCmkEKYQvqWKOFGKK49LFRxE4giwhFPFzlAugHUcTsIN PscH/aZXBGe413X3mtjfas= X-Received: by 2002:a17:90b:35ce:b0:356:268f:4fc with SMTP id 98e67ed59e1d1-3568f300efemr483692a91.11.1770839752067; Wed, 11 Feb 2026 11:55:52 -0800 (PST) Received: from localhost.localdomain (c-98-232-159-17.hsd1.or.comcast.net. [98.232.159.17]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8249e7d621esm2810293b3a.32.2026.02.11.11.55.51 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 11 Feb 2026 11:55:51 -0800 (PST) From: Tim Orling X-Google-Original-From: Tim Orling To: yocto-patches@lists.yoctoproject.org Cc: Tim Orling Subject: [layerindex-web][PATCH 3/4] BranchComparison: add CSV output option Date: Wed, 11 Feb 2026 11:55:35 -0800 Message-ID: <20260211195536.10278-3-tim.orling@konsulko.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260211195536.10278-1-tim.orling@konsulko.com> References: <20260211195536.10278-1-tim.orling@konsulko.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 11 Feb 2026 19:55:59 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/yocto-patches/message/3216 Add a new template, URL and button for CSV text file output. This makes it easier to consume the BranchComparison for automation or other usage, such as in a spreadsheet. Signed-off-by: Tim Orling --- layerindex/urls.py | 5 +++++ templates/layerindex/branchcompare.html | 1 + templates/layerindex/branchcompare_csv.txt | 11 +++++++++++ 3 files changed, 17 insertions(+) create mode 100644 templates/layerindex/branchcompare_csv.txt diff --git a/layerindex/urls.py b/layerindex/urls.py index 3b95a88..7555907 100644 --- a/layerindex/urls.py +++ b/layerindex/urls.py @@ -200,6 +200,11 @@ urlpatterns = [ content_type='text/plain; charset=utf-8', template_name='layerindex/branchcompare_rst.txt'), name='branch_comparison_rst'), + re_path(r'^branch_comparison_csv/$', + BranchCompareView.as_view( + content_type='text/csv; charset=utf-8', + template_name='layerindex/branchcompare_csv.txt'), + name='branch_comparison_csv'), re_path(r'^recipe_deps/$', RecipeDependenciesView.as_view( template_name='layerindex/recipedeps.html'), diff --git a/templates/layerindex/branchcompare.html b/templates/layerindex/branchcompare.html index 93ac801..83561fd 100644 --- a/templates/layerindex/branchcompare.html +++ b/templates/layerindex/branchcompare.html @@ -152,6 +152,7 @@ Plain text rST + CSV text diff --git a/templates/layerindex/branchcompare_csv.txt b/templates/layerindex/branchcompare_csv.txt new file mode 100644 index 0000000..d407ae3 --- /dev/null +++ b/templates/layerindex/branchcompare_csv.txt @@ -0,0 +1,11 @@ +{# Header #} +recipe.pn,recipe.pv.{{from_branch}},recipe.pv.{{to_branch}} +{# Added #} +{% for recipe in added %}{{ recipe.pn }},,{% for rv in recipe.to_versions %}{{ rv.pv }}{% if not forloop.last %}{% endif %}{% endfor %} +{% endfor %} +{# Changed #} +{% for recipe in changed %}{% with pv_changed=recipe.pv_changed %}{{ recipe.pn }},{% for rv in recipe.from_versions %}{{ rv.pv }}{% if rv.srcrev and not pv_changed %},({{ rv.srcrev|truncatechars:13 }}){% endif %}{% if not forloop.last %}, {% endif %}{% endfor %} -> {% for rv in recipe.to_versions %}{{ rv.pv }}{% if rv.srcrev and not pv_changed %} ({{ rv.srcrev|truncatechars:13 }}){% endif %}{% if not forloop.last %}, {% endif %}{% endfor %} +{% endwith %}{% endfor %} +{# Removed #} +{% for recipe in removed %}{{ recipe.pn }},, +{% endfor %} From patchwork Wed Feb 11 19:55:36 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tim Orling X-Patchwork-Id: 80935 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F9E9ECD6E7 for ; Wed, 11 Feb 2026 19:55:59 +0000 (UTC) Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.28225.1770839755698619084 for ; Wed, 11 Feb 2026 11:55:55 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=TQNJQJz7; spf=pass (domain: gmail.com, ip: 209.85.210.182, mailfrom: ticotimo@gmail.com) Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-8230f8f27cfso3500055b3a.0 for ; Wed, 11 Feb 2026 11:55:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770839754; x=1771444554; darn=lists.yoctoproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tNUxCa6agjApiCbIcLn82ht+gQrxWhACHscn1SDu34I=; b=TQNJQJz7gwDoH4KHIntnZirpmARm/WX2ZYAxfb7NDg61zaOHDMKRU1zR3S7nMyCphl ZOrA7zEgDw5BTnxC3at4oyOdN6S625CI779fc7IAn4QI8cDqF9lNDdj5DbQKnH7gHJV7 p0FVFuUcby2li53plzaKuMYqUsHDcigEjinl7hHLEVvCDHYKs81pH7kFAdH//9hWl0sU YUoyd7WTpS+FPmQZeQ0rrDNtkknslm60FHwc9rkBq7cPEkrGjTq0uH3c+u0R/fcjTiDW us1zob2rks+eH8vhHtdKchgZR2y6FCieQ5T3YL/8UeNzjkKpa3JrAbB03cWemuDA9ctr qBmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770839754; x=1771444554; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tNUxCa6agjApiCbIcLn82ht+gQrxWhACHscn1SDu34I=; b=aoSNqNhDoXnwtR36EIqfAwJldMiGTsIWGwCA/UPax7TPQaSrgDtYZBTvxrJgRT/rv8 yiys9uzEfnW/p5ZjOTVk3K5hd2l6gy7/DoF+hoIdTjOY3oRhbhhhdTD9mUiWHXipsuR/ XwUTjnWciWVbWLJEzLwz7tWlDGUazyP/FUtgupFPGahupiMUcqq9EDTgowT7uUEzwg4V zLBxLDJIIj5RtXOVqhUi6hcn/MFSD81FLIm3ZQ0Vh6BgzqDtVIgVcrrpCj4p2/h6wtbK GnF5Eber5ZPYehykcnn1BD4Ypa5rJwBKup87qurQ6akx0z+2SjgN4WpUwbVQ3ufLwAvg QJuQ== X-Gm-Message-State: AOJu0YyY6UzNgL75GTWhihrl5CwjA4BQ648fBb70kvXeSnfPcVBm0M23 Ue9Wwq7gUEyc0jwbzMNzMWN99f57Ao6uMZyJzmckoaxnD8sDfW6C4wapApileA== X-Gm-Gg: AZuq6aKJnPYPm5gJWnxC8Xu/egiqz/pr2LQJjbU8PKzeqLt9timEojFV7Pmk5Ects6a YjBI49o9GwaO4zbyrQUz6oT3ijoZNjJa9GAMtdL+2NyF5m4GYwNJ+i1C5LuCIFeNXfvG/fMtnpX PDY08hrTcdyQuTWfg6ZYxJ/oTHl/dR/3GH3c5ntyX+TLPsmk8QR3uJvS6MlSxW3X85qvaHgq6xN ljDL86ts6hh5GcPjLIK9osO/Zy/SnahlDd6efrEa5vChuOS+h5SoFMUbsKnTkPe++ynjVkyl1By MfnT8vo0YQ5bsTRQUkmkkk2hbNiNh+IBGklWsWFwu8pZONsXXNJXbPEOuLuz8Q4DaJ5NpALbnKU iCcS+QeZ2+OI1Bfb36oPcLUknjlQ91BpK+Ga0zVRjQets50WUElFD8uajJKmOhDnOUv/6cPce3G kpo8cffEBhc9BlnMd7Qu3Tiev6zgOTIeyPPVOwpAyNvt7IC/4yJEe9U4VaCvjtRwfh//wcwpcgq fUIm2NT5gzpBnA19DjUAuWJDgsge6Oh9Q== X-Received: by 2002:a05:6a00:1da1:b0:81f:4884:4fed with SMTP id d2e1a72fcca58-824b03db50emr249740b3a.7.1770839754531; Wed, 11 Feb 2026 11:55:54 -0800 (PST) Received: from localhost.localdomain (c-98-232-159-17.hsd1.or.comcast.net. [98.232.159.17]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8249e7d621esm2810293b3a.32.2026.02.11.11.55.53 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 11 Feb 2026 11:55:53 -0800 (PST) From: Tim Orling X-Google-Original-From: Tim Orling To: yocto-patches@lists.yoctoproject.org Cc: Tim Orling Subject: [layerindex-web][PATCH 4/4] BranchComparison: use mime type text/x-rst rST Date: Wed, 11 Feb 2026 11:55:36 -0800 Message-ID: <20260211195536.10278-4-tim.orling@konsulko.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260211195536.10278-1-tim.orling@konsulko.com> References: <20260211195536.10278-1-tim.orling@konsulko.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Wed, 11 Feb 2026 19:55:59 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/yocto-patches/message/3217 https://docutils.sourceforge.io/FAQ.html#what-s-the-official-mime-type-for-restructuredtext-data Signed-off-by: Tim Orling --- layerindex/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layerindex/urls.py b/layerindex/urls.py index 7555907..51a832d 100644 --- a/layerindex/urls.py +++ b/layerindex/urls.py @@ -197,7 +197,7 @@ urlpatterns = [ name='branch_comparison_plain'), re_path(r'^branch_comparison_rst/$', BranchCompareView.as_view( - content_type='text/plain; charset=utf-8', + content_type='text/x-rst; charset=utf-8', template_name='layerindex/branchcompare_rst.txt'), name='branch_comparison_rst'), re_path(r'^branch_comparison_csv/$',