subprocess.run(
[
args.mkosi,
- '--directory', os.fspath(args.meson_source_dir),
+ '--directory', os.fspath(args.mkosi_dir),
'--json',
'summary',
],
'--quiet',
],
check=True,
- cwd=os.fspath(args.meson_source_dir),
+ cwd=os.fspath(args.mkosi_dir),
) # fmt: skip
subprocess.run(
'--quiet',
],
check=True,
- cwd=os.fspath(args.meson_source_dir),
+ cwd=os.fspath(args.mkosi_dir),
) # fmt: skip
Path(f'{output}.new').unlink()
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}',
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 []),
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'],