[packaging/craftmaster] /: craftmaster: add command line option --determine-package
Ralf Habacker <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit db6814621b9d53de34b40bc00e16cc1ed64612ab by Ralf Habacker.
Committed on 22/07/2026 at 16:16.
Pushed by habacker into branch 'master'.
craftmaster: add command line option --determine-package
M +17 -2 CraftMaster.py
M +20 -2 tests/test_craftmaster.py
https://invent.kde.org/packaging/craftmaster/-/commit/db6814621b9d53de34b40bc00e16cc1ed64612ab
diff --git a/CraftMaster.py b/CraftMaster.py
index aa5d98b..408e63d 100644
--- a/CraftMaster.py
+++ b/CraftMaster.py
@@ -31,7 +31,6 @@ class CraftMaster(object):
self.targets = set(targets) if targets else set()
self.verbose = verbose
self.doSetup = setup
- self._setDefaultCraftPackage()
self._setConfig([Path(x).absolute() for x in configFiles], variables)
# https://stackoverflow.com/a/1214935
@@ -367,9 +366,13 @@ if __name__ == "__main__":
parser.add_argument(
"--config",
action="store",
- required=True,
help="The path to the configuration file.",
)
+ parser.add_argument(
+ "--determine-package",
+ action="store_true",
+ help="Print the package name determined from CRAFT_PACKAGE or CI titles.",
+ )
parser.add_argument(
"--setup",
action="store_true",
@@ -401,6 +404,18 @@ if __name__ == "__main__":
)
args = parser.parse_args()
+ if args.determine_package:
+ master = CraftMaster.__new__(CraftMaster)
+ master.verbose = args.verbose
+ master._setDefaultCraftPackage()
+
+ if "CRAFT_PACKAGE" not in os.environ:
+ master._error("Aborting because the package name is required")
+
+ print(os.environ["CRAFT_PACKAGE"])
+ exit(0)
+ if not args.config:
+ parser.error("--config is required unless --determine-package is used")
configs = [args.config]
configs += args.config_override
master = CraftMaster(
diff --git a/tests/test_craftmaster.py b/tests/test_craftmaster.py
index 7d26254..de7a333 100644
--- a/tests/test_craftmaster.py
+++ b/tests/test_craftmaster.py
@@ -6,6 +6,8 @@ import contextlib
import io
import json
import os
+import subprocess
+import sys
import tempfile
import unittest
from unittest import mock
@@ -53,10 +55,10 @@ class CraftPackageExtractionTest(unittest.TestCase):
self.make_master()._setDefaultCraftPackage()
self.assertNotIn("CRAFT_PACKAGE", os.environ)
+ self.assertIn("Unable to use title source(s): GITHUB_EVENT_PATH", stderr.getvalue())
self.assertIn(
- "Unable to use title source(s): GITHUB_EVENT_PATH", stderr.getvalue()
+ "Warning: CRAFT_PACKAGE was not set and no merge request", stderr.getvalue()
)
- self.assertIn("Continuing without CRAFT_PACKAGE", stderr.getvalue())
def test_sets_craft_package_from_github_pull_request_title(self):
with tempfile.NamedTemporaryFile(
@@ -78,6 +80,22 @@ class CraftPackageExtractionTest(unittest.TestCase):
finally:
os.unlink(event_path)
+ def test_determine_package_option_prints_detected_package_without_config(self):
+ env = {
+ "PATH": os.environ["PATH"],
+ "CI_COMMIT_TITLE": "kcalc: Build package",
+ }
+ completed = subprocess.run(
+ [sys.executable, "CraftMaster.py", "--determine-package"],
+ check=True,
+ encoding="utf-8",
+ env=env,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ )
+
+ self.assertEqual(completed.stdout.strip(), "kcalc")
+
if __name__ == "__main__":
unittest.main()