tools: introduce a tool for generating diffs for stage tests
There hasn't ever been an official tool for this and everyone was just using the output from the test to generate the diff. This commit introduces a proper tool for generating these files.
This commit is contained in:
parent
16294997d3
commit
04c545c39c
1 changed files with 108 additions and 0 deletions
108
tools/gen-stage-test-diff
Executable file
108
tools/gen-stage-test-diff
Executable file
|
|
@ -0,0 +1,108 @@
|
|||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import contextlib
|
||||
import os
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
|
||||
def run_osbuild(output_directory, store, cache_max_size, libdir, manifest):
|
||||
args = [
|
||||
"osbuild",
|
||||
"--export",
|
||||
"tree",
|
||||
"--output-directory",
|
||||
output_directory,
|
||||
"--store",
|
||||
store,
|
||||
"--cache-max-size",
|
||||
str(cache_max_size),
|
||||
"--checkpoint",
|
||||
"tree",
|
||||
"--checkpoint",
|
||||
"build",
|
||||
]
|
||||
|
||||
if libdir:
|
||||
args += ["--libdir", libdir]
|
||||
|
||||
args += [manifest]
|
||||
|
||||
try:
|
||||
subprocess.run(
|
||||
args,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
encoding="utf-8",
|
||||
check=True,
|
||||
)
|
||||
except subprocess.CalledProcessError as err:
|
||||
raise RuntimeError(
|
||||
f"osbuild crashed when building {manifest}:\n\nstdout:\n{err.stdout}\n\nstderr:\n{err.stderr}"
|
||||
)
|
||||
|
||||
|
||||
epilog = """
|
||||
example:
|
||||
|
||||
sudo tools/gen-stage-test-diff \\
|
||||
--store ~/osbuild-store \\
|
||||
--libdir . \\
|
||||
test/data/stages/zstd
|
||||
"""
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generator for diff.json files of stage tests",
|
||||
epilog=epilog,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
)
|
||||
parser.add_argument(
|
||||
"--store",
|
||||
type=str,
|
||||
help="Specify the osbuild store",
|
||||
default=1024 * 1024 * 1024,
|
||||
)
|
||||
parser.add_argument(
|
||||
"--cache-max-size", type=int, help="Specify the osbuild max cache size"
|
||||
)
|
||||
parser.add_argument("--libdir", type=str, help="Specify the osbuild max cache size")
|
||||
parser.add_argument("stage_test", type=str, help="Specify the stage test")
|
||||
args = parser.parse_args()
|
||||
|
||||
with contextlib.ExitStack() as stack:
|
||||
a = stack.enter_context(tempfile.TemporaryDirectory(dir="/var/tmp"))
|
||||
b = stack.enter_context(tempfile.TemporaryDirectory(dir="/var/tmp"))
|
||||
|
||||
store = args.store
|
||||
if not store:
|
||||
store = stack.enter_context(tempfile.TemporaryDirectory(dir="/var/tmp"))
|
||||
|
||||
run_osbuild(
|
||||
a,
|
||||
store,
|
||||
args.cache_max_size,
|
||||
args.libdir,
|
||||
os.path.join(args.stage_test, "a.json"),
|
||||
)
|
||||
run_osbuild(
|
||||
b,
|
||||
store,
|
||||
args.cache_max_size,
|
||||
args.libdir,
|
||||
os.path.join(args.stage_test, "b.json"),
|
||||
)
|
||||
|
||||
subprocess.run(
|
||||
[
|
||||
os.path.join(os.path.dirname(os.path.abspath(__file__)), "tree-diff"),
|
||||
os.path.join(a, "tree"),
|
||||
os.path.join(b, "tree"),
|
||||
],
|
||||
check=True,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue