From dfda290d6ab76ffe332d170ea3c2aaa7dab5314d Mon Sep 17 00:00:00 2001 From: Christian Kellner Date: Thu, 17 Jun 2021 15:05:50 +0000 Subject: [PATCH] stages: add org.osbuild.xz to compress files Add a new stage that will take a file from the input and compress it via xz. --- stages/org.osbuild.xz | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100755 stages/org.osbuild.xz diff --git a/stages/org.osbuild.xz b/stages/org.osbuild.xz new file mode 100755 index 00000000..e4643fd6 --- /dev/null +++ b/stages/org.osbuild.xz @@ -0,0 +1,76 @@ +#!/usr/bin/python3 +""" +Compress a file + +Buildhost commands used: `xz`. +""" + +import os +import subprocess +import sys + +import osbuild.api + + +SCHEMA_2 = r""" +"inputs": { + "type": "object", + "additionalProperties": false, + "required": ["file"], + "properties": { + "file": { + "type": "object", + "additionalProperties": true + } + } +}, +"options": { + "additionalProperties": false, + "required": ["filename"], + "properties": { + "filename": { + "description": "Filename to use for the compressed file", + "type": "string" + } + } +} +""" + + +def parse_input(inputs): + image = inputs["file"] + files = image["data"]["files"] + assert len(files) == 1 + + filename, _ = files.popitem() + filepath = os.path.join(image["path"], filename) + return filepath + + +def main(inputs, output, options): + filename = options["filename"].lstrip("/") + + source = parse_input(inputs) + target = os.path.join(output, filename) + + with open(target, "w") as f: + + env = { + "XZ_OPT": "--threads 0" + } + + cmd = [ + "xz", "--keep", "--stdout", "-0", source + ] + + subprocess.run( + cmd, stdout=f, check=True, env=env + ) + + return 0 + + +if __name__ == '__main__': + args = osbuild.api.arguments() + r = main(args["inputs"], args["tree"], args["options"]) + sys.exit(r)