1
0
Fork 0
mirror of https://codeberg.org/Mo8it/dotfiles.git synced 2024-10-17 20:52:40 +00:00
dotfiles/.scripts/fetch_installed_packages.py

115 lines
2.8 KiB
Python
Raw Normal View History

import json
2022-05-14 00:15:58 +00:00
import re
2022-05-04 20:45:52 +00:00
import subprocess
from os import environ
from pathlib import Path
2022-05-04 20:45:52 +00:00
def run(command, **kwargs):
return subprocess.run(command, shell=True, check=True, **kwargs)
def cap_run(command, **kwargs):
return run(
command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True, **kwargs
2022-05-14 00:15:58 +00:00
).stdout.strip()
def cap_run_in_build(command, **kwargs):
export_container_path = (
"export PATH=/root/.cargo/bin:/root/.npm-global/bin:$PATH && "
)
command_in_build = (
f"podman exec -it build bash -c '{export_container_path}{command}'"
)
return cap_run(command_in_build, **kwargs)
2022-05-04 20:45:52 +00:00
def rpm_ostree_packages(output_dir):
2022-05-04 20:45:52 +00:00
out = cap_run("rpm-ostree status --json")
json_out = json.loads(out)
deployments = json_out["deployments"]
booted_deployment = deployments[0]
if not booted_deployment["booted"]:
for depl in deployments:
if depl["booted"]:
booted_deployment = depl
break
removals = booted_deployment["requested-base-removals"]
additions = booted_deployment["requested-packages"]
2022-05-01 18:39:37 +00:00
file = output_dir / "rpm-ostree.json"
with file.open("w") as f:
2022-05-01 18:39:37 +00:00
dict = {"Removed": removals, "Added": additions}
json.dump(dict, f, indent=4)
2022-05-04 20:45:52 +00:00
2022-05-14 00:15:58 +00:00
def cargo_packages(output_dir):
out = cap_run_in_build("cargo install --list")
pattern = r"(.+) .+:.*"
crates = re.findall(pattern, out)
file = output_dir / "cargo.txt"
with file.open("w") as f:
for crate in crates:
f.write(crate + "\n")
def npm_packages(output_dir):
2022-05-14 00:15:58 +00:00
out = cap_run_in_build("npm list --json -g")
json_out = json.loads(out)
deps = json_out["dependencies"].keys()
file = output_dir / "npm.txt"
with file.open("w") as f:
for dep in deps:
f.write(dep + "\n")
2022-05-04 20:45:52 +00:00
def pipx_packages(output_dir):
2022-05-04 20:45:52 +00:00
out = cap_run("pipx list --json")
json_out = json.loads(out)
venvs = json_out["venvs"]
packages = []
2022-05-01 18:39:37 +00:00
injections = []
for ind, venv_key in enumerate(venvs.keys()):
metadata = venvs[venv_key]["metadata"]
packages.append(metadata["main_package"]["package_or_url"])
2022-05-01 18:39:37 +00:00
injections.append(list(metadata["injected_packages"].keys()))
2022-05-01 18:39:37 +00:00
file = output_dir / "pipx.json"
with file.open("w") as f:
2022-05-01 18:39:37 +00:00
dict = {p: i for p, i in zip(packages, injections)}
2022-05-04 20:45:52 +00:00
json.dump(dict, f, indent=4)
2022-05-14 00:15:58 +00:00
def main():
output_dir = Path(f"{environ['HOME']}/bk/installed_packages_info")
output_dir.mkdir(parents=True, exist_ok=True)
rpm_ostree_packages(output_dir)
run(
f"flatpak list --app --columns=name,application,origin > {output_dir}/flatpak.csv"
)
pipx_packages(output_dir)
run("podman start build")
2022-05-14 00:15:58 +00:00
cargo_packages(output_dir)
2022-05-14 00:15:58 +00:00
npm_packages(output_dir)
2022-05-14 00:15:58 +00:00
run("podman stop -t 0 build")
2022-05-14 00:15:58 +00:00
if __name__ == "__main__":
main()