From ed19fab2a3c39103c762b2c2283dbcda6c54fc48 Mon Sep 17 00:00:00 2001 From: Clayton Craft Date: Wed, 7 May 2025 13:45:56 -0700 Subject: [PATCH] ci/test_provides: make exception for provides with valid versions hardcoded The APKBUILD reference seems to suggest that versioned provides= can have any valid version string (e.g. 0.12-r3) in the `provides=` var, and that it doesn't have to match `$pkgver-r$pkgrel` for the APKBUILD. IIRC this test intends to catch typos like `provides=foo=$pkgver-$pkgrel`, so this makes it pass when any valid version string is given. Part-of: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6475 [ci:skip-build]: already built successfully in CI --- .ci/testcases/test_provides.py | 43 +++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/.ci/testcases/test_provides.py b/.ci/testcases/test_provides.py index 26f7a6626..869e7bdae 100644 --- a/.ci/testcases/test_provides.py +++ b/.ci/testcases/test_provides.py @@ -6,6 +6,7 @@ import logging import os import pytest import sys +import re import add_pmbootstrap_to_import_path import pmb.parse @@ -44,25 +45,29 @@ def apkbuild_check_provides(path, apkbuild, version, pkgname, subpkgname=None): # already replaces the variables, so we check against the inserted # values here. if not provide.endswith(f"={version}"): - provide_no_ver = provide.split("=", 1)[0] - - error = f"error in {path}:\n" - if subpkgname: - error += f"in subpackage:\n {subpkgname}\n" - else: - error += f"in package:\n {pkgname}\n" - error += f"broken provides entry:\n {provide_no_ver}\n" - error += "\n" - error += "This provides entry needs to be changed to" - error += f" '{provide_no_ver}=$pkgver-r$pkgrel'" - error += " (do not replace the variables, without '').\n" - error += "\n" - error += "If you know what you are doing and didn't add the" - error += " version on purpose, you also need to set a" - error += " provider_priority (pma#1766).\n" - error += "Reference:" - error += " https://wiki.alpinelinux.org/wiki/APKBUILD_Reference#provides" - ret += [error] + # Valid version strings, per the APKBUILD reference, are fine. This regex + # attempts to detect those. + pattern = r'^\d+(\.\d+)*[a-z]?(_(?:alpha|beta|pre|rc|cvs|svn|git|hg|p)\d*)*-r\d+$' + [provide_no_ver, provide_ver] = provide.split("=", 1) + if not re.match(pattern, provide_ver): + error = f"error in , provide_ver{path}:\n" + if subpkgname: + error += f"in subpackage:\n {subpkgname}\n" + else: + error += f"in package:\n {pkgname}\n" + error += f"broken provides entry:\n {provide_no_ver}\n" + error += "\n" + error += "This provides entry needs to be changed to" + error += f" '{provide_no_ver}=$pkgver-r$pkgrel'" + error += " (do not replace the variables, without '').\n" + error += "\n" + error += "If you know what you are doing and didn't add the" + error += " version on purpose, you also need to set a" + error += " provider_priority (pma#1766).\n" + error += "Reference:" + error += " https://wiki.alpinelinux.org/wiki/APKBUILD_Reference#provides" + error += f"\nVERSION: {provide_no_ver}" + ret += [error] return ret