diff --git a/test/integration-tests/integration-test-wrapper.py b/test/integration-tests/integration-test-wrapper.py index 9956a1df0c..f0d0de359d 100755 --- a/test/integration-tests/integration-test-wrapper.py +++ b/test/integration-tests/integration-test-wrapper.py @@ -53,7 +53,7 @@ class Summary: subprocess.run( [ args.mkosi, - '--directory', os.fspath(args.meson_source_dir), + '--directory', os.fspath(args.mkosi_dir), '--json', 'summary', ], @@ -329,7 +329,7 @@ def process_coverage(args: argparse.Namespace, summary: Summary, name: str, jour '--quiet', ], check=True, - cwd=os.fspath(args.meson_source_dir), + cwd=os.fspath(args.mkosi_dir), ) # fmt: skip subprocess.run( @@ -342,7 +342,7 @@ def process_coverage(args: argparse.Namespace, summary: Summary, name: str, jour '--quiet', ], check=True, - cwd=os.fspath(args.meson_source_dir), + cwd=os.fspath(args.mkosi_dir), ) # fmt: skip Path(f'{output}.new').unlink() @@ -378,6 +378,22 @@ def main() -> None: parser.add_argument('mkosi_args', nargs='*') args = parser.parse_args() + # The meson source directory can either be the top-level repository directory or the + # test/integration-tests/standalone subdirectory in the repository directory. The mkosi configuration + # will always be a parent directory of one of these directories and at most 4 levels upwards, so don't + # look further than that. + dirs = [args.meson_source_dir] + list(args.meson_source_dir.parents) + for p in dirs[: min(len(dirs), 4)]: + if (p / 'mkosi/mkosi.conf').exists(): + setattr(args, 'mkosi_dir', p) + break + else: + print( + f'Directory with mkosi config not found in any parent directories of {args.meson_source_dir}', + file=sys.stderr, + ) + exit(1) + if not bool(int(os.getenv('SYSTEMD_INTEGRATION_TESTS', '0'))): print( f'SYSTEMD_INTEGRATION_TESTS=1 not found in environment, skipping {args.name}', @@ -531,7 +547,7 @@ def main() -> None: cmd = [ args.mkosi, - '--directory', os.fspath(args.meson_source_dir), + '--directory', os.fspath(args.mkosi_dir), '--machine', name, '--ephemeral=yes', *(['--forward-journal', journal_file] if journal_file else []), diff --git a/test/integration-tests/meson.build b/test/integration-tests/meson.build index 1980acc10c..f32a3f0c0c 100644 --- a/test/integration-tests/meson.build +++ b/test/integration-tests/meson.build @@ -101,9 +101,7 @@ endforeach foreach integration_test : integration_tests integration_test_args = [ - # We don't use meson.project_source_root() because that doesn't work for running the tests - # standalone (see standalone/meson.build). - '--meson-source-dir', meson.current_source_dir() / '../..', + '--meson-source-dir', meson.project_source_root(), '--meson-build-dir', meson.project_build_root(), '--name', integration_test['name'], '--storage', integration_test['storage'],