fwupd/contrib/ci/flatpak.py

91 lines
3.0 KiB
Python
Executable File

#!/usr/bin/python3
import subprocess
import os
import json
import shutil
def prepare(target):
# clone the flatpak json
cmd = ["git", "submodule", "update", "--remote", "contrib/flatpak"]
subprocess.run(cmd, check=True)
# clone the submodules for that
cmd = ["git", "submodule", "update", "--init", "--remote", "shared-modules/"]
subprocess.run(cmd, cwd="contrib/flatpak", check=True)
# parse json
if os.path.isdir("build"):
shutil.rmtree("build")
data = {}
with open("contrib/flatpak/org.freedesktop.fwupd.json", "r") as rfd:
data = json.load(rfd, strict=False)
platform = "runtime/%s/x86_64/%s" % (data["runtime"], data["runtime-version"])
sdk = "runtime/%s/x86_64/%s" % (data["sdk"], data["runtime-version"])
num_modules = len(data["modules"])
# update to build from main
data["branch"] = "main"
for index in range(0, num_modules):
module = data["modules"][index]
if type(module) != dict or not "name" in module:
continue
name = module["name"]
if not "fwupd" in name:
continue
data["modules"][index]["sources"][0].pop("url")
data["modules"][index]["sources"][0].pop("sha256")
data["modules"][index]["sources"][0]["type"] = "dir"
data["modules"][index]["sources"][0]["skip"] = [".git"]
data["modules"][index]["sources"][0]["path"] = ".."
# write json
os.mkdir("build")
with open(target, "w") as wfd:
json.dump(data, wfd, indent=4)
os.symlink("../contrib/flatpak/shared-modules", "build/shared-modules")
# install the runtimes (parsed from json!)
repo = "flathub"
repo_url = "https://dl.flathub.org/repo/flathub.flatpakrepo"
print("Installing dependencies")
cmd = ["flatpak", "remote-add", "--if-not-exists", repo, repo_url]
subprocess.run(cmd, check=True)
cmd = ["flatpak", "install", "--assumeyes", repo, sdk]
subprocess.run(cmd, check=True)
cmd = ["flatpak", "install", "--assumeyes", repo, platform]
subprocess.run(cmd, check=True)
def build(target):
cmd = [
"flatpak-builder",
"--repo=repo",
"--force-clean",
"--disable-rofiles-fuse",
"build-dir",
target,
]
subprocess.run(cmd, check=True)
cmd = ["flatpak", "build-bundle", "repo", "fwupd.flatpak", "org.freedesktop.fwupd"]
subprocess.run(cmd, check=True)
if __name__ == "__main__":
t = os.path.join("build", "org.freedesktop.fwupd.json")
prepare(t)
build(t)
# to run from the builddir:
# sudo flatpak-builder --run build-dir org.freedesktop.fwupd.json /app/libexec/fwupd/fwupdtool get-devices
# install the single file bundle
# flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# flatpak install fwupd.flatpak
# to run a shell in the same environment that flatpak sees:
# flatpak run --command=sh --devel org.freedesktop.fwupd
# to run fwupdtool as root:
# sudo -i flatpak run org.freedesktop.fwupd --verbose get-devices